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

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

3天內不再提示

Nuttx RTOS入門(mén)知識簡(jiǎn)介及開(kāi)源代碼運行

yzcdx ? 來(lái)源:OS與AUTOSAR研究 ? 2024-01-10 18:14 ? 次閱讀

1. 簡(jiǎn)介

1.1 nuttx介紹

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

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

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

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

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

NuttX特點(diǎn):

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

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

穩定可靠:經(jīng)過(guò)長(cháng)時(shí)間的使用和測試,已經(jīng)成熟穩定,能夠滿(mǎn)足各種嵌入式應用的需求。

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

NuttX應用場(chǎng)景:

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

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

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

主要特點(diǎn)分析:

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

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

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

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

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

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

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

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

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

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

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

代碼精簡(jiǎn):所有組件都是從頭編碼,專(zhuān)門(mén)對代碼和數據做了優(yōu)化設計。

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

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

活躍開(kāi)放的社區:很多廠(chǎng)商(比如小米、Sony,樂(lè )鑫、NXP等)和開(kāi)源愛(ài)好者都在積極回饋社區。

1.2 NuttX的系統架構

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

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

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

子系統介紹:

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

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

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

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

1.3 Xiaomi Vela 介紹

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

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

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

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

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

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

Xiaomi Vela 主要特性:

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

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

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

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

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

底層 NuttX 內核:提供最基本的任務(wù)調度、跨進(jìn)程間通信、文件系統等基礎 OS 功能,同時(shí)也提供簡(jiǎn)潔高效的設備驅動(dòng)、輕量級的 TCP/IP 協(xié)議棧和電源管理等組件。

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

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

1.3.1 小米澎湃OS

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

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

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

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

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

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

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

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

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

擁有AI 框架,在A(yíng)I大模型的全面加持下,給系統應用帶來(lái)了更好的表現,

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

邁向主動(dòng)智能時(shí)代。

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

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

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

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

1.3.2 鴻蒙與Vela的異同

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

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

