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

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

3天內不再提示

Nuttx實時操作系統(tǒng)學習筆記

CHANBAEK ? 來源: 非典型技術宅 ? 作者: 非典型技術宅 ? 2023-11-24 09:53 ? 次閱讀

之前在論壇看到過一篇帖子,說怎么在 STM32 上移植 Linux ,帖子寫了很長,最后才發(fā)現(xiàn)使用的 uclinux,而且還是只啟動一個 uboot。

現(xiàn)在想想為什么需要在 STM32 這種 MCU 上移植 Linux 呢,個人猜測可能是因為 Linux 環(huán)境豐富的組件和軟件可移植性吧。

可是如果有一個 mini 版的 Linux 系統(tǒng)可以用呢,而且還不需要移植,上手即用,這個就是 Nuttx。

NUTTX 簡介

NuttX 可拓展的實時操作系統(tǒng),在2017年由 Gregory Nutt 發(fā)布, 并在2019年正式進入Apache基金會,成為 Apache 孵化項目。

它最大的特點是:

  • 高度可擴展性 :Nuttx 支持8位到64位多種 CPU,其功能全部可進行裁剪和配置,可根據需要選擇所需的組件。
  • 合規(guī)性 :Nuttx 的系統(tǒng) API 原生支持標準 POSIX 接口和完整的 C 標準庫,這讓一些 Linux/Unix 的程序可以很方便的移植到 Nuttx 中使用,而不需要做太多更改。

(吐槽一下:在之前使用其他 RTOS 的 Posix 接口使用體驗并不太友好:FreeRTOS 支持的 POSIX 接口僅包含線程的的部分,缺少文件按系統(tǒng)支持使用總感覺有點雞肋。RT-Thread 在組件中支持了 POSIX 線程接口也有文件系統(tǒng)支持,但是使用的時候總會有一兩處不同讓人心煩意亂)

除此之外 Nuttx 還有豐富的系統(tǒng)組件:

  • 文件系統(tǒng) :Nuttx 支持多種不同的文件系統(tǒng),包括但不限于 LittleFS、 ROMFS、NFS、FATFS 等等,甚至你還可以在 Nuttx 中掛載一個 FTP 服務器~
  • 設備驅動 :Nuttx 提供了豐富統(tǒng)一的設備和總線驅動,在不同芯片平臺可使用相同的方式訪問設備。包括網絡、USB、SDIO、TFT 等多種總線或者設備。
  • 網絡支持 :Nuttx 中支持了 IPv4、IPv6、TCP/IP、ICMP、BT、BLE 等多種協(xié)議棧,還支持 DHCP、SMTP、Telnet 、FTP、HTTP 等多種服務端和客戶端,在使用中可無縫對接 Linux 程序。
  • 多核支持 :在一些復雜應用的所使用 SOC,往往不止一個 CPU,Nuttx 中基于 OpenAMP 提供了一個強大的多核框架,能夠在使用時完全忽略多核差異。

支持的平臺

根據官方的文檔,現(xiàn)在 Nuttx 已經支持了 16 種不同芯片架構,累計 280+ 種芯片。包括 TI、NXP、ST、樂鑫在內的眾多常用芯片都已支持在內。

更重要的是 Nuttx 支持,在電腦中使用模擬器運行 nuttx。在開發(fā)時先在 sim 中調試驗證完成后,再使用硬件進行調試,能夠提高開發(fā)效率和縮短開發(fā)時間。

快速開始

開發(fā) Nuttx 推薦使用 Ubuntu 20.04 進行開發(fā),在 windows 中可以使用 wsl2 安裝 Ubuntu 20.04 可獲得相同體驗。以下以 WSL2 (Ubuntu 20.04)為例進行說明。

安裝開發(fā)環(huán)境

安裝編譯工具: 由于 nuttx 在編譯時會使用到一些額外的工具,所以需要提前安裝依賴的工具。(其實下面有些也不常用。。)

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
sudo apt install kconfig-frontends
sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi

下載代碼

mkdir nuttx-learning
cd nuttx-learning
git clone --depth=1 -b nuttx-10.2.0 https://github.com/apache/incubator-nuttx.git nuttx
git clone --depth=1 -b nuttx-10.2.0 https://github.com/apache/incubator-nuttx-apps apps

配置編譯

在 Nuttx 的代碼中默認包含所有支持的芯片驅動,所有無需下載額外的代碼,只要根據需要選擇你需要使用配置即可:

# 進入 nuttx 目錄
cd nuttx
# c查看所有可用的配置
./tools/configure.sh -L

輸入命令后會打印非常多配置,以 sim:minibaisc 為例,其中冒號前面的 sim 表示使用芯片,冒號后面的 minibasic 表示具體配置名稱。

sim:minibasic 表示在模擬器中運行的最小程序配置,它編譯完后它只包含一個 shell 和一個 hello world。

# 生成指定配置的配置信息
./tools/configure.sh -l sim:minibasic
# 編譯程序
make -j

編譯完成后,在 nuttx 目錄下(執(zhí)行 make 的當前目錄),會生成一個 ./nuttx 文件。

圖片

運行 ./nuttx 后會出現(xiàn)一個新的 shell,這個是 Nuttx 的終端 nsh,輸入 help 命令可查看當前可用命令。

輸入 hello 后按回車,即執(zhí)行 hello 的程序,然后打印出 hello world。退出 nsh 需要使用命令 poweroff,而不能使用 Ctrl-C 結束程序。

修改文件

hello 程序所在位置為:apps/examples/hello/hello_main.c 中,打開文件可以可進行修改然后編譯運行。

