精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

Nuttx實(shí)時(shí)操作系統(tǒng)學(xué)習(xí)筆記

CHANBAEK ? 來(lái)源: 非典型技術(shù)宅 ? 作者: 非典型技術(shù)宅 ? 2023-11-24 09:53 ? 次閱讀

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

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

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

NUTTX 簡(jiǎn)介

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

它最大的特點(diǎn)是:

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

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

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

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

支持的平臺(tái)

根據(jù)官方的文檔,現(xiàn)在 Nuttx 已經(jīng)支持了 16 種不同芯片架構(gòu),累計(jì) 280+ 種芯片。包括 TINXP、ST、樂(lè)鑫在內(nèi)的眾多常用芯片都已支持在內(nèi)。

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

快速開(kāi)始

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

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

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

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 的代碼中默認(rèn)包含所有支持的芯片驅(qū)動(dòng),所有無(wú)需下載額外的代碼,只要根據(jù)需要選擇你需要使用配置即可:

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

輸入命令后會(huì)打印非常多配置,以 sim:minibaisc 為例,其中冒號(hào)前面的 sim 表示使用芯片,冒號(hào)后面的 minibasic 表示具體配置名稱(chēng)。

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

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

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

圖片

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

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

修改文件

hello 程序所在位置為:apps/examples/hello/hello_main.c 中,打開(kāi)文件可以可進(jìn)行修改然后編譯運(yùn)行。

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

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

圖片

結(jié)語(yǔ)

這是我關(guān)于 Nuttx 學(xué)習(xí)記錄的第一篇文章,如有不嚴(yán)謹(jǐn)或者錯(cuò)誤的地方歡迎大家指出。
在下一篇會(huì)講到如何新建一個(gè)自己的工程以及如何修改 Nuttx 的配置,給 Nuttx 添加功能。

該項(xiàng)目的兩個(gè)倉(cāng)庫(kù),我已合并成一個(gè) github 倉(cāng)庫(kù)方便下載,后續(xù)學(xué)習(xí)記錄的代碼和筆記都會(huì)同步到該倉(cāng)庫(kù),有需要可點(diǎn)文末閱讀原文自取。

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

    關(guān)注

    68

    文章

    10825

    瀏覽量

    211150
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11229

    瀏覽量

    208927
  • STM32
    +關(guān)注

    關(guān)注

    2266

    文章

    10871

    瀏覽量

    354806
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    377

    瀏覽量

    28111
  • 實(shí)時(shí)操作系統(tǒng)

    關(guān)注

    1

    文章

    196

    瀏覽量

    30742
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    UCOSIII操作系統(tǒng)學(xué)習(xí)筆記——任務(wù)

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