[一] 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 上层驱动来进行实现功能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章