0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RT-Thread 4.1.0中POSIX淵源介紹

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 作者:RTThread物聯(lián)網(wǎng)操作 ? 2022-04-27 10:22 ? 次閱讀

1. POSIX 淵源

可移植操作系統(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 組件…等

05d6e52c-c58b-11ec-bce3-dac502259ad0.png

由于標(biāo)準(zhǔn)的制定是隨著時間發(fā)展而不斷更新的,PSE51, 52, 53, 54 的標(biāo)準(zhǔn)也隨著 MCU,MPU 芯片產(chǎn)業(yè)的發(fā)展,不斷增強(qiáng)的芯片功能和性能使得這些標(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 上運(yùn)行。

05ee39a2-c58b-11ec-bce3-dac502259ad0.png

  • 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)的功能實(shí)現(xiàn)

  • Timer 相關(guān)接口,已經(jīng)對接到 RT-Thread 的定時器接口,實(shí)現(xiàn)對應(yīng)的函數(shù)

  • Pthread 相關(guān)接口,在多任務(wù)編程中使用很廣泛

  • Dynamic 動態(tài)模塊

  • POSIX 的 標(biāo)準(zhǔn) IPC 接口 :pipe ,message,semaphore 等函數(shù)

通過上面靈活的配置項(xiàng),開發(fā)者可以啟用對應(yīng)的功能來添加該類函數(shù)的支持;這對與同樣使用功能宏來標(biāo)識一些函數(shù)功能的 POSIX 接口來說十分類似,在該界面可以配置對應(yīng)的 POSIX 函數(shù)支持。

3. POSIX 的實(shí)現(xiàn)簡介

由于 RT-Thread 作為一個可以兼容多種開發(fā)方式的操作系統(tǒng),針對 ARMCC,ARMCLANG,IARCC,GCC 現(xiàn)階段占比比較多的開發(fā)工具鏈都做了對應(yīng)的適配。所以,簡單描述一下RT-Thread 在做適配時,針對不同的編譯平臺所做得操作,以及對應(yīng)的關(guān)系圖。

06051906-c58b-11ec-bce3-dac502259ad0.png

由于在不同的平臺開發(fā)所使用的編譯工具鏈不一致;所以在實(shí)現(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)容的實(shí)現(xiàn)參差不齊,因此需要針對不同的編譯平臺增補(bǔ)這些函數(shù)。這也就是 “ 配平 ” 的由來。這塊內(nèi)容較多,且不同的編譯工具鏈所支持的操作不一,因此在 POSIX 代碼遷移時需要修改這里來解決對應(yīng)的編譯錯誤。

4. POSIX 在 RT-Thread 中使用方法

4.1 Pthread 接口

061a8fac-c58b-11ec-bce3-dac502259ad0.png

1、在 menuconfig 中打開 pthread ,設(shè)定支持得最大 pthread 數(shù)目

2、在用戶代碼中,即可使用 pthread.h, sche.h 這些 pthread 提供的頭文件來編程

 1#include
 2#include
 3#include
 4#include
 5
 6#defineNUM_THREADS5
 7
 8staticvoid*a_thread_func(void*num)
 9{
10printf("arg=%li
",(long)num);
11returnnum;
12}
13
14intmain(void)
15{
16pthread_tnew_th;
17longi;
18void*res;
19intret;
20
21for(i=1;i1;i++){
22ret=pthread_create(&new_th,NULL,a_thread_func,(void*)i);
23
24if(ret){
25fprintf(stderr,"pthread_create():%s
",
26strerror(ret));
27return-1;
28}
29
30pthread_join(new_th,&res);
31
32if((long)res!=i){
33printf("TestFAILED:Returnedvaluedidnotmatch%li!=%li",
34(long)res,i);
35return-1;
36}
37}
38printf("TestPASSED
");
39return0;
40}
4.2 Timer 接口

062e9588-c58b-11ec-bce3-dac502259ad0.png

1、在 menuconfig 中打開 timer 即可

2、在用戶代碼中,即可使用 這些 timer 提供的頭文件來編程

 1#include
 2#include
 3
 4intmain(void)
 5{
 6time_tsec;
 7time_tret;
 8time_ttimestamp=1609459200;
 9ret=time(&sec);
10
11if(ret!=sec)
12{
13return-1;
14}
15if(ret!=timestamp)
16{
17return-1;
18}
19return0;
20}
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 選項(xiàng),即可使用對應(yīng)頭文件,及提供的函數(shù)來編程。整個過程不需要 rt-thread 的頭文件參與,使編譯出的代碼運(yùn)行在 RT-Thread 操作系統(tǒng)之上。

5. 注意事項(xiàng)

5.1 不同編譯平臺的兼容

在上一節(jié),編譯器配平層的存在解決了多組編譯工具鏈不一致造成的問題;同時,也引入了一些在編寫代碼時需要注意的事項(xiàng)。這些注意事項(xiàng)是為了解決對應(yīng)的編譯錯誤。因?yàn)榫幾g工具鏈有的允許頭文件替換,有的不支持這些問題。RT-Thread 提供了一個相對輕便的解決辦法:

為保證跨不同編譯器、不同工具鏈的兼容性,建議用戶應(yīng)用層代碼:

  • 使用 代替

  • 使用 代替

  • 使用 代替

有使用 的引用邏輯的,修改為 的方式來避免編譯錯誤;其他兩個也是類似的處理邏輯,擬合不同編譯工具鏈的處理邏輯。

5.2 Net 接口

啟用網(wǎng)絡(luò)功能后,并不是所有的 BSD Socket 接口都支持,在 RT-Thread 中只實(shí)現(xiàn)了一部分函數(shù)。因此如果對應(yīng)函數(shù)缺失,需要按照代碼邏輯替換為基礎(chǔ)的 Socket 接口來兼容原邏輯。完整的 BSD Socket 功能將持續(xù)優(yōu)化以解決這個問題。

原文標(biāo)題:RT-Thread 4.1.0 特性解析之LIBC與POSIX

文章出處:【微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6827

    瀏覽量

    123335
  • Posix
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    9497
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1289

    瀏覽量

    40140

原文標(biāo)題:RT-Thread 4.1.0 特性解析之LIBC與POSIX

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    RT-Thread中使用POSIX Threads接口

    。Pthreads是libc的一個子庫,RT-Thread的Pthreads是基于RT-Thread內(nèi)核函數(shù)的封裝,使其符合POSIX標(biāo)準(zhǔn)。后續(xù)章節(jié)會詳細(xì)
    發(fā)表于 08-12 15:02

    RT-Thread Smart已正式上線

    rt-smart內(nèi)核即可包含基本功能,同時也可定制裁剪。rt-smart用戶態(tài)應(yīng)用環(huán)境采用musl libc提供POSIX接口調(diào)用及C運(yùn)行環(huán)境,延續(xù) RT-Thread 原有的生態(tài),使
    的頭像 發(fā)表于 11-29 10:31 ?2807次閱讀

    RT-Thread v4.1.0版本正式發(fā)布

    自發(fā)布v4.1.0 beta版本以來,我們一直積極收集大家的反饋與問題報告,經(jīng)過我們和社區(qū)小伙伴們的共同努力,一起修復(fù)了一些問題,完善了新增的特性,現(xiàn)在RT-Thread v4.1.0 版本正式發(fā)布了。
    的頭像 發(fā)表于 04-15 16:23 ?2529次閱讀
    <b class='flag-5'>RT-Thread</b> v<b class='flag-5'>4.1.0</b>版本正式發(fā)布

    RT-Thread v4.1.0FAL介紹

    在 V4.1.0 ,將 fal 軟件包重新定義為 RT-Thread 內(nèi)部組件。
    的頭像 發(fā)表于 04-26 13:34 ?3856次閱讀

    RT-Thread V4.1.0新特性CMake介紹與構(gòu)建CMake工程

    ? ? CMake 支持 在 RT-Thread 4.1.0 正式發(fā)布版,添加了對 CMake 的支持。開發(fā)者可以使用 SCons 工具來生成 CMakeLists.txt 文件。 為何要支持
    的頭像 發(fā)表于 05-24 19:20 ?3014次閱讀

    RT-Thread 4.1.0的CMake構(gòu)建教程

    CMake 支持 在 RT-Thread 4.1.0 正式發(fā)布版,添加了對 CMake 的支持。開發(fā)者可以使用 SCons 工具來生成 CMakeLists.txt 文件。 為何要支持 CMake
    的頭像 發(fā)表于 05-25 11:06 ?3360次閱讀

    RT-Thread全球技術(shù)大會:Kconfig在RT-Thread的工作機(jī)制

    RT-Thread全球技術(shù)大會:Kconfig在RT-Thread的工作機(jī)制 ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 14:49 ?1543次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:Kconfig在<b class='flag-5'>RT-Thread</b><b class='flag-5'>中</b>的工作機(jī)制

    RT-Thread大會:RT-ThreadPOSIX的實(shí)現(xiàn)

    對于部分C函數(shù),編譯器配平層負(fù)責(zé)實(shí)現(xiàn)這些接口;由于RT-Thread需要維持多平臺可用,所以編譯器配平層的主要工作就是擬補(bǔ)各個編譯平臺的不足。
    的頭像 發(fā)表于 05-27 16:46 ?1614次閱讀
    <b class='flag-5'>RT-Thread</b>大會:<b class='flag-5'>RT-Thread</b>對<b class='flag-5'>POSIX</b>的實(shí)現(xiàn)

    RT-Thread全球技術(shù)大會:RT-ThreadPOSIX的實(shí)現(xiàn)情況介紹

    RT-Thread全球技術(shù)大會:RT-ThreadPOSIX的實(shí)現(xiàn)情況介紹 ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:52 ?1892次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:<b class='flag-5'>RT-Thread</b>對<b class='flag-5'>POSIX</b>的實(shí)現(xiàn)情況<b class='flag-5'>介紹</b>

    RT-Thread全球技術(shù)大會:POSIX FILE select的調(diào)用過程

    在上午RT-Thread全球技術(shù)大會,RT-Thread開發(fā)者詳細(xì)介紹POSIX FILE select的調(diào)用過程。如下圖:
    的頭像 發(fā)表于 05-28 10:56 ?1549次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:<b class='flag-5'>POSIX</b> FILE select的調(diào)用過程

    RT-Thread 4.1.0正式添加對Arm Compiler 6支持

    RT-Thread 4.1.0 正式發(fā)布版,添加了對 Arm Compiler 6 的支持,用戶可以修改 rtconfig.py 指定生成 mdk5 工程時使用的編譯器
    的頭像 發(fā)表于 06-01 15:20 ?2039次閱讀
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>4.1.0</b>正式添加對Arm Compiler 6支持

    RT-Thread V4.1.0 版本部分更新內(nèi)容

    RT-Thread V4.1.0 版本已經(jīng)發(fā)布四月有余了,在這四個月中,RT-Thread的主倉庫收到了包含了內(nèi)核到BSP的方方面面的 PR 與 ISSUE。在我們和社區(qū)的共同努力下
    的頭像 發(fā)表于 08-30 09:48 ?2495次閱讀

    聊聊新版RT-Thread內(nèi)核的鉤子

    4.1.0版本開始,RT-Thread在保證向前兼容的基礎(chǔ)上對原有的HOOK方式進(jìn)行了改進(jìn),實(shí)現(xiàn)了如下的效果:
    的頭像 發(fā)表于 10-25 09:32 ?1223次閱讀

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發(fā)表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP <b class='flag-5'>介紹</b>與移植