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