RT-thread国产实时操作系统概述
RT-Thread實(shí)時(shí)操作系統(tǒng)是一個(gè)分層的操作系統(tǒng),它包括了:
? 組件層components,這些是基于RT-Thread核心基礎(chǔ)上的外圍組件,把一些功能模塊劃分成獨(dú)立的一個(gè)個(gè)組件模塊,做到組件與組件之間的低耦合,組件內(nèi)部的高內(nèi)聚。
例如文件系統(tǒng),命令行shell接口,lwIP輕型TCP/IP協(xié)議棧,GUI圖形用戶界面等。
? 硬實(shí)時(shí)內(nèi)核kernel,這層是RT-Thread的核心,包括了內(nèi)核系統(tǒng)中對象的實(shí)現(xiàn),例如多線程及其調(diào)度,信號量,郵箱,消息隊(duì)列,內(nèi)存管理,定時(shí)器等實(shí)現(xiàn)。
?分支接口porting,主要由libcpu以及不同硬件平臺的bsp構(gòu)成,即RT-Thread支持的一個(gè)個(gè)芯片移植,外設(shè)驅(qū)動(dòng)等
在官網(wǎng)http://www.rt-thread.org/下載RT-Thread v2.0.0正式版,解壓后:
bsp:?針對各個(gè)具體開發(fā)板、平臺的目錄,其中包含相應(yīng)的Keil工程文件(如果包含了Keil MDK的移植)
components:各個(gè)組件,如dfs/drivers/finsh/gdb/libc/libdl/net/vbus/vmm等
documentation/examples:輔助文檔以及一些內(nèi)核、組件的測試實(shí)例
include:包含了RT-Thread內(nèi)核頭文件
libcpu:?面向各個(gè)芯片cpu移植的代碼
src:包含了RT-Thread內(nèi)核源文件
tools:支持各種集成開發(fā)環(huán)境的python文件,如常見的iar.py/keil.py/sconsui.py/vs2012.py
v2.0.0版本相對v1.2.x版本,又加入眾多新功能,有些很有趣,有些很實(shí)用:
1. 設(shè)備驅(qū)動(dòng)框架在v2.0.0版本中進(jìn)一步完善。DeviceDriver在RT-Thread中類似抽象的驅(qū)動(dòng)框架層,初衷是,向應(yīng)用層(或組件)提供標(biāo)準(zhǔn)統(tǒng)一的接口,向下(底層硬件)提供簡化的編程模型,在v2.0.0版本中,新添加了:SPI NorFlash(ATMEL/SST/華邦等廠家),SPI ETH(ENC28J60),SPI WiFi(RW009)等的驅(qū)動(dòng),這些驅(qū)動(dòng)依賴于RT-Thread的SPI抽象模型,提供了抽象、無需修改的外設(shè)驅(qū)動(dòng)代碼;類似的,建立在I2C驅(qū)動(dòng)框架上,v2.0.0版本也引入了sensor的驅(qū)動(dòng)框架,并提供了MPU6050、BMI055等傳感器的驅(qū)動(dòng);作為雜類設(shè)備的嘗試,GPIO(IO pin)的抽象框架也終于在這個(gè)版本提出來了,以后點(diǎn)燈簡單啦!
2. 在1.x系列版本中,USB device/host框架支持得一般,不能說非常棒,而在v2.0.0版本中,USB框架通過逐步的重構(gòu),也開始走向成熟,在服務(wù)公司里也應(yīng)用到多個(gè)項(xiàng)目,多個(gè)處理器上;
3. 為了方便的切換不同的編譯器平臺,在v2.0.0版本中也把原來的minilibc/newlib/armlibc用統(tǒng)一的宏替換:RT_USING_LIBC。老版本的代碼遷移過來,請注意下使用新的、統(tǒng)一的宏:RT_USING_LIBC。同時(shí)也加入了IAR的dlib,這樣當(dāng)配置中打開LIBC時(shí),scons將會(huì)自動(dòng)根據(jù)你當(dāng)前使用的編譯器來自動(dòng)選擇不同libc庫的移植;
4. GDB stub,這部分是CSDN編程夏令營活動(dòng)的成果之一,一直覺得類似夏令營的活動(dòng)很好,可以拉近學(xué)生和開發(fā)者的距離。通過這個(gè)組件,終于可以讓RT-Thread可以進(jìn)行軟件方式的調(diào)試了,雖然是命令行方式的GDB,但它也有很多圖形化前端配合來進(jìn)行源碼級的調(diào)試仿真;
5. lwIP相關(guān)的更新。這個(gè)貌似有很多,引爆點(diǎn)應(yīng)該說是一個(gè)很熱門的詞:物聯(lián)網(wǎng)。圍繞著這個(gè),v2.0.0版本中加入了RW009這樣的簡單易用的Wi-Fi網(wǎng)卡驅(qū)動(dòng),IPv4/v6雙協(xié)議棧的支持,DHCP server,甚至是NAT這樣的地址轉(zhuǎn)換實(shí)現(xiàn),哦,用RT-Thread來做小路由,網(wǎng)關(guān)變成了可能。哦,RT-Thread的目標(biāo)并不是物聯(lián)網(wǎng),更重要的是它是一套基礎(chǔ)性的軟件平臺。
6. 隨著Linux/RT-Thread同時(shí)執(zhí)行的方式,相應(yīng)的VMM組件,VBUS組件也在這個(gè)版本上發(fā)布出來。VMM組件更多的側(cè)重于單核,Linux/RT-Thread雙系統(tǒng)并行執(zhí)行以獲得更好的實(shí)時(shí)性,而VBUS組件則解決了Linux/RT-Thread雙系統(tǒng)之間的數(shù)據(jù)通信問題。兩者是相輔相成的。這兩個(gè)組件要求的技術(shù)性也更高,一般用于一些可靠性要求非常高的場合。在RT-Thread 2.0.0版本中也終于支持了LPC4357這樣的小異構(gòu)系統(tǒng)(LPC4357中包含了ARM Cortex M4/M0兩個(gè)異構(gòu)核心),實(shí)現(xiàn)了M4/M0上分別運(yùn)行RT-Thread系統(tǒng),兩者之間則通過VBUS進(jìn)行通信。所以,對多系統(tǒng)/VBUS感興趣的同學(xué)可以從LPC4357上入手。
在開發(fā)的過程中也出現(xiàn)了一個(gè)附加品,QEMU/realview上模擬執(zhí)行RT-Thread(或者Linux/RT-Thread)的BSP,它可以讓未經(jīng)修改的標(biāo)準(zhǔn)QEMU,去軟件仿真模擬執(zhí)行RT-Thread,或更進(jìn)一步,執(zhí)行Linux/RT-Thread。
RT-Thread v2.1.0 roadmap
下一個(gè)版本應(yīng)該是一個(gè)小版本,不可能總是類似原來,每次都出大版本很多人來詢問過下一個(gè)版本的計(jì)劃是什么。其實(shí)我想說,RT-Thread是一個(gè)開源社區(qū),RT-Thread的后續(xù)發(fā)展在社區(qū),屬于每一個(gè)社區(qū)參與者,你想在里面加入什么樣的功能,做好哪部分的工作,關(guān)鍵在于每個(gè)社區(qū)的參與者。只要符合RT-Thread的東西(例如許可證上沒有沖突),我也沒理由不把它放到RT-Thread開發(fā)主干上來。所以我下面提及的更多代表的是我個(gè)人的一些想法,社區(qū)還是需要更多的多樣性,社區(qū)是屬于你的,只要你參與進(jìn)去做!
1.?CloudIDE,這個(gè)是托管在http://lab.rt-thread.org/cloudide 上(可能因?yàn)閭浒傅膯栴}暫時(shí)不通)的在線方式的集成開發(fā)環(huán)境,嗯,有些類似mbed但是希望有自己的特色,以及希望它是屬于國內(nèi)的Online IDE,速度能夠快些。這部分也在密集的進(jìn)行改版,演變成多標(biāo)簽頁編輯方式;配合Wi-Fi入門套件,進(jìn)行在線方式更新固件;加入開發(fā)者間的代碼片段,組件分享功能;集成文檔幫助等信息等等;創(chuàng)建這個(gè)的初衷是希望新手入門能夠方便些,而不是受搭建開發(fā)環(huán)境的困擾,需要的只是一個(gè)瀏覽器。Wi-Fi入門套件,暫時(shí)稱為ART-wifi吧,簡單的名字就是一個(gè)稱呼,名字而已。
2. 去年12月份上海嵌入式沙龍活動(dòng)中,weety提到了POSIX兼容性的問題,導(dǎo)致Linux的一些程序并不那么容易移植過來(或者說后續(xù)的代碼一致性),這里主要問題在于BSD socket接口是完全屬于lwIP協(xié)議棧,而和RT-Thread的文件接口沒關(guān)系,所以在RT-Thread上沒有socket/file descriptor/device間的select/poll/read/write等調(diào)用;另外一個(gè)隱含問題是,POSIX實(shí)現(xiàn)也不是那么標(biāo)準(zhǔn),可能里面還有一些坑等。這個(gè)問題是一個(gè)大問題,因?yàn)殛P(guān)鍵點(diǎn)在于,大家既然選擇了開源的系統(tǒng),那么他肯定也考慮到開源生態(tài)很好,有很多的資源可以使用,可以左右逢源。。。所以,RT-Thread也需要以更開放的姿態(tài)來解決這個(gè)問題,使得它能夠更開放,增強(qiáng)POSIX標(biāo)準(zhǔn)本身的親和力。相類似的,它也應(yīng)該更好地支持一些C++標(biāo)準(zhǔn),基礎(chǔ)設(shè)施RT-Thread已經(jīng)提供了,后面如何去應(yīng)用,那么就看用戶的想法、創(chuàng)新性有多大了。
3.?一些重型平臺的支持,例如市場上新出的一些堆疊封裝了SDRAM/DDR的ARM9,Cortex-A8/9,MIPS32/64,甚至是x86,這個(gè)肯定也會(huì)逐步地演變成RT-Thread的目標(biāo)硬件平臺,但是這個(gè)投入也會(huì)比較重。如果上面的第二項(xiàng)解決了,也不是不可能,首要解決的是底層驅(qū)動(dòng)的問題,這樣后續(xù)就比較容易和上面的組件、應(yīng)用粘合起來。
好了,以下是想到的無責(zé)任feature list,感興趣的同學(xué)可以來認(rèn)領(lǐng):
* CloudIDE相關(guān)
- 完善NAT功能,把ART-wifi變成一個(gè)Wi-Fi中繼(路由)。
- 期待在CloudIDE上分享MQTT組件,CoAP組件;
- 期待把ART-wifi變成一個(gè)Wi-Fi/6LoWPAN網(wǎng)關(guān)。
- 期待把ART-wifi變成一個(gè)Wi-Fi/nRF51822 6LoWPAN網(wǎng)關(guān),Wi-Fi/nRF51822 BLE網(wǎng)關(guān);
- 期待把ART-wifi變成一個(gè)多軸飛控,并跑一些PX4的算法代碼;
- 期待在CloudIDE上分享樂聯(lián)網(wǎng)物聯(lián)網(wǎng)接入組件;
- 期待在CloudIDE上分享yeelink物聯(lián)網(wǎng)接入組件;
- 期待在CloudIDE上分享SSL組件;
- 期待在CloudIDE上分享阿里云,機(jī)智云,百度云,騰訊云等等接入組件;
- 更多的傳感器驅(qū)動(dòng),例如氣壓計(jì),溫度計(jì),光照,9軸傳感器等;
- 期待在CloudIDE上加載RealBoard 4088 APP開發(fā)功能;
- 期待在CloudIDE上加入圖形用戶界面設(shè)計(jì)功能;
- 期待把CloudIDE變成本地化的桌面應(yīng)用程序;
* POSIX相關(guān)
- 針對lwIP實(shí)現(xiàn)DFS上相應(yīng)的lwIP fs接口,讓DFS的fd和lwIP socket關(guān)聯(lián)起來;實(shí)現(xiàn)select/poll接口;
- 更好的把device接口和DFS devfs融合起來;協(xié)同實(shí)現(xiàn)好select功能;
- 加入更多POSIX相關(guān)接口,包括但不限制于aio,signal等功能;
- 整理DeviceDriver框架,讓device接口,和各自設(shè)備驅(qū)動(dòng)接口分離開來。應(yīng)用程序更多的傾向于使用device接口,固件開發(fā)可以使用設(shè)備驅(qū)動(dòng)接口;
* 其它
- openbsd的TCP/IP協(xié)議棧移植;openbsd POSIX外圍接口移植;
- canopen組件;
- ARM Cortex-A8/A9 + M4/M3的多系統(tǒng)(硬件)平臺;
- 其他一些硬件移植;
以上摘自http://www.rt-thread.org/phpBB3/topic3965.html
與v2.0.0RC版本相比,主要有以下改進(jìn):
內(nèi)核?
console以RT_DEVICE_FLAG_STREAM參數(shù)打開字符設(shè)備;
在rt_memheap_free中加入更多的斷言檢查;
組件
更新RW009驅(qū)動(dòng)以支持Wi-Fi SoftAP模式(aozima);
修正sensor框架的一些問題,并加入C API接口(睿賽德服務(wù)公司提供);
加入MPU6050 sensor的代碼(bernard, Coing);
加入BMI055 sensor的代碼(Coing);
當(dāng)未使能heap時(shí),修正finsh/msh中l(wèi)ist_memheap的問題;
修正LIBC編譯的警告;
加入IAR dlib相關(guān)的移植,使得應(yīng)用能夠使用標(biāo)準(zhǔn)的API接口;
修正YMode握手時(shí)可能引起的競爭問題(grissiom);
更新FreeType版本到2.5.4
單獨(dú)把C++的全局對象初始化放到cplusplus_system_init函數(shù)中,并在初始化線程中調(diào)用;
finsh中以RT_DEVICE_FLAG_STREAM參數(shù)打開字符設(shè)備;
添加VBUS組件用于Linux與RT-Thread系統(tǒng)之間,RT-Thread與RT-Thread系統(tǒng)之間通信(睿賽德服務(wù)公司捐贈(zèng));
增加lwIP/NAT組件,可以做多個(gè)網(wǎng)口間的地址轉(zhuǎn)換(Hicard);
增加lwIP/DHCP服務(wù)端,用于向客戶端分配IP地址(睿賽德服務(wù)公司提供);
BSP
修正LPC4357串口驅(qū)動(dòng)初始化時(shí)過早打開中斷的問題(nongxiaoming);
重寫LPC4357串口驅(qū)動(dòng),并讓芯片上M4/M0核心分別都執(zhí)行RT-Thread系統(tǒng),兩核心之間以VBUS組件進(jìn)行系統(tǒng)間通信(睿賽德服務(wù)公司捐贈(zèng));
新增RX移植(limxuzheng);
新增NuMicro M051 Series移植,支持GCC、Keil MDK編譯器(bright-pan);
新增LPC54102移植(Coing);
移除STM32F4 BSP中不需要的RT_TIMER_TICK_PER_SECOND配置(pangweishen);
在Linux Clang編譯分析中,強(qiáng)制以32位模式進(jìn)行編譯(grissiom);
修正STM32F103中串口驅(qū)動(dòng)中斷過早打開的問題(armink);
工具
增加scons中的MD5支持(bright-pan);
以上摘自http://www.rt-thread.org/node/98
總結(jié)
以上是生活随笔為你收集整理的RT-thread国产实时操作系统概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NLP中的红楼梦
- 下一篇: 激光测距仪系统设计 c语言程序),基于时