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

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

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

Nuttx RTOS入門知識簡介及開源代碼運行

yzcdx ? 來源:OS與AUTOSAR研究 ? 2024-01-10 18:14 ? 次閱讀

1. 簡介

1.1 nuttx介紹

9551e714-afa0-11ee-8b88-92fbcf53809c.png

NuttX是一個成熟的實時操作系統(tǒng),于07年由Gregory Nutt先生正式開源,2016年被三星選為TizenRT操作系統(tǒng)的內(nèi)核,2019年在小米的推動下正式進入Apache基金會,經(jīng)過開源社區(qū)多年的不懈努力,NuttX功能豐富,性能穩(wěn)定,商業(yè)化成熟度高,F(xiàn)itbit最近兩代的手環(huán)產(chǎn)品和索尼多款消費級產(chǎn)品都是基于NuttX開發(fā)的。

NuttX 是一個實時操作系統(tǒng) (RTOS),強調(diào)標(biāo)準(zhǔn)合規(guī)性占用空間小。NuttX 中的主要管理標(biāo)準(zhǔn)是 Posix ANSI 標(biāo)準(zhǔn),可從 8 位微控制器環(huán)境擴展到 64 位微控制器環(huán)境。來自 Unix 和其他常見 RTOS(例如 VxWorks)的附加標(biāo)準(zhǔn) API 被用于這些標(biāo)準(zhǔn)下不可用的功能,或者不適合深度嵌入環(huán)境的功能(例如 fork())。

NuttX可運行于各種處理器架構(gòu)硬件平臺上,包括ARM、MIPS、AVR等其重點遵從特定的標(biāo)準(zhǔn)并且盡量 可伸縮良好且可適應(yīng)從8位到32位單片機環(huán)境

NuttX遵循POSIX標(biāo)準(zhǔn),在Linux中廣泛應(yīng)用的API接口,并且具有實時操作系統(tǒng)(RTOS)的特性。它采用模塊化設(shè)計,將內(nèi)核空間和用戶空間分離,并提供了豐富的驅(qū)動程序和服務(wù)程序,包括文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧、USB主機/設(shè)備支持等。同時,它還支持多任務(wù)、多線程、信號量、消息隊列、事件驅(qū)動等特性,方便用戶進行開發(fā)和調(diào)試。

NuttX特點:

開源免費:NuttX是一款完全開源、免費的操作系統(tǒng),可以自由下載和使用。

可移植性:支持各種處理器架構(gòu)和硬件平臺,具有良好的可移植性和通用性。

穩(wěn)定可靠:經(jīng)過長時間的使用和測試,已經(jīng)成熟穩(wěn)定,能夠滿足各種嵌入式應(yīng)用的需求。

易用性高:具有簡單易學(xué)的API和文檔,便于開發(fā)者學(xué)習(xí)和使用。

NuttX應(yīng)用場景:

工控系統(tǒng):可以將NuttX應(yīng)用于各種工業(yè)自動化、機器人控制、智能電網(wǎng)等工控領(lǐng)域。

消費電子:可以將NuttX應(yīng)用于各種消費電子產(chǎn)品,例如:移動設(shè)備、家庭娛樂系統(tǒng)、數(shù)字相框等。

智能家居:可以將NuttX應(yīng)用于智能家居領(lǐng)域,例如:溫度控制、燈光控制、安全監(jiān)測等。

主要特點分析:

物聯(lián)網(wǎng)領(lǐng)域應(yīng)用廣泛

系統(tǒng)資源的要求遠(yuǎn)小于Linux,但是可以提供和Linux系統(tǒng)相近的功能和性能,可以被看作很多低端Linux系統(tǒng)的替代方案。

功能高度可裁剪,可以支持系統(tǒng)資源使用跨度極大的各種產(chǎn)品形態(tài),開發(fā)者可根據(jù)實際需求對系統(tǒng)進行定制。

由于它對POSIX接口的兼容,Linux平臺上現(xiàn)有的開源庫和組件都可以很方便的移植,另外由于軟件平臺對硬件平臺作出了隔離和統(tǒng)一,因此廠商的上層應(yīng)用代碼在移植到不同硬件平臺時也可以更好的復(fù)用。

NuttX本身提供了豐富的OS組件,所以應(yīng)用開發(fā)者可以利用豐富的OS組件和應(yīng)用框架,快速的完成系統(tǒng)的定制和應(yīng)用的開發(fā),減少開發(fā)成本,讓產(chǎn)品更快的投放市場。

實時性:Nuttx是一個實時操作系統(tǒng),可以提供精確的時間管理和響應(yīng)。這對于需要嚴(yán)格時間控制的嵌入式應(yīng)用非常重要。Linux系統(tǒng)雖然可以提供實時性,但通常需要額外的配置和補丁。

