[一] Nuttx 系統結構簡析和開發步驟

一、背景

最近在自己開發基於Nuttx的四軸飛行器控制系統。慢慢的對Nuttx有了自己的理解。

二、Nuttx系統分層

  • NSH(Nuttx Shell),各種APP
  • Virtual File System(虛擬文件系統)
  • Upper Half Drivers(上層驅動)
  • Lower Half Drivers(下層驅動)
  • Microcontroller + Peripherals(外設)

三、各層的作用

  1. NSH, APP。這一層也就是實際的應用層,應用程序或者我們常說的終端。
  2. Virtual File System。這一層比較容易理解,也就是一個文件系統,這個虛擬文件系統符合Linux系統的思想。即這一層主要的作用是,將設備的操作,轉化爲對於虛擬文件的操作。比如我們的NSH輸出,就可以虛擬成/dev/console這個文件。通過open打開設備,write進行數據傳輸,read進行數據讀取。文件在很多地方和設備有共性,畢竟都視作資源。
  3. Upper Half Drivers 上層驅動,這一層的驅動實現的是對於各種設備的操作接口的定義,比如PWM,Network, Graphics等等。這一層也就是可以認爲是系統的API。應用程序中你可以用這一層提供給你的函數操作PWM設備。這一層的驅動位於nuttx/include/drivers中。
  4. Lower Half Drivers 下層驅動,這一層驅動是對於上層驅動的具體實現。這一層的驅動提供的API直接操作各種芯片,也就是說不同的芯片這部分的驅動將是不同的。STM32有STM32對應的驅動,Intel也有有其對應的。
  5. Microcontroller + Peripherals, 這層就是各種硬件了。這一層的驅動位於nuttx/arch/*內。

四、各層之間的粘合劑

Nuttx的各層之間存在着各種粘合劑。這些粘合劑是在進行Nuttx系統移植的時候,你需要進行編寫或者修改的。
我的這篇文章中介紹了這些粘合劑的實例編寫(採用的是星瞳的pyboard)。
文章鏈接:Nuttx移植-星瞳pyboard開發板

  1. 首先是configs/<board-name>/include/board.h這個文件。這個文件中定義了,你所用的開發版的外設和芯片的有關參數。晶振配置,SD卡,DMA的配置等等。這一層是粘合硬件與Lower Half Drivers 下層驅動的。
  2. 其次,configs/<board-name>/src/*這個目錄下的各種Nuttx啓動外設初始化c文件。比如我移植時編寫的stm32_pwm.c就負責通過調用設備註冊函數,來創建PWM設備。stm32_sdio.c負責創建和初始化SD卡設備。

五、總結&開發步驟

Nuttx系統的設計還是十分簡潔的,分層較爲清晰。一般的開發步驟如下。

  1. 移植Nuttx系統至你所用的開發版上(編寫粘合劑)。可以參考:文章鏈接:Nuttx移植-星瞳pyboard開發板
  2. 分析你的應用程序需要哪些設備,並在configs/<board-name>/src/*下的c文件中編寫,創建並初始化你所需要的設備。
  3. 應用程序的開發,在app目錄下創建你自己的app目錄,通過調用Upper Half Drivers 上層驅動來進行實現功能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章