Nuttx開發初探 編譯篇

2021-09-29 14:32:07 字數 2358 閱讀 8593

各類系統搞了這麼多年,感覺關於os的各類底層機制已經摸透了,直到兩年前遇到nuttx,大致瀏覽了目錄結構和原始碼readme後,感覺nuttx應該是乙個不錯的系統,有瓜可挖。 只是一直忙於專案,沒有時間深入研究。 直到翻出之前參加某活動獲贈的frdm-k64f開發板在那靜靜吃灰,有了想動一動的衝動。

廢話不多說,下面直入主題寫步驟,會比較幹,喜歡文藝范的繞行.

主機配置:ubuntu14.04.4 lts

編譯器:

sudo apt-get install gcc-arm-none-eabi

sudo apt-get install flex libncurses5-dev

sudo apt-get install gperf

建立工作目錄nuttx

mkdir nuttx && cd nuttx

git clone  nuttx
git clone  tools
不墨跡,不管你之前裝沒裝,autoconf和automake公升級到最新版, 我用的是 autoconf-2.69 和 automake-1.15

不排除你的環境還會遇到沒安裝的依賴包,沒關係,兵來將擋,水來土掩,找最新版的安裝就是了。

nuttx使用類似於linux的menuconfig和qconfig配置方式,需要kconfig工具的支援,這裡進行這一步

進入到./tools/kconfig-frontends目錄

./configure --enable-mconf
結束後:

nuttx還支援qconfig配置,使能選項是--enable-qconf, 不過我嫌安裝qt5過於麻煩,沒有選擇。

接著執行make && sudo make install編譯安裝

進入到./nuttx/tools目錄, 執行./configure.sh freedom-k64f:nsh

一開始的時候,我遇到找不到libkconfig-parser-4.11.0.so的問題,實際上這個庫檔案在上一步的編譯過程中已經生成了,並且安裝成功了,我沒有細究原因,直接通過用ld_library_path暴露庫路徑的方式解決。

libkconfig-parser-4.11.0.so:

export ld_library_path=$ld_library_path:*********/nuttx/tools/kconfig-frontends/libs/parser/.libs

接著進入主目錄先執行 make distclean(可能上一步雖然沒執行成功但生成了臨時檔案,需要清理)

再次執行上述命令./configure.sh freedom-k64f:nsh,成功執行

預設情況下,最終編譯結果只有.hex和.srec檔案,沒有elf的binary輸出,需要手動開啟。

進入到nuttx主目錄,執行make menuconfig,進入到相關項選擇raw binary format.

step4:燒錄nuttx.bin

frdm-k64f自帶板載偵錯程式st-link,支援工具燒錄和虛擬磁碟燒錄,這裡使用虛擬磁碟燒錄的方式.

nuttx.bin是nuttx elf檔案的binary轉製版,可以通過objcopy -o binary生成,拷貝 nuttx.bin到frdm-k64f掛載後的磁碟目錄。

拷貝完畢,系統會自動重啟,進入到nsh主shell.

使用minicom工具鍊錶埠節點:

sudo minicom -d /dev/ttyacm0

可以看到shell控制台

Nuttx的編譯與構建

nuttx是乙個實時作業系統 rtos 可以執行在8位至32位微控制器。它符合posix和ansi標準 是乙個類linux的作業系統。維基百科 編譯環境 xubuntu 14.10 32位 在編譯之前要先安裝各種依賴包。sudo apt get install autoconf libtool gp...

nuttx配置說明及編譯

nuttx的配置全在configs資料夾當中,裡面預先提供了多種開發板的配置。以stm32f746g disco為例 include資料夾中只包含乙個檔案board.h board.h中,採用巨集定義的方式設定各引數 1.對時鐘系統設定 2.對引腳配置 如 definegpio usart6 rx ...

編譯原理初探

編譯的第乙個過程是詞法分析,目的就是在連續的字元中識別出乙個乙個的符號,並盡可能的識別出符號的屬性,再詞法分析階段,能夠識別出一些符號的意義,它們包括關鍵字,數字字串,分隔符等,它們不需要其他符號的輔助就能確定本身的意義,如int代表整型 但是有一些符號需要通過前後的其它符號才能確定,更多的資訊需要...