可移植性:Nuttx被設(shè)計為高度可移植的,可以在多種硬件平臺上運行。它支持許多不同的處理器架構(gòu)和設(shè)備。Linux系統(tǒng)也具有很高的可移植性,但在某些嵌入式設(shè)備上可能需要更多的定制和適配工作。

市場上開源或商業(yè)的RTOS非常多,為什么我們選擇NuttX?主要有以下幾個原因:

NuttX對POSIX標(biāo)準(zhǔn)有原生兼容:NuttX是可商用化RTOS中唯一一個對POSIX API有原生支持的實時操作系統(tǒng),所以很多Linux社區(qū)的開源軟件可以很方便的移植到NuttX上,這樣可以極大的簡化開源軟件移植,方便代碼復(fù)用,降低學(xué)習(xí)曲線,其它RTOS需要適配層把POSIX API轉(zhuǎn)成內(nèi)部API,而且通常只兼容一小部分的POSIX接口。

完成度高:NuttX集成了文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧、圖形庫和驅(qū)動框架,減少開發(fā)成本。

模塊化設(shè)計:所有組件甚至組件內(nèi)部特性,都可以通過配置Kconfig來調(diào)整或關(guān)閉,可按需對系統(tǒng)進行裁剪,適用于不同產(chǎn)品形態(tài)。

代碼精簡:所有組件都是從頭編碼,專門對代碼和數(shù)據(jù)做了優(yōu)化設(shè)計。

輕量級:雖然NuttX實現(xiàn)了傳統(tǒng)操作系統(tǒng)的所有功能,但是最終生成的代碼尺寸還是可以很?。ㄗ钚∨渲貌坏?2KB,最大配置不超過256KB)。

和Linux系統(tǒng)的兼容性:因為NuttX整體設(shè)計、代碼組織,編譯過程和Linux非常接近,將會極大地降低Android/Linux開發(fā)者的遷移成本。

活躍開放的社區(qū):很多廠商(比如小米、Sony,樂鑫、NXP等)和開源愛好者都在積極回饋社區(qū)。

1.2 NuttX的系統(tǒng)架構(gòu)

957b117a-afa0-11ee-8b88-92fbcf53809c.png

上圖從縱向看,NuttX和傳統(tǒng)操作系統(tǒng)一樣由調(diào)度子系統(tǒng)、文件子系統(tǒng)、網(wǎng)絡(luò)子系統(tǒng)、圖形子系統(tǒng)和驅(qū)動子系統(tǒng)組成。

從橫向看,NuttX向上給應(yīng)用程序提供了POSIX和ANSI定義的標(biāo)準(zhǔn)C/C++接口。對于沒有標(biāo)準(zhǔn)化的組件(比如各種外設(shè)),NuttX通常會提供兼容Linux的API。向下NuttX定義了Arch API、塊設(shè)備驅(qū)動接口、網(wǎng)卡驅(qū)動接口、display驅(qū)動接口,以及各種總線和外設(shè)的lower half驅(qū)動接口,使得芯片廠商能夠規(guī)范、快速地完成移植工作。下圖中數(shù)量眾多的藍色模塊就是NuttX實現(xiàn)的各種功能。

子系統(tǒng)介紹:

調(diào)度子系統(tǒng):NuttX支持大多數(shù)RTOS都沒有實現(xiàn)的進程概念,并提供完整的POSIX API,比如pthread、信號量、消息隊列、時鐘/定時器、信號、環(huán)境變量等。同時,也支持RTOS上常見的優(yōu)先級翻轉(zhuǎn)和tickless模式。NuttX支持對稱多處理(SMP)和非對稱多處理(AMP)兩種多核編程模式,開發(fā)者可以根據(jù)芯片設(shè)計的特點和應(yīng)用場景的需求,選擇使用SMP或AMP,甚至同時使用SMP和AMP。NuttX支持所有常見CPU架構(gòu),比如Cortex-A/Cortex-R/Cortex-M、AVR、MIPS、32位/64位 RISC-V,X86/X64,Z80,以及Tensilica和CEVADSP,并有超過150款芯片成功移植到NuttX上。

文件系統(tǒng):NuttX設(shè)計了一套完整而小巧的虛擬文件系統(tǒng),除了支持統(tǒng)一的目錄和文件操作外,還支持掛載點、字符設(shè)備,塊設(shè)備等高級概念。直接支持10多種常用的文件系統(tǒng)。比如FAT、LittleFS、SmartFS、NFS、ROMFS、TMPFS等。另外,NuttX內(nèi)置根文件系統(tǒng),無需掛載即可啟動,極大的簡化了開發(fā)和部署流程。

