1. 簡介
1.1 nuttx介紹
NuttX是一個成熟的實時操作系統(tǒng),于07年由Gregory Nutt先生正式開源,2016年被三星選為TizenRT操作系統(tǒng)的內核,2019年在小米的推動下正式進入Apache基金會,經過開源社區(qū)多年的不懈努力,NuttX功能豐富,性能穩(wěn)定,商業(yè)化成熟度高,F(xiàn)itbit最近兩代的手環(huán)產品和索尼多款消費級產品都是基于NuttX開發(fā)的。
NuttX 是一個實時操作系統(tǒng) (RTOS),強調標準合規(guī)性和占用空間小。NuttX 中的主要管理標準是 Posix 和 ANSI 標準,可從 8 位微控制器環(huán)境擴展到 64 位微控制器環(huán)境。來自 Unix 和其他常見 RTOS(例如 VxWorks)的附加標準 API 被用于這些標準下不可用的功能,或者不適合深度嵌入環(huán)境的功能(例如 fork())。
NuttX可運行于各種處理器架構和硬件平臺上,包括ARM、MIPS、AVR等其重點遵從特定的標準并且盡量 可伸縮良好且可適應從8位到32位單片機環(huán)境
NuttX遵循POSIX標準,在Linux中廣泛應用的API接口,并且具有實時操作系統(tǒng)(RTOS)的特性。它采用模塊化設計,將內核空間和用戶空間分離,并提供了豐富的驅動程序和服務程序,包括文件系統(tǒng)、網絡協(xié)議棧、USB主機/設備支持等。同時,它還支持多任務、多線程、信號量、消息隊列、事件驅動等特性,方便用戶進行開發(fā)和調試。
NuttX特點:
開源免費:NuttX是一款完全開源、免費的操作系統(tǒng),可以自由下載和使用。
可移植性:支持各種處理器架構和硬件平臺,具有良好的可移植性和通用性。
穩(wěn)定可靠:經過長時間的使用和測試,已經成熟穩(wěn)定,能夠滿足各種嵌入式應用的需求。
易用性高:具有簡單易學的API和文檔,便于開發(fā)者學習和使用。
NuttX應用場景:
工控系統(tǒng):可以將NuttX應用于各種工業(yè)自動化、機器人控制、智能電網等工控領域。
消費電子:可以將NuttX應用于各種消費電子產品,例如:移動設備、家庭娛樂系統(tǒng)、數(shù)字相框等。
智能家居:可以將NuttX應用于智能家居領域,例如:溫度控制、燈光控制、安全監(jiān)測等。
主要特點分析:
物聯(lián)網領域應用廣泛
對系統(tǒng)資源的要求遠小于Linux,但是可以提供和Linux系統(tǒng)相近的功能和性能,可以被看作很多低端Linux系統(tǒng)的替代方案。
功能高度可裁剪,可以支持系統(tǒng)資源使用跨度極大的各種產品形態(tài),開發(fā)者可根據(jù)實際需求對系統(tǒng)進行定制。
由于它對POSIX接口的兼容,Linux平臺上現(xiàn)有的開源庫和組件都可以很方便的移植,另外由于軟件平臺對硬件平臺作出了隔離和統(tǒng)一,因此廠商的上層應用代碼在移植到不同硬件平臺時也可以更好的復用。
NuttX本身提供了豐富的OS組件,所以應用開發(fā)者可以利用豐富的OS組件和應用框架,快速的完成系統(tǒng)的定制和應用的開發(fā),減少開發(fā)成本,讓產品更快的投放市場。
實時性:Nuttx是一個實時操作系統(tǒng),可以提供精確的時間管理和響應。這對于需要嚴格時間控制的嵌入式應用非常重要。Linux系統(tǒng)雖然可以提供實時性,但通常需要額外的配置和補丁。
可移植性:Nuttx被設計為高度可移植的,可以在多種硬件平臺上運行。它支持許多不同的處理器架構和設備。Linux系統(tǒng)也具有很高的可移植性,但在某些嵌入式設備上可能需要更多的定制和適配工作。
市場上開源或商業(yè)的RTOS非常多,為什么我們選擇NuttX?主要有以下幾個原因:
NuttX對POSIX標準有原生兼容:NuttX是可商用化RTOS中唯一一個對POSIX API有原生支持的實時操作系統(tǒng),所以很多Linux社區(qū)的開源軟件可以很方便的移植到NuttX上,這樣可以極大的簡化開源軟件移植,方便代碼復用,降低學習曲線,其它RTOS需要適配層把POSIX API轉成內部API,而且通常只兼容一小部分的POSIX接口。
完成度高:NuttX集成了文件系統(tǒng)、網絡協(xié)議棧、圖形庫和驅動框架,減少開發(fā)成本。
模塊化設計:所有組件甚至組件內部特性,都可以通過配置Kconfig來調整或關閉,可按需對系統(tǒng)進行裁剪,適用于不同產品形態(tài)。
代碼精簡:所有組件都是從頭編碼,專門對代碼和數(shù)據(jù)做了優(yōu)化設計。
輕量級:雖然NuttX實現(xiàn)了傳統(tǒng)操作系統(tǒng)的所有功能,但是最終生成的代碼尺寸還是可以很?。ㄗ钚∨渲貌坏?2KB,最大配置不超過256KB)。
和Linux系統(tǒng)的兼容性:因為NuttX整體設計、代碼組織,編譯過程和Linux非常接近,將會極大地降低Android/Linux開發(fā)者的遷移成本。
活躍開放的社區(qū):很多廠商(比如小米、Sony,樂鑫、NXP等)和開源愛好者都在積極回饋社區(qū)。
1.2 NuttX的系統(tǒng)架構
上圖從縱向看,NuttX和傳統(tǒng)操作系統(tǒng)一樣由調度子系統(tǒng)、文件子系統(tǒng)、網絡子系統(tǒng)、圖形子系統(tǒng)和驅動子系統(tǒng)組成。
從橫向看,NuttX向上給應用程序提供了POSIX和ANSI定義的標準C/C++接口。對于沒有標準化的組件(比如各種外設),NuttX通常會提供兼容Linux的API。向下NuttX定義了Arch API、塊設備驅動接口、網卡驅動接口、display驅動接口,以及各種總線和外設的lower half驅動接口,使得芯片廠商能夠規(guī)范、快速地完成移植工作。下圖中數(shù)量眾多的藍色模塊就是NuttX實現(xiàn)的各種功能。
子系統(tǒng)介紹:
調度子系統(tǒng):NuttX支持大多數(shù)RTOS都沒有實現(xiàn)的進程概念,并提供完整的POSIX API,比如pthread、信號量、消息隊列、時鐘/定時器、信號、環(huán)境變量等。同時,也支持RTOS上常見的優(yōu)先級翻轉和tickless模式。NuttX支持對稱多處理(SMP)和非對稱多處理(AMP)兩種多核編程模式,開發(fā)者可以根據(jù)芯片設計的特點和應用場景的需求,選擇使用SMP或AMP,甚至同時使用SMP和AMP。NuttX支持所有常見CPU架構,比如Cortex-A/Cortex-R/Cortex-M、AVR、MIPS、32位/64位 RISC-V,X86/X64,Z80,以及Tensilica和CEVA的DSP,并有超過150款芯片成功移植到NuttX上。
文件系統(tǒng):NuttX設計了一套完整而小巧的虛擬文件系統(tǒng),除了支持統(tǒng)一的目錄和文件操作外,還支持掛載點、字符設備,塊設備等高級概念。直接支持10多種常用的文件系統(tǒng)。比如FAT、LittleFS、SmartFS、NFS、ROMFS、TMPFS等。另外,NuttX內置根文件系統(tǒng),無需掛載即可啟動,極大的簡化了開發(fā)和部署流程。
網絡子系統(tǒng):NuttX實現(xiàn)了完整的網絡協(xié)議棧,支持以太網、WiFi、802.15.4、藍牙、CAN等數(shù)據(jù)鏈路層協(xié)議,支持IPv4、IPv6以及相關的ARP、ICMP、IGMP、MLD等傳輸層協(xié)議,實現(xiàn)了BSD兼容套接字API,除了常見的TCP、UDP協(xié)議外,還支持raw packet、unix domain、netlink套接字類型。另外,NuttX還提供了大量的應用層協(xié)議實現(xiàn),比如DHCP、DNS、NTP、Telnet、FTP、SMTP、HTTP等。
驅動子系統(tǒng):除了接入到文件系統(tǒng)的塊設備驅動和接入到TCP/IP協(xié)議棧的網絡設備驅動外,NuttX還為各種常見總線和外設定義了類似Linux的字符設備驅動。一方面通過NuttX為每類設備定義的標準IOCTL接口,應用程序可以用統(tǒng)一的API訪問不同廠商的硬件驅動,另一方面NuttX驅動框架實現(xiàn)了和硬件無關的操作(比如權限控制、buffer管理,睡眠/喚醒等),降低驅動程序的開發(fā)難度。最后,NuttX提供了一套基于activity統(tǒng)計的低功耗管理框架,使得驅動程序可以方便地實現(xiàn)低功耗控制。
1.3 Xiaomi Vela 介紹
Xiaomi Vela 項目,是小米基于開源實時操作系統(tǒng)NuttX打造的嵌入式物聯(lián)網軟件平臺。小米基于 Apache NuttX 開發(fā)了為解決物聯(lián)網碎片化而生的,物聯(lián)網領域自研的嵌入式軟件平臺——Xiaomi Vela。
在各種不同的物聯(lián)網硬件上提供統(tǒng)一的軟件平臺,支持高性價比的MCU設備,為IoT的繁榮構建基礎設施。Xiaomi Vela 通過組件化能力,做到高度可伸縮、可裁剪,支持豐富的組件和易用的框架。同時,可以很方便的去支持功能差異跨度極大的各種物聯(lián)網設備。還與 Linux 保持高度兼容性,適合做 Linux 的平替,幫助硬件實現(xiàn)降本。并基于物聯(lián)網的特性,在多核異構、安全、超低功耗渲染和連接方面都建設了獨有的能力。
IoT領域跟傳統(tǒng)的PC和手機行業(yè)相比,最大的差異點就是IoT設備極其碎片化,這個碎片化給小米自身以及整個行業(yè)帶來了效率低下的問題(代碼的不可復用、軟件的重復建設)。隨著IoT行業(yè)的高速發(fā)展,到2030年全球還會新增150億IoT設備,所帶來的碎片化問題只會是越來越嚴重。因此,迫切的需要一個統(tǒng)一的軟件平臺來打通碎片化的IoT應用,讓其能夠和諧共通。
Xiaomi Vela 可以通過豐富的組件和標準化的軟件框架,打通碎片化的物聯(lián)網應用場景;可以確保信息在設備間高效無縫的流轉;能夠做到更多物聯(lián)網產品的互聯(lián)隨心配,為用戶帶去更趣味、多樣性的搭配選擇。目前 Xiaomi Vela 已經裝載在含智能家居、穿戴、智能音箱等品類的數(shù)百款、千萬級的智能設備上。能夠聯(lián)動構建更多豐富且實用的智能場景,擁有更極致的設備互聯(lián)的體驗,讓全球每個人都能享受科技帶來的美好生活,這是Xiaomi Vela的目標,同時也是小米公司的愿景。
Xiaomi Vela 主要特性:
高效性能:Vela 基于 NuttX 內核,具有高實時性、低功耗、低延遲等特點,適用于各種資源受限的嵌入式設備。
豐富組件:Vela 提供了多種常用的組件,如網絡、音頻、視頻、圖形、安全等,方便開發(fā)者快速構建應用。
易用框架:Vela 提供了一套統(tǒng)一的應用框架,支持 Lua、JavaScript 等腳本語言開發(fā)應用,并提供了豐富的 API 和文檔。
萬物互聯(lián):Vela 支持多種通信協(xié)議和標準,如 WiFi、BLE、Zigbee、MQTT 等,并提供了小米妙享技術,實現(xiàn)設備之間的無縫連接和協(xié)同。
底層 NuttX 內核:提供最基本的任務調度、跨進程間通信、文件系統(tǒng)等基礎 OS 功能,同時也提供簡潔高效的設備驅動、輕量級的 TCP/IP 協(xié)議棧和電源管理等組件。
應用框架:分為上下兩層,下層是為擴展系統(tǒng)服務而提供的通用應用框架,上層是針對不同的物聯(lián)網應用而開發(fā)的定制應用框架,例如多媒體應用框架和傳感應用框架,提供 Cloud SDK 可以方便開發(fā)者更快速的接入小米云服務。
開發(fā)者工具:除了常見的 Logger 和 Debugger 工具,Xiaomi Vela 還提供 Emulator 工具來幫助開發(fā)者提升調試效率,使用 Emulator,開發(fā)者可以利用 PC 端豐富的調試工具和調試信息,降低嵌入式系統(tǒng)開發(fā)和調試的難度。
1.3.1 小米澎湃OS
看架構圖,澎湃OS是一個大OS的概念,涵蓋硬件上的所有軟件。
小米澎湃OS的底層核心系統(tǒng)由Linux和自研Xiaomi Vela融合而成,異構兼容性與系統(tǒng)資源管理能力可以讓每一臺設備都能發(fā)揮最佳性能。
小米Vela是基于開源嵌入式操作系統(tǒng) NuttX 打造的物聯(lián)網軟件系統(tǒng)平臺,目前已運作于小米多款智能家居產品之上。也就是說,小米澎湃OS搭建于安卓開源與小米物聯(lián)網平臺基礎之上,保留安卓生態(tài)與海外市場,同時爭取留存盡可能多的小米生態(tài)用戶群體。
小米將安卓的服務框架和自研Vela系統(tǒng)的服務框架都作為“中間件”納入其中。同時全新打造八大子系統(tǒng),其中全新的AI子系統(tǒng)融合大模型能力成為整個系統(tǒng)的“智能大腦”,不僅可以讓單設備實現(xiàn)極強的端側AI能力,同時賦予整個生態(tài)智能能力。
最上層HyperConnect 跨端層打破了硬件設備的隔閡,讓所有設備可以統(tǒng)一連接協(xié)議,并且實時通信,最終構建“人車家全生態(tài)”的智能世界。另外,此次小米打造了貫穿內核層、服務框架層、跨端層的全端安全系統(tǒng), 尤其在內核層啟用了完全獨立的“自研微內核安全系統(tǒng)”,保障了安全從最底層實現(xiàn)。
澎湃 OS 最重要的五大特性:
澎湃OS以底層重構覆蓋人車加全生態(tài)豐富多樣的硬件設備;
基于自研的先進跨端互聯(lián)框架,讓設備高效連接;
擁有AI 框架,在AI大模型的全面加持下,給系統(tǒng)應用帶來了更好的表現(xiàn),
同時搭載 Hyperman 的這個設備互聯(lián)的思考中樞,
邁向主動智能時代。
用小米澎湃OS去對標華為鴻蒙系統(tǒng),兩個系統(tǒng)目的類似,但做法不一樣。小米主要基于安卓系統(tǒng)基礎上重寫底層,再加入嵌入式系統(tǒng)的兼容,其本質內核沒有變,但由于重寫了底層,在以后其他產品進行系統(tǒng)配對或系統(tǒng)間互動的時候,會更加平滑。
因此,小米要建一個小米生態(tài)世界,這個OS勢在必行。而小米下一個要開發(fā)的場景就是車,車機交互、人機交互、人才交互,緊密關系到用戶的實際體驗,所以重構的操作系統(tǒng)對于未來小米提升自身產品使用體驗具有重大意義。
國內其他廠商也在做同樣類似的事情,在硬件同質化越來越嚴重的情況下,需要通過做好軟件去提升人際交互和用戶體驗。一個能擁有自主開發(fā)的操作系統(tǒng)更便于做深度定制或者差異化定制,也可以為未來導入人工智能相關打開更好的通道。
小米汽車有兩個獨特的競爭優(yōu)勢:第一是與既有生態(tài)整合,包括操作系統(tǒng)、應用程式、手機與IoT等硬件;第二是銷售渠道遍及海外市場。
1.3.2 鴻蒙與Vela的異同
IoT領域迫切需要一個統(tǒng)一的物聯(lián)網操作系統(tǒng),比ucosIII、freeRTOS更高級,比linux更輕量級。能提提供豐富組件,豐富的生態(tài),便捷的使用,解決碎片化問題。在這方面 Xiaomi Vela和開源鴻蒙系統(tǒng)都在發(fā)力,比如OpenHarmony。OpenHarmony LiteOS-A內核是基于Huawei LiteOS內核演進發(fā)展的新一代內核,Huawei LiteOS是面向IoT領域構建的輕量級物聯(lián)網操作系統(tǒng)。在IoT產業(yè)高速發(fā)展的潮流中,OpenHarmony LiteOS-A內核能夠帶給用戶小體積、低功耗、高性能的體驗以及統(tǒng)一開放的生態(tài)系統(tǒng)能力,新增了豐富的內核機制、更加全面的POSIX標準接口以及統(tǒng)一驅動框架HDF(OpenHarmony Driver Foundation)等,為設備廠商提供了更統(tǒng)一的接入方式,為OpenHarmony的應用開發(fā)者提供了更友好的開發(fā)體驗。
在物聯(lián)網時代,操作系統(tǒng)是最底層基礎的系統(tǒng)架構,很多上層應用都基于操作系統(tǒng)才能布局生態(tài)。就在小米對外正式發(fā)布自家物聯(lián)網操作系統(tǒng)Xiaomi Vela同一天,華為也舉辦了一場新品發(fā)布會,發(fā)布了15款智選新品,這是華為的物聯(lián)網操作系統(tǒng)鴻蒙OS首次應用在華為智選生態(tài)產品上。而在小米官方對Vela介紹中,Xiaomi Vela對標的其實是華為LiteOS。然而,隨著LiteOS融入鴻蒙OS,Xiaomi Vela終將要面對的仍然是鴻蒙OS。無論是鴻蒙還是Xiaomi Vela,都是為了打通物聯(lián)網最基礎的聯(lián)通、協(xié)同相關功能。
但兩者仍然略有差異:在戰(zhàn)略層面:鴻蒙OS發(fā)布之初,華為官方對標的是安卓系統(tǒng)比;Xiaomi Vela則更傾向于認為是與Linux、安卓等高價操作系統(tǒng)是互補共生關系。在應用層面:鴻蒙搭載的范圍更廣,覆蓋到了內存配置比較大的領域,搭載華為鴻蒙OS的第一款產品是榮耀智慧屏;Xiaomi Vela更注重低功耗和輕量級的應用場景,其目標應用是智能家居、可穿戴設備等算力受限設備,而非手機、智能電視等。逐步完善的物聯(lián)網生態(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目標文件,執(zhí)行后自動運行
./nuttx
nut shell 終端如下:
退出shell輸入poweroff,或者另一個終端輸入pkill nuttx
默認用戶名:admin
默認密碼:Administrator
或者使用make menuconfig去掉登錄密碼
2.2 目錄結構:
nuttx/arch:該目錄包含多個子目錄,每個子目錄包含特定于體系結構的邏輯。將 NuttX 移植到新處理器的任務包括在arch/ 包含特定于新架構的邏輯下添加一個新的子目錄。
nuttx/binfmt:binfmt/子目錄包含將文件系統(tǒng)中的二進制文件以可用于執(zhí)行它們的形式加載到內存中的邏輯。
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子目錄包含與體系結構無關的設備驅動程序。
nuttx/fs:fs子該目錄包含 NuttX 文件系統(tǒng)。
nuttx/graphics:graphics子目錄包含 NuttX 下的圖形/視頻支持文件。
nuttx/include:目錄包含 NuttX 頭文件。
nuttx:這幾乎是一個空的目錄,用于存放生成的靜態(tài)庫。
nuttx/libs/libc:目錄包含一組標準的類 libc 函數(shù),帶有 NuttX 的自定義接口。
nuttx/mm:這是 NuttX 內存管理器。
nuttx/net:該目錄包含 NuttX 網絡層的實現(xiàn),包括內部套接字 API。
nuttx/sched:構成 NuttX RTOS 核心的文件位于此處。
nuttx/syscall:該目錄包含一個系統(tǒng)調用接口,可用于用戶模式應用程序和內核模式 RTOS 之間的通信。
nuttx/tools:該目錄包含一組工具和腳本,用于簡化配置、構建和維護 NuttX。
nuttx/wireless:該目錄包含對獨立于硬件的無線支持的支持。
nuttx/Makefile:Makefile目錄中的頂層$(TOPDIR)包含構建 NuttX 的所有頂層控制邏輯。
3. 啟動流程分析
在NuttX內存布局中,KROM和UROM分別存放著內核啟動和NSH啟動的程序,啟動流程如下圖所示,下面對啟動流程進行簡要介紹。
在KROM中內核啟動流程是:
硬件初始化
_start是內核啟動的入口點,處理器將從這里開始執(zhí)行內核啟動的第一條指令
初始化棧指針和中斷向量表,將中斷模式設置為CLIC Direct模式。在Direct中斷模式下,BASE被要求必須是64字節(jié)對齊,且所有的異常和中斷將會跳轉trap中斷處理函數(shù)進行中斷處理,中斷處理函數(shù)地址保存在mtvec寄存器中,中斷處理流程如下圖6-3所示:
搬移data段,清空BSS段,進行clock配置;完成uart的前期初始化,這里只進行了uart設備初始化,沒有做驅動初始化,目的是實現(xiàn)控制臺信息打印功能。
系統(tǒng)級初始化
根據(jù)用戶鏡像中的信息進行應用程序空間中data和BSS段的搬移和初始化工作,使用PMP設置地址空間訪問權限
NuttX系統(tǒng)的初始化,主要有內核list初始化、idle tcb初始化、信號量初始化、內存堆初始化、task子系統(tǒng)初始化、fs子系統(tǒng)初始化、watchdog初始化、clock子系統(tǒng)初始化等
堆地址初始化:用戶空間堆初始化和內核空間堆初始化
設置初始環(huán)境變量并啟動init程序
根據(jù)系統(tǒng)配置找到應用程序入口點,并啟動應用程序。
經過上面步驟已實現(xiàn)硬件環(huán)境初始化和NuttX系統(tǒng)初始化,下面將啟動應用程序。應用程序放置在UROM地址空間中,總的來說獲取應用程序入口點有三種方式:第一種通過宏直接設置入口點地址;第二種從用戶空間結構體中獲取入口點;最后一種則從文件系統(tǒng)中獲取init程序并動態(tài)載入后跳轉。獲取應用程序入口通過menuconfig進行配置。三種方式都可實現(xiàn)應用程序的加載,但第二種實現(xiàn)方式還具有其他優(yōu)點,它可將用戶空間結構體以符號的形式傳遞給拓展ELF固件,因此我們選擇第二種應用程序加載方式。這里簡要介紹如何選擇第二種加載方式即如何加載應用程序:
在menuconfig中選擇CONFIG_INIT_ENTRYPOINT(應用程序入口點配置項) 和 CONFIG_BUILD_PROTECTED(指定從用戶空間結構體中獲取應用程序入口點)這兩個宏,可以指定以第二種方式加載應用程序。
用戶空間結構體在鏈接時會被工具鏈放在用戶鏡像的text段首地址
NuttX啟動應用程序過程中,將用戶空間結構體作為參數(shù)傳遞給任務創(chuàng)建函數(shù),如此可根據(jù)應用程序入口點創(chuàng)建應用程序任務
上面提到用戶鏡像中包含NSH和內嵌的應用。NSH是NuttX提供一個小型的、可伸縮的、類似bash的shell命令解析器,具有命令行解析、實時串口輸出、系統(tǒng)掛載等功能,具有豐富的特性集和較小的占用空間,支持腳本啟動、拓展程序動態(tài)加載,因此考慮將NSH作為第一個用戶程序。
enum nx_initstate_e { OSINIT_POWERUP = 0, /*上電。尚未執(zhí)行初始化,取決于.bss的初始化邏輯值。* / OSINIT_BOOT = 1, /*基本啟動初始化完成。操作系統(tǒng)服務和硬件資源還沒有可用。* / OSINIT_TASKLISTS = 2, /*準備運行/分配的任務列表頭有效*/ OSINIT_MEMORY = 3, /*內存管理器已經初始化*/ OSINIT_HARDWARE = 4, /* mcu專用硬件初始化。硬件資源,如定時器和設備驅動程序現(xiàn)已提供。 足夠的底層操作系統(tǒng)服務支持的硬件也有但是操作系統(tǒng)尚未完成其全部初始化。* / OSINIT_OSREADY = 5, /*操作系統(tǒng)已經完全初始化,多任務正在進行活動。* / osinit_idlelloop = 6 /*操作系統(tǒng)進入空閑循環(huán)*/ };
可以代碼中添加打印,自己上手調試下:
#include_info("ssss Entry ");
審核編輯:劉清
-
微控制器
+關注
關注
48文章
7872瀏覽量
153488 -
處理器
+關注
關注
68文章
19761瀏覽量
233041 -
USB主機
+關注
關注
0文章
22瀏覽量
9491 -
定時器
+關注
關注
23文章
3274瀏覽量
116891 -
RTOS
+關注
關注
24文章
837瀏覽量
120637
原文標題:Nuttx RTOS入門-簡介及開源代碼運行
文章出處:【微信號:OS與AUTOSAR研究,微信公眾號:OS與AUTOSAR研究】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄




NuttX實時操作系統(tǒng)簡介
NuttX實時操作系統(tǒng)
大佬都在用的github開源代碼庫地址
有償請幫忙,下載開源代碼到機器狗
Linux源代碼簡介
rtos隨想曲想源代碼
small_rtos1.12.1源代碼下載
BeagleBone Black快速入門教程工具和源代碼
智能手機加速度計內部:帶有NuttX RTOS的PinePhone

評論