可移植操作系統(tǒng)接口,POSIX 標(biāo)準(zhǔn)定義了操作系統(tǒng)(很多時候針對的是類 Unix 操作系統(tǒng))應(yīng)該為應(yīng)用程序提供的接口標(biāo)準(zhǔn),從而保證了應(yīng)用程序在源碼層次的可移植性,如今主流的 Linux 系統(tǒng)都做到了兼容 POSIX 標(biāo)準(zhǔn)。由此可見,可移植性是 POSIX 的一大特性,如果一個操作系統(tǒng)擬合了POSIX系統(tǒng),就將可以將自己的 POSIX 應(yīng)用輕松遷移到其他同樣符合POSIX標(biāo)準(zhǔn)的系統(tǒng)平臺,并且可以獲得大量的 POSIX 應(yīng)用,豐富自己系統(tǒng)的應(yīng)用生態(tài)。
POSIX 為了提供不同層級的RTOS能力,劃定了 PSE51, PSE52, PSE53, PSE54 共四個級別;分別對應(yīng)了四種操作系統(tǒng)。
1、Minimal Real-time System Profile IEEE Std 1003.13 PSE51,基礎(chǔ) RTOS
2、Real-time Controller Profile IEEE Std 1003.13 PSE52,帶有簡單的文件系統(tǒng)…等
3、Dedicated Real-time Profile IEEE Std 1003.13 PSE53,擁有網(wǎng)絡(luò)功能…等
4、Multi-Purpose Real-time Profile IEEE Std 1003.13 PSE54,完整的文件系統(tǒng),帶有 Shell 組件…等
由于標(biāo)準(zhǔn)的制定是隨著時間發(fā)展而不斷更新的,PSE51, 52, 53, 54 的標(biāo)準(zhǔn)也隨著 MCU,MPU 芯片產(chǎn)業(yè)的發(fā)展,不斷增強的芯片功能和性能使得這些標(biāo)準(zhǔn)所對應(yīng)的四種操作系統(tǒng)的界限而越顯模糊。在 RT-Thread 中也依靠自身的組件內(nèi)容,提供了多種標(biāo)準(zhǔn)的部分內(nèi)容,為不同的 POSIX 應(yīng)用提供可供在 RTOS 系統(tǒng)上使用的軟件。
2. POSIX 在 RT-Thread 中支持情況
RT-Thread 針對 PSE51 的標(biāo)準(zhǔn)規(guī)定的頭文件及對應(yīng)接口,提供了大部分接口。除此之外,我們還提供了更加完整的文件系統(tǒng)的接口,以及基于我們 SAL 組件的網(wǎng)絡(luò)接口。這為 POSIX 的應(yīng)用遷移打下了基礎(chǔ),可以使得較復(fù)雜的 POSIX 應(yīng)用也可以經(jīng)過小部分修改就可以在 RT-Thread 上運行。
POSIX FILE 相關(guān)接口,包含了文件系統(tǒng)的內(nèi)容,接口比較豐富;標(biāo)準(zhǔn) I/O 接口,Poll / Select 等較復(fù)雜的功能也已經(jīng)支持
Delay 相關(guān)接口
Clock 相關(guān)接口,對擁有 RTC 硬件,或者沒有使用 RTC 硬件的設(shè)備都有對應(yīng)的功能實現(xiàn)
Timer 相關(guān)接口,已經(jīng)對接到 RT-Thread 的定時器接口,實現(xiàn)對應(yīng)的函數(shù)
Pthread 相關(guān)接口,在多任務(wù)編程中使用很廣泛
Dynamic 動態(tài)模塊
POSIX 的 標(biāo)準(zhǔn) IPC 接口 :pipe ,message,semaphore 等函數(shù)
通過上面靈活的配置項,開發(fā)者可以啟用對應(yīng)的功能來添加該類函數(shù)的支持;這對與同樣使用功能宏來標(biāo)識一些函數(shù)功能的 POSIX 接口來說十分類似,在該界面可以配置對應(yīng)的 POSIX 函數(shù)支持。
3. POSIX 的實現(xiàn)簡介由于 RT-Thread 作為一個可以兼容多種開發(fā)方式的操作系統(tǒng),針對 ARMCC,ARMCLANG,IARCC,GCC 現(xiàn)階段占比比較多的開發(fā)工具鏈都做了對應(yīng)的適配。所以,簡單描述一下RT-Thread 在做適配時,針對不同的編譯平臺所做得操作,以及對應(yīng)的關(guān)系圖。
由于在不同的平臺開發(fā)所使用的編譯工具鏈不一致;所以在實現(xiàn)時,RT-Thread 區(qū)分了三個概念:廣義的 POSIX,狹隘的 POSIX,編譯器配平層;下面結(jié)合關(guān)系圖,描述一下對應(yīng)的概念:
廣義的 POSIX ,即 POSIX 接口;這里面包含了一些關(guān)于 pthread, signal, IPC 等函數(shù)以及 C 庫的相關(guān)內(nèi)容;
狹隘的 POSIX,即不是 C 庫標(biāo)準(zhǔn)提供以外的 POSIX 函數(shù),例如 pthread 這些內(nèi)容;
編譯器配平層,由 C 庫相關(guān)提供的函數(shù)。由于不同編譯平臺對該內(nèi)容的實現(xiàn)參差不齊,因此需要針對不同的編譯平臺增補這些函數(shù)。這也就是 “ 配平 ” 的由來。這塊內(nèi)容較多,且不同的編譯工具鏈所支持的操作不一,因此在 POSIX 代碼遷移時需要修改這里來解決對應(yīng)的編譯錯誤。
4. POSIX 在 RT-Thread 中使用方法
4.1 Pthread 接口
1、在 menuconfig 中打開 pthread ,設(shè)定支持得最大 pthread 數(shù)目
2、在用戶代碼中,即可使用 pthread.h, sche.h 這些 pthread 提供的頭文件來編程
4.2 Timer 接口
1、在 menuconfig 中打開 timer 即可
2、在用戶代碼中,即可使用 這些 timer 提供的頭文件來編程
4.3 Net 接口
1、在 menuconfig 中打開 Enable BSD Socket I/O 就可以使用標(biāo)準(zhǔn) Socket 進(jìn)行編程
4.4 Filesystem 接口
1、在 menuconfig 中打開Enable POSIX file system and I/O 配置具體的 POSIX 函數(shù)接口
2、按照需求打開需要的功能,例如 設(shè)備I/O,AIO,MMAN 之類的功能
4.5 其他接口
其他接口也是一樣,開打?qū)?yīng)的 menuconfig 選項,即可使用對應(yīng)頭文件,及提供的函數(shù)來編程。整個過程不需要 rt-thread 的頭文件參與,使編譯出的代碼運行在 RT-Thread 操作系統(tǒng)之上。
5. 注意事項5.1 不同編譯平臺的兼容
在上一節(jié),編譯器配平層的存在解決了多組編譯工具鏈不一致造成的問題;同時,也引入了一些在編寫代碼時需要注意的事項。這些注意事項是為了解決對應(yīng)的編譯錯誤。因為編譯工具鏈有的允許頭文件替換,有的不支持這些問題。RT-Thread 提供了一個相對輕便的解決辦法:
為保證跨不同編譯器、不同工具鏈的兼容性,建議用戶應(yīng)用層代碼:
使用 《sys/time.h》 代替 《time.h》
使用 《sys/errno.h》 代替 《errno.h》
使用 《sys/signal.h》 代替 《signal.h》
有使用 《time.h》 的引用邏輯的,修改為 《sys/time.h》 的方式來避免編譯錯誤;其他兩個也是類似的處理邏輯,擬合不同編譯工具鏈的處理邏輯。
5.2 Net 接口
啟用網(wǎng)絡(luò)功能后,并不是所有的 BSD Socket 接口都支持,在 RT-Thread 中只實現(xiàn)了一部分函數(shù)。因此如果對應(yīng)函數(shù)缺失,需要按照代碼邏輯替換為基礎(chǔ)的 Socket 接口來兼容原邏輯。完整的 BSD Socket 功能將持續(xù)優(yōu)化以解決這個問題。
-
接口
+關(guān)注
關(guān)注
33文章
8615瀏覽量
151304 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4333瀏覽量
62697 -
編譯器
+關(guān)注
關(guān)注
1文章
1634瀏覽量
49157 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1293瀏覽量
40197
發(fā)布評論請先 登錄
相關(guān)推薦
評論