網(wǎng)絡(luò)子系統(tǒng):NuttX實現(xiàn)了完整的網(wǎng)絡(luò)協(xié)議棧,支持以太網(wǎng)、WiFi、802.15.4、藍牙、CAN等數(shù)據(jù)鏈路層協(xié)議,支持IPv4、IPv6以及相關(guān)的ARP、ICMP、IGMP、MLD等傳輸層協(xié)議,實現(xiàn)了BSD兼容套接字API,除了常見的TCP、UDP協(xié)議外,還支持raw packet、unix domain、netlink套接字類型。另外,NuttX還提供了大量的應(yīng)用層協(xié)議實現(xiàn),比如DHCP、DNS、NTP、Telnet、FTP、SMTP、HTTP等。

驅(qū)動子系統(tǒng):除了接入到文件系統(tǒng)的塊設(shè)備驅(qū)動和接入到TCP/IP協(xié)議棧的網(wǎng)絡(luò)設(shè)備驅(qū)動外,NuttX還為各種常見總線和外設(shè)定義了類似Linux的字符設(shè)備驅(qū)動。一方面通過NuttX為每類設(shè)備定義的標(biāo)準(zhǔn)IOCTL接口,應(yīng)用程序可以用統(tǒng)一的API訪問不同廠商的硬件驅(qū)動,另一方面NuttX驅(qū)動框架實現(xiàn)了和硬件無關(guān)的操作(比如權(quán)限控制、buffer管理,睡眠/喚醒等),降低驅(qū)動程序的開發(fā)難度。最后,NuttX提供了一套基于activity統(tǒng)計的低功耗管理框架,使得驅(qū)動程序可以方便地實現(xiàn)低功耗控制。

1.3 Xiaomi Vela 介紹

95a3d18c-afa0-11ee-8b88-92fbcf53809c.png

Xiaomi Vela 項目,是小米基于開源實時操作系統(tǒng)NuttX打造的嵌入式物聯(lián)網(wǎng)軟件平臺。小米基于 Apache NuttX 開發(fā)了為解決物聯(lián)網(wǎng)碎片化而生的,物聯(lián)網(wǎng)領(lǐng)域自研的嵌入式軟件平臺——Xiaomi Vela。

在各種不同的物聯(lián)網(wǎng)硬件上提供統(tǒng)一的軟件平臺,支持高性價比的MCU設(shè)備,為IoT的繁榮構(gòu)建基礎(chǔ)設(shè)施。Xiaomi Vela 通過組件化能力,做到高度可伸縮、可裁剪,支持豐富的組件和易用的框架。同時,可以很方便的去支持功能差異跨度極大的各種物聯(lián)網(wǎng)設(shè)備。還與 Linux 保持高度兼容性,適合做 Linux 的平替,幫助硬件實現(xiàn)降本。并基于物聯(lián)網(wǎng)的特性,在多核異構(gòu)、安全、超低功耗渲染和連接方面都建設(shè)了獨有的能力。

IoT領(lǐng)域跟傳統(tǒng)的PC和手機行業(yè)相比,最大的差異點就是IoT設(shè)備極其碎片化,這個碎片化給小米自身以及整個行業(yè)帶來了效率低下的問題(代碼的不可復(fù)用、軟件的重復(fù)建設(shè))。隨著IoT行業(yè)的高速發(fā)展,到2030年全球還會新增150億IoT設(shè)備,所帶來的碎片化問題只會是越來越嚴(yán)重。因此,迫切的需要一個統(tǒng)一的軟件平臺來打通碎片化的IoT應(yīng)用,讓其能夠和諧共通。

Xiaomi Vela 可以通過豐富的組件和標(biāo)準(zhǔn)化的軟件框架,打通碎片化的物聯(lián)網(wǎng)應(yīng)用場景;可以確保信息在設(shè)備間高效無縫的流轉(zhuǎn);能夠做到更多物聯(lián)網(wǎng)產(chǎn)品的互聯(lián)隨心配,為用戶帶去更趣味、多樣性的搭配選擇。目前 Xiaomi Vela 已經(jīng)裝載在含智能家居、穿戴、智能音箱等品類的數(shù)百款、千萬級的智能設(shè)備上。能夠聯(lián)動構(gòu)建更多豐富且實用的智能場景,擁有更極致的設(shè)備互聯(lián)的體驗,讓全球每個人都能享受科技帶來的美好生活,這是Xiaomi Vela的目標(biāo),同時也是小米公司的愿景。