但兩者仍然略有差異:在戰略層面:鴻蒙OS發(fā)布之初,華為官方對標的是安卓系統比;Xiaomi Vela則更傾向于認為是與Linux、安卓等高價(jià)操作系統是互補共生關(guān)系。在應用層面:鴻蒙搭載的范圍更廣,覆蓋到了內存配置比較大的領(lǐng)域,搭載華為鴻蒙OS的第一款產(chǎn)品是榮耀智慧屏;Xiaomi Vela更注重低功耗和輕量級的應用場(chǎng)景,其目標應用是智能家居、可穿戴設備等算力受限設備,而非手機、智能電視等。逐步完善的物聯(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 選擇一個(gè)板卡,例如sim:nsh
make menuconfig 配置Kconfig文件
make

編譯后代碼根目錄有nuttx目標文件,執行后自動(dòng)運行

./nuttx

nut shell 終端如下:

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

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

默認用戶(hù)名:admin

默認密碼:Administrator

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

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

2.2 目錄結構:

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

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

nuttx/audio:audio/子目錄包含 NuttX 音頻子系統

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

nuttx/crypto:crypto子目錄包含 NuttX 加密子系統。

nuttx/drivers:crypto子目錄包含與體系結構無(wú)關(guān)的設備驅動(dòng)程序。

nuttx/fs:fs子該目錄包含 NuttX 文件系統。

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

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

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

nuttx/libs/libc:目錄包含一組標準的類(lèi) libc 函數,帶有 NuttX 的自定義接口。

nuttx/mm:這是 NuttX 內存管理器。

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

nuttx/sched:構成 NuttX RTOS 核心的文件位于此處。

nuttx/syscall:該目錄包含一個(gè)系統調用接口,可用于用戶(hù)模式應用程序和內核模式 RTOS 之間的通信。

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

nuttx/wireless:該目錄包含對獨立于硬件的無(wú)線(xiàn)支持的支持。

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

3. 啟動(dòng)流程分析

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

在NuttX內存布局中,KROM和UROM分別存放著(zhù)內核啟動(dòng)和NSH啟動(dòng)的程序,啟動(dòng)流程如下圖所示,下面對啟動(dòng)流程進(jìn)行簡(jiǎn)要介紹。

在KROM中內核啟動(dòng)流程是:

硬件初始化

_start是內核啟動(dòng)的入口點(diǎn),處理器將從這里開(kāi)始執行內核啟動(dòng)的第一條指令

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

搬移data段,清空BSS段,進(jìn)行clock配置;完成uart的前期初始化,這里只進(jìn)行了uart設備初始化,沒(méi)有做驅動(dòng)初始化,目的是實(shí)現控制臺信息打印功能。

系統級初始化

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

NuttX系統的初始化,主要有內核list初始化、idle tcb初始化、信號量初始化、內存堆初始化、task子系統初始化、fs子系統初始化、watchdog初始化、clock子系統初始化等

堆地址初始化:用戶(hù)空間堆初始化和內核空間堆初始化

設置初始環(huán)境變量并啟動(dòng)init程序

根據系統配置找到應用程序入口點(diǎn),并啟動(dòng)應用程序。

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

在menuconfig中選擇CONFIG_INIT_ENTRYPOINT(應用程序入口點(diǎn)配置項) 和 CONFIG_BUILD_PROTECTED(指定從用戶(hù)空間結構體中獲取應用程序入口點(diǎn))這兩個(gè)宏,可以指定以第二種方式加載應用程序。

用戶(hù)空間結構體在鏈接時(shí)會(huì )被工具鏈放在用戶(hù)鏡像的text段首地址

NuttX啟動(dòng)應用程序過(guò)程中,將用戶(hù)空間結構體作為參數傳遞給任務(wù)創(chuàng )建函數,如此可根據應用程序入口點(diǎn)創(chuàng )建應用程序任務(wù)

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

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

可以代碼中添加打印,自己上手調試下:

#include 
_info("ssss Entry
");






審核編輯:劉清

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

    關(guān)注

    48

    文章

    6881

    瀏覽量

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

    關(guān)注

    68

    文章

    18565

    瀏覽量

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

    關(guān)注

    0

    文章

    15

    瀏覽量

    9319
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3156

    瀏覽量

    112540
  • RTOS
    +關(guān)注

    關(guān)注

    20

    文章

    782

    瀏覽量

    118901

原文標題:Nuttx RTOS入門(mén)-簡(jiǎn)介及開(kāi)源代碼運行

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

收藏 人收藏

    評論

    相關(guān)推薦

    基于OMPL的運動(dòng)規劃介紹與教程_ROS_開(kāi)源代碼1 #開(kāi)源代碼

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

    基于OMPL的運動(dòng)規劃介紹與教程_ROS_開(kāi)源代碼 2#開(kāi)源代碼

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

    基于OMPL的運動(dòng)規劃介紹與教程_ROS_開(kāi)源代碼3 #開(kāi)源代碼

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

    基于OMPL的運動(dòng)規劃介紹與教程_ROS_開(kāi)源代碼4 #開(kāi)源代碼

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

    NuttX實(shí)時(shí)操作系統簡(jiǎn)介

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

    NuttX實(shí)時(shí)操作系統

    (嵌入式 實(shí)時(shí)操作系統 rtos nuttx 7.1)NuttX 介紹轉載請注明出處: NuttX 實(shí)時(shí)操作系統NuttX 是一個(gè)實(shí)時(shí)操作系
    發(fā)表于 08-06 07:53

    大佬都在用的github開(kāi)源代碼庫地址

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

    有償請幫忙,下載開(kāi)源代碼到機器狗

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

    Linux源代碼簡(jiǎn)介

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

    rtos隨想曲想源代碼

    rtos隨想曲想源代碼 這個(gè)例子是例子2的另一種寫(xiě)法(但任務(wù)數量不同),它使用了最高優(yōu)先級任務(wù)作為顯示任務(wù),全局變量ShowChar作為參數.函數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 ?129次下載

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

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

    四軸開(kāi)源代碼IAR

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

    關(guān)于C程序源代碼是如何在硬件上運行的?

    C程序源代碼是如何在硬件上運行的?
    的頭像 發(fā)表于 02-05 12:37 ?2599次閱讀

    嵌入式開(kāi)發(fā)有用的github上的開(kāi)源代碼

    /80172809github 上部分開(kāi)源代碼庫的地址,主要是嵌入式方向,包含其他的一些算法比如slam等一些知識庫的地址,在學(xué)習中不斷積累,項目名稱(chēng) 地址 備注 seed-...
    發(fā)表于 11-02 20:21 ?3次下載
    嵌入式開(kāi)發(fā)有用的github上的<b class='flag-5'>開(kāi)源代碼</b>庫
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看