將我之前移植 FreeRTOS 時所自帶的 Posix 測試程序,替換 hello_main.c 的內容,修改入口函數(shù)名為 main,然后重新編譯運行。

無需任何移植,即可完美兼容 POSIX 接口的程序。

圖片

結語

這是我關于 Nuttx 學習記錄的第一篇文章,如有不嚴謹或者錯誤的地方歡迎大家指出。
在下一篇會講到如何新建一個自己的工程以及如何修改 Nuttx 的配置,給 Nuttx 添加功能。

該項目的兩個倉庫,我已合并成一個 github 倉庫方便下載,后續(xù)學習記錄的代碼和筆記都會同步到該倉庫,有需要可點文末閱讀原文自取。

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

    關注

    68

    文章

    10879

    瀏覽量

    212196
  • Linux
    +關注

    關注

    87

    文章

    11320

    瀏覽量

    209849
  • STM32
    +關注

    關注

    2270

    文章

    10910

    瀏覽量

    356588
  • 移植
    +關注

    關注

    1

    文章

    379

    瀏覽量

    28150
  • 實時操作系統(tǒng)

    關注

    1

    文章

    199

    瀏覽量

    30778
收藏 人收藏

    評論

    相關推薦

    實時操作系統(tǒng)nuttx源碼

    實時操作系統(tǒng)nuttx源碼
    發(fā)表于 05-07 16:43

    嵌入式Linux操作系統(tǒng)學習規(guī)劃,不看肯定后悔

    嵌入式Linux操作系統(tǒng)學習規(guī)劃,不看肯定后悔
    發(fā)表于 04-28 06:22

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

    NuttX 介紹NuttX 實時操作系統(tǒng)NuttX 是一個實時
    發(fā)表于 08-05 08:27

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

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

    探討嵌入式操作系統(tǒng)

    嵌入式操作系統(tǒng)學習筆記
    發(fā)表于 10-27 06:56

    NuttX實時操作系統(tǒng)有哪些特征呢

    NuttX是什么?NuttX實時操作系統(tǒng)有哪些特征?
    發(fā)表于 11-03 06:34

    有關NuttX實時操作系統(tǒng)的基本知識匯總

    NuttX是什么?NuttX實時操作系統(tǒng)有哪些關鍵特征?
    發(fā)表于 11-04 06:14

    NuttX實時操作系統(tǒng)的關鍵特征有哪些呢

    NuttX是什么?NuttX實時操作系統(tǒng)的關鍵特征有哪些呢?
    發(fā)表于 11-04 07:08

    嵌入式Linux操作系統(tǒng)學習規(guī)劃

    嵌入式Linux操作系統(tǒng)學習規(guī)劃ARM+LINUX路線,主攻嵌入式Linux操作系統(tǒng)及其上應用軟件開發(fā)目標:(1) 掌握主流嵌入式微處理器的結構與原理(初步定為arm9)(2) 必須掌握一個嵌入式
    發(fā)表于 11-05 06:45

    實時操作系統(tǒng)的行為同步是什么意思

    《基于嵌入式實時操作系統(tǒng)的編程技術》筆記清單:第三章任務劃分.《基于嵌入式實時操作系統(tǒng)的編程技術》筆記
    發(fā)表于 12-22 06:16

    UCOSII操作系統(tǒng)的簡介

    前言這是我將UCOSII操作系統(tǒng)移植在STM32單片機上后進行UCOSII操作系統(tǒng)學習的一些筆記與理解,此文最后會附上我自己在UCOSII操作系統(tǒng)下使用STM32寫
    發(fā)表于 01-12 06:00

    嵌入式操作系統(tǒng)學習筆記

    嵌入式操作系統(tǒng)學習筆記
    發(fā)表于 10-20 13:51 ?3次下載
    嵌入式<b class='flag-5'>操作系統(tǒng)學習</b><b class='flag-5'>筆記</b>

    51操作系統(tǒng)學習筆記(三):建立一個屬于自己的AVR的RTOS(1)

    這篇筆記雖然是“51操作系統(tǒng)學習筆記”,但沒有找到合適的代碼。用楊明記的感覺還有點難度。因而轉學《建立一個屬于自己的AVR的RTOS》這篇文章絕對是學操作系統(tǒng)入門經典之作。經典之處在于
    發(fā)表于 11-15 18:36 ?9次下載
    51<b class='flag-5'>操作系統(tǒng)學習</b><b class='flag-5'>筆記</b>(三):建立一個屬于自己的AVR的RTOS(1)

    51操作系統(tǒng)學習筆記(四):建立一個屬于自己的AVR的RTOS(2)

    承接51操作系統(tǒng)學習筆記(三):建立一個屬于自己的AVR的RTOS(1),在avr中調試一下下面的程序.為了加深學習應用,決定把代碼全部輸一遍,比復制的學些效果應該好一些吧。打開Avr studio
    發(fā)表于 11-15 21:06 ?7次下載
    51<b class='flag-5'>操作系統(tǒng)學習</b><b class='flag-5'>筆記</b>(四):建立一個屬于自己的AVR的RTOS(2)

    UCOSIII操作系統(tǒng)學習筆記——任務

    RTOS系統(tǒng)RTOS全程為:Real Time OS,就是實時操作系統(tǒng)。實時操作系統(tǒng)分為硬實時
    發(fā)表于 12-02 13:51 ?2次下載
    UCOSIII<b class='flag-5'>操作系統(tǒng)學習</b><b class='flag-5'>筆記</b>——任務