95d9d070-afa0-11ee-8b88-92fbcf53809c.png

Xiaomi Vela 主要特性:

高效性能:Vela 基于 NuttX 內(nèi)核,具有高實時性、低功耗、低延遲等特點,適用于各種資源受限的嵌入式設(shè)備。

豐富組件:Vela 提供了多種常用的組件,如網(wǎng)絡(luò)、音頻、視頻、圖形、安全等,方便開發(fā)者快速構(gòu)建應(yīng)用。

易用框架:Vela 提供了一套統(tǒng)一的應(yīng)用框架,支持 Lua、JavaScript 等腳本語言開發(fā)應(yīng)用,并提供了豐富的 API 和文檔。

萬物互聯(lián):Vela 支持多種通信協(xié)議和標(biāo)準(zhǔn),如 WiFi、BLE、Zigbee、MQTT 等,并提供了小米妙享技術(shù),實現(xiàn)設(shè)備之間的無縫連接和協(xié)同。

95e8c710-afa0-11ee-8b88-92fbcf53809c.png

底層 NuttX 內(nèi)核:提供最基本的任務(wù)調(diào)度、跨進程間通信、文件系統(tǒng)等基礎(chǔ) OS 功能,同時也提供簡潔高效的設(shè)備驅(qū)動、輕量級的 TCP/IP 協(xié)議棧和電源管理等組件。

應(yīng)用框架:分為上下兩層,下層是為擴展系統(tǒng)服務(wù)而提供的通用應(yīng)用框架,上層是針對不同的物聯(lián)網(wǎng)應(yīng)用而開發(fā)的定制應(yīng)用框架,例如多媒體應(yīng)用框架和傳感應(yīng)用框架,提供 Cloud SDK 可以方便開發(fā)者更快速的接入小米云服務(wù)。

開發(fā)者工具:除了常見的 Logger 和 Debugger 工具,Xiaomi Vela 還提供 Emulator 工具來幫助開發(fā)者提升調(diào)試效率,使用 Emulator,開發(fā)者可以利用 PC 端豐富的調(diào)試工具和調(diào)試信息,降低嵌入式系統(tǒng)開發(fā)和調(diào)試的難度。

1.3.1 小米澎湃OS

看架構(gòu)圖,澎湃OS是一個大OS的概念,涵蓋硬件上的所有軟件。

96207dc2-afa0-11ee-8b88-92fbcf53809c.png

小米澎湃OS的底層核心系統(tǒng)由Linux和自研Xiaomi Vela融合而成,異構(gòu)兼容性與系統(tǒng)資源管理能力可以讓每一臺設(shè)備都能發(fā)揮最佳性能。

小米Vela是基于開源嵌入式操作系統(tǒng) NuttX 打造的物聯(lián)網(wǎng)軟件系統(tǒng)平臺,目前已運作于小米多款智能家居產(chǎn)品之上。也就是說,小米澎湃OS搭建于安卓開源與小米物聯(lián)網(wǎng)平臺基礎(chǔ)之上,保留安卓生態(tài)與海外市場,同時爭取留存盡可能多的小米生態(tài)用戶群體。

小米將安卓的服務(wù)框架和自研Vela系統(tǒng)的服務(wù)框架都作為“中間件”納入其中。同時全新打造八大子系統(tǒng),其中全新的AI子系統(tǒng)融合大模型能力成為整個系統(tǒng)的“智能大腦”,不僅可以讓單設(shè)備實現(xiàn)極強的端側(cè)AI能力,同時賦予整個生態(tài)智能能力。

最上層HyperConnect 跨端層打破了硬件設(shè)備的隔閡,讓所有設(shè)備可以統(tǒng)一連接協(xié)議,并且實時通信,最終構(gòu)建“人車家全生態(tài)”的智能世界。另外,此次小米打造了貫穿內(nèi)核層、服務(wù)框架層、跨端層的全端安全系統(tǒng), 尤其在內(nèi)核層啟用了完全獨立的“自研微內(nèi)核安全系統(tǒng)”,保障了安全從最底層實現(xiàn)。

澎湃 OS 最重要的五大特性:

澎湃OS以底層重構(gòu)覆蓋人車加全生態(tài)豐富多樣的硬件設(shè)備;

基于自研的先進跨端互聯(lián)框架,讓設(shè)備高效連接;

擁有AI 框架,在AI大模型的全面加持下,給系統(tǒng)應(yīng)用帶來了更好的表現(xiàn),

同時搭載 Hyperman 的這個設(shè)備互聯(lián)的思考中樞,

邁向主動智能時代。

用小米澎湃OS去對標(biāo)華為鴻蒙系統(tǒng),兩個系統(tǒng)目的類似,但做法不一樣。小米主要基于安卓系統(tǒng)基礎(chǔ)上重寫底層,再加入嵌入式系統(tǒng)的兼容,其本質(zhì)內(nèi)核沒有變,但由于重寫了底層,在以后其他產(chǎn)品進行系統(tǒng)配對或系統(tǒng)間互動的時候,會更加平滑。

因此,小米要建一個小米生態(tài)世界,這個OS勢在必行。而小米下一個要開發(fā)的場景就是車,車機交互、人機交互、人才交互,緊密關(guān)系到用戶的實際體驗,所以重構(gòu)的操作系統(tǒng)對于未來小米提升自身產(chǎn)品使用體驗具有重大意義。

國內(nèi)其他廠商也在做同樣類似的事情,在硬件同質(zhì)化越來越嚴(yán)重的情況下,需要通過做好軟件去提升人際交互和用戶體驗。一個能擁有自主開發(fā)的操作系統(tǒng)更便于做深度定制或者差異化定制,也可以為未來導(dǎo)入人工智能相關(guān)打開更好的通道。

小米汽車有兩個獨特的競爭優(yōu)勢:第一是與既有生態(tài)整合,包括操作系統(tǒng)、應(yīng)用程式、手機與IoT等硬件;第二是銷售渠道遍及海外市場。

1.3.2 鴻蒙與Vela的異同

IoT領(lǐng)域迫切需要一個統(tǒng)一的物聯(lián)網(wǎng)操作系統(tǒng),比ucosIII、freeRTOS更高級,比linux更輕量級。能提提供豐富組件,豐富的生態(tài),便捷的使用,解決碎片化問題。在這方面 Xiaomi Vela和開源鴻蒙系統(tǒng)都在發(fā)力,比如OpenHarmony。OpenHarmony LiteOS-A內(nèi)核是基于Huawei LiteOS內(nèi)核演進發(fā)展的新一代內(nèi)核,Huawei LiteOS是面向IoT領(lǐng)域構(gòu)建的輕量級物聯(lián)網(wǎng)操作系統(tǒng)。在IoT產(chǎn)業(yè)高速發(fā)展的潮流中,OpenHarmony LiteOS-A內(nèi)核能夠帶給用戶小體積、低功耗、高性能的體驗以及統(tǒng)一開放的生態(tài)系統(tǒng)能力,新增了豐富的內(nèi)核機制、更加全面的POSIX標(biāo)準(zhǔn)接口以及統(tǒng)一驅(qū)動框架HDF(OpenHarmony Driver Foundation)等,為設(shè)備廠商提供了更統(tǒng)一的接入方式,為OpenHarmony的應(yīng)用開發(fā)者提供了更友好的開發(fā)體驗。

在物聯(lián)網(wǎng)時代,操作系統(tǒng)是最底層基礎(chǔ)的系統(tǒng)架構(gòu),很多上層應(yīng)用都基于操作系統(tǒng)才能布局生態(tài)。就在小米對外正式發(fā)布自家物聯(lián)網(wǎng)操作系統(tǒng)Xiaomi Vela同一天,華為也舉辦了一場新品發(fā)布會,發(fā)布了15款智選新品,這是華為的物聯(lián)網(wǎng)操作系統(tǒng)鴻蒙OS首次應(yīng)用在華為智選生態(tài)產(chǎn)品上。而在小米官方對Vela介紹中,Xiaomi Vela對標(biāo)的其實是華為LiteOS。然而,隨著LiteOS融入鴻蒙OS,Xiaomi Vela終將要面對的仍然是鴻蒙OS。無論是鴻蒙還是Xiaomi Vela,都是為了打通物聯(lián)網(wǎng)最基礎(chǔ)的聯(lián)通、協(xié)同相關(guān)功能。

但兩者仍然略有差異:在戰(zhàn)略層面:鴻蒙OS發(fā)布之初,華為官方對標(biāo)的是安卓系統(tǒng)比;Xiaomi Vela則更傾向于認(rèn)為是與Linux、安卓等高價操作系統(tǒng)是互補共生關(guān)系。在應(yīng)用層面:鴻蒙搭載的范圍更廣,覆蓋到了內(nèi)存配置比較大的領(lǐng)域,搭載華為鴻蒙OS的第一款產(chǎn)品是榮耀智慧屏;Xiaomi Vela更注重低功耗和輕量級的應(yīng)用場景,其目標(biāo)應(yīng)用是智能家居、可穿戴設(shè)備等算力受限設(shè)備,而非手機、智能電視等。逐步完善的物聯(lián)網(wǎng)生態(tài)版圖

2. 代碼下載編譯運行

2.1 代碼運行

環(huán)境搭建:

sudo apt install bison flex gettext texinfo libncurses5-dev libncursesw5-dev gperf automake libtool pkg-config build-essential gperf genromfs libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux

apt install kconfig-frontends

apt install gcc-arm-none-eabi binutils-arm-none-eabi

代碼下載:

mkdir nuttx_project
cd nuttx_project
git clone https://github.com/apache/nuttx.git nuttx
git clone https://github.com/apache/nuttx-apps apps

代碼編譯:

cd nuttx
./tools/configure.sh -L | less  查看支持板卡
./tools/configure.sh -l sim:nsh 選擇一個板卡,例如sim:nsh
make menuconfig 配置Kconfig文件
make

編譯后代碼根目錄有nuttx目標(biāo)文件,執(zhí)行后自動運行

./nuttx

nut shell 終端如下:

965868b8-afa0-11ee-8b88-92fbcf53809c.png

退出shell輸入poweroff,或者另一個終端輸入pkill nuttx

默認(rèn)用戶名:admin

默認(rèn)密碼:Administrator

或者使用make menuconfig去掉登錄密碼

9681c1ea-afa0-11ee-8b88-92fbcf53809c.png

2.2 目錄結(jié)構(gòu):

nuttx/arch:該目錄包含多個子目錄,每個子目錄包含特定于體系結(jié)構(gòu)的邏輯。將 NuttX 移植到新處理器的任務(wù)包括在arch/ 包含特定于新架構(gòu)的邏輯下添加一個新的子目錄。

nuttx/binfmt:binfmt/子目錄包含將文件系統(tǒng)中的二進制文件以可用于執(zhí)行它們的形式加載到內(nèi)存中的邏輯。

nuttx/audio:audio/子目錄包含 NuttX 音頻子系統(tǒng)

nuttx/boards:boards/子目錄包含每個板的自定義邏輯和板配置數(shù)據(jù)。board板特定配置子目錄 < boards/arch-name> / //configs 如:boards/arm/stm32/nucleo-f103rb/configs

nuttx/crypto:crypto子目錄包含 NuttX 加密子系統(tǒng)。

nuttx/drivers:crypto子目錄包含與體系結(jié)構(gòu)無關(guān)的設(shè)備驅(qū)動程序。

nuttx/fs:fs子該目錄包含 NuttX 文件系統(tǒng)。

nuttx/graphics:graphics子目錄包含 NuttX 下的圖形/視頻支持文件。

nuttx/include:目錄包含 NuttX 頭文件。

nuttx:這幾乎是一個空的目錄,用于存放生成的靜態(tài)庫。

nuttx/libs/libc:目錄包含一組標(biāo)準(zhǔn)的類 libc 函數(shù),帶有 NuttX 的自定義接口。

nuttx/mm:這是 NuttX 內(nèi)存管理器。

nuttx/net:該目錄包含 NuttX 網(wǎng)絡(luò)層的實現(xiàn),包括內(nèi)部套接字 API。

nuttx/sched:構(gòu)成 NuttX RTOS 核心的文件位于此處。

nuttx/syscall:該目錄包含一個系統(tǒng)調(diào)用接口,可用于用戶模式應(yīng)用程序和內(nèi)核模式 RTOS 之間的通信。

nuttx/tools:該目錄包含一組工具和腳本,用于簡化配置、構(gòu)建和維護 NuttX。

nuttx/wireless:該目錄包含對獨立于硬件的無線支持的支持。

nuttx/Makefile:Makefile目錄中的頂層$(TOPDIR)包含構(gòu)建 NuttX 的所有頂層控制邏輯。

3. 啟動流程分析

968e3d12-afa0-11ee-8b88-92fbcf53809c.png969e62dc-afa0-11ee-8b88-92fbcf53809c.png

在NuttX內(nèi)存布局中,KROM和UROM分別存放著內(nèi)核啟動和NSH啟動的程序,啟動流程如下圖所示,下面對啟動流程進行簡要介紹。

在KROM中內(nèi)核啟動流程是:

硬件初始化

_start是內(nèi)核啟動的入口點,處理器將從這里開始執(zhí)行內(nèi)核啟動的第一條指令

初始化棧指針和中斷向量表,將中斷模式設(shè)置為CLIC Direct模式。在Direct中斷模式下,BASE被要求必須是64字節(jié)對齊,且所有的異常和中斷將會跳轉(zhuǎn)trap中斷處理函數(shù)進行中斷處理,中斷處理函數(shù)地址保存在mtvec寄存器中,中斷處理流程如下圖6-3所示:

搬移data段,清空BSS段,進行clock配置;完成uart的前期初始化,這里只進行了uart設(shè)備初始化,沒有做驅(qū)動初始化,目的是實現(xiàn)控制臺信息打印功能。

系統(tǒng)級初始化

根據(jù)用戶鏡像中的信息進行應(yīng)用程序空間中data和BSS段的搬移和初始化工作,使用PMP設(shè)置地址空間訪問權(quán)限

NuttX系統(tǒng)的初始化,主要有內(nèi)核list初始化、idle tcb初始化、信號量初始化、內(nèi)存堆初始化、task子系統(tǒng)初始化、fs子系統(tǒng)初始化、watchdog初始化、clock子系統(tǒng)初始化等

堆地址初始化:用戶空間堆初始化和內(nèi)核空間堆初始化

設(shè)置初始環(huán)境變量并啟動init程序

根據(jù)系統(tǒng)配置找到應(yīng)用程序入口點,并啟動應(yīng)用程序。

經(jīng)過上面步驟已實現(xiàn)硬件環(huán)境初始化和NuttX系統(tǒng)初始化,下面將啟動應(yīng)用程序。應(yīng)用程序放置在UROM地址空間中,總的來說獲取應(yīng)用程序入口點有三種方式:第一種通過宏直接設(shè)置入口點地址;第二種從用戶空間結(jié)構(gòu)體中獲取入口點;最后一種則從文件系統(tǒng)中獲取init程序并動態(tài)載入后跳轉(zhuǎn)。獲取應(yīng)用程序入口通過menuconfig進行配置。三種方式都可實現(xiàn)應(yīng)用程序的加載,但第二種實現(xiàn)方式還具有其他優(yōu)點,它可將用戶空間結(jié)構(gòu)體以符號的形式傳遞給拓展ELF固件,因此我們選擇第二種應(yīng)用程序加載方式。這里簡要介紹如何選擇第二種加載方式即如何加載應(yīng)用程序:

在menuconfig中選擇CONFIG_INIT_ENTRYPOINT(應(yīng)用程序入口點配置項) 和 CONFIG_BUILD_PROTECTED(指定從用戶空間結(jié)構(gòu)體中獲取應(yīng)用程序入口點)這兩個宏,可以指定以第二種方式加載應(yīng)用程序。

用戶空間結(jié)構(gòu)體在鏈接時會被工具鏈放在用戶鏡像的text段首地址

NuttX啟動應(yīng)用程序過程中,將用戶空間結(jié)構(gòu)體作為參數(shù)傳遞給任務(wù)創(chuàng)建函數(shù),如此可根據(jù)應(yīng)用程序入口點創(chuàng)建應(yīng)用程序任務(wù)

上面提到用戶鏡像中包含NSH和內(nèi)嵌的應(yīng)用。NSH是NuttX提供一個小型的、可伸縮的、類似bash的shell命令解析器,具有命令行解析、實時串口輸出、系統(tǒng)掛載等功能,具有豐富的特性集和較小的占用空間,支持腳本啟動、拓展程序動態(tài)加載,因此考慮將NSH作為第一個用戶程序。

enum nx_initstate_e
{
    OSINIT_POWERUP = 0, /*上電。尚未執(zhí)行初始化,取決于.bss的初始化邏輯值。* /
    OSINIT_BOOT = 1,   /*基本啟動初始化完成。操作系統(tǒng)服務(wù)和硬件資源還沒有可用。* /
    OSINIT_TASKLISTS = 2, /*準(zhǔn)備運行/分配的任務(wù)列表頭有效*/
    OSINIT_MEMORY = 3,   /*內(nèi)存管理器已經(jīng)初始化*/
    OSINIT_HARDWARE = 4, /* mcu專用硬件初始化。硬件資源,如定時器和設(shè)備驅(qū)動程序現(xiàn)已提供。
                        足夠的底層操作系統(tǒng)服務(wù)支持的硬件也有但是操作系統(tǒng)尚未完成其全部初始化。* /
    OSINIT_OSREADY = 5, /*操作系統(tǒng)已經(jīng)完全初始化,多任務(wù)正在進行活動。* /
    osinit_idlelloop = 6 /*操作系統(tǒng)進入空閑循環(huán)*/
};

可以代碼中添加打印,自己上手調(diào)試下:

#include 
_info("ssss Entry
");






審核編輯:劉清

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

    關(guān)注

    48

    文章

    7394

    瀏覽量

    150622
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19031

    瀏覽量

    228442
  • USB主機
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

    9331
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3226

    瀏覽量

    114141
  • RTOS
    +關(guān)注

    關(guān)注

    21

    文章

    807

    瀏覽量

    119287

原文標(biāo)題:Nuttx RTOS入門-簡介及開源代碼運行

文章出處:【微信號:OS與AUTOSAR研究,微信公眾號:OS與AUTOSAR研究】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于OMPL的運動規(guī)劃介紹與教程_ROS_開源代碼1 #開源代碼

    機器人開源硬件源代碼代碼控制算法開源代碼
    薪盡火傳
    發(fā)布于 :2022年08月24日 16:28:03

    基于OMPL的運動規(guī)劃介紹與教程_ROS_開源代碼 2#開源代碼

    機器人開源硬件源代碼代碼控制算法開源代碼
    薪盡火傳
    發(fā)布于 :2022年08月24日 16:28:41

    基于OMPL的運動規(guī)劃介紹與教程_ROS_開源代碼3 #開源代碼

    機器人開源硬件源代碼代碼控制算法開源代碼
    薪盡火傳
    發(fā)布于 :2022年08月24日 16:29:46

    基于OMPL的運動規(guī)劃介紹與教程_ROS_開源代碼4 #開源代碼

    機器人開源硬件源代碼代碼控制算法開源代碼
    薪盡火傳
    發(fā)布于 :2022年08月24日 16:29:51

    NuttX實時操作系統(tǒng)簡介

    NuttX 介紹NuttX 實時操作系統(tǒng)NuttX 是一個實時操作系統(tǒng)(RTOS),強調(diào)標(biāo)準(zhǔn)兼容和小型封裝,具有從8位到32位微控制器環(huán)境的高度可擴展性。
    發(fā)表于 08-05 08:27

    NuttX實時操作系統(tǒng)

    (嵌入式 實時操作系統(tǒng) rtos nuttx 7.1)NuttX 介紹轉(zhuǎn)載請注明出處: NuttX 實時操作系統(tǒng)NuttX 是一個實時操作系
    發(fā)表于 08-06 07:53

    大佬都在用的github開源代碼庫地址

    /80172809github 上部分開源代碼庫的地址,主要是嵌入式方向,包含其他的一些算法比如slam等一些知識庫的地址,在學(xué)習(xí)中不斷積累,項目名稱地址備注 seed-...
    發(fā)表于 11-08 07:56

    有償請幫忙,下載開源代碼到機器狗

    小米的cyberdog2里面的所有開源代碼遠(yuǎn)程桌面,指導(dǎo)安裝對應(yīng)的軟件,代碼編譯運行下載到機器狗;簡單講解一下代碼。 有償請人幫忙,可以長期合作。
    發(fā)表于 09-01 17:33

    Linux源代碼簡介

     Linux源代碼簡介歡迎進入Linux的世界!隨著人們對開放源代碼軟件熱情的不斷高漲,Linux也受到了越來越多的關(guān)注。Linux是操作系統(tǒng)界里的一顆耀眼明星,在各種媒
    發(fā)表于 02-10 13:54 ?78次下載

    rtos隨想曲想源代碼

    rtos隨想曲想源代碼 這個例子是例子2的另一種寫法(但任務(wù)數(shù)量不同),它使用了最高優(yōu)先級任務(wù)作為顯示任務(wù),全局變量ShowChar作為參數(shù).函數(shù)TaskB是優(yōu)先級1~10的任務(wù)函
    發(fā)表于 02-22 14:47 ?8次下載

    small_rtos1.12.1源代碼下載

      small_rtos1.12.1源代碼下載 Small RTOS(51)文件列表 根目錄:list.txt      
    發(fā)表于 02-22 14:53 ?130次下載

    Small RTOS 下dp-51例子源代碼(最新版)

    elecfans.com-Small RTOS 下dp-51例子源代碼(最新版).zip
    發(fā)表于 02-22 14:57 ?0次下載

    四軸開源代碼IAR

    四軸飛行器開源 源代碼IAR需要的自行下載吧。
    發(fā)表于 03-31 15:26 ?5次下載

    BeagleBone Black快速入門教程工具和源代碼

    beaglebone Black的入門教程工具和源代碼,幫助大家更好的熟悉BBB,用它來完成更多的設(shè)計。
    發(fā)表于 11-10 18:24 ?26次下載

    智能手機加速度計內(nèi)部:帶有NuttX RTOS的PinePhone

    電子發(fā)燒友網(wǎng)站提供《智能手機加速度計內(nèi)部:帶有NuttX RTOS的PinePhone.zip》資料免費下載
    發(fā)表于 06-12 14:27 ?0次下載
    智能手機加速度計內(nèi)部:帶有<b class='flag-5'>NuttX</b> <b class='flag-5'>RTOS</b>的PinePhone