文章目录
- 一、背景
- 二、Nuttx系统分层
- 三、各层的作用
- 四、各层之间的粘合剂
- 五、总结&开发步骤
一、背景
最近在自己开发基于Nuttx的四轴飞行器控制系统。慢慢的对Nuttx有了自己的理解。
二、Nuttx系统分层
- NSH(Nuttx Shell),各种APP
- Virtual File System(虚拟文件系统)
- Upper Half Drivers(上层驱动)
- Lower Half Drivers(下层驱动)
- Microcontroller + Peripherals(外设)
三、各层的作用
- NSH, APP。这一层也就是实际的应用层,应用程序或者我们常说的终端。
- Virtual File System。这一层比较容易理解,也就是一个文件系统,这个虚拟文件系统符合Linux系统的思想。即这一层主要的作用是,将设备的操作,转化为对于虚拟文件的操作。比如我们的NSH输出,就可以虚拟成
/dev/console
这个文件。通过open打开设备,write进行数据传输,read进行数据读取。文件在很多地方和设备有共性,毕竟都视作资源。 - Upper Half Drivers 上层驱动,这一层的驱动实现的是对于各种设备的操作接口的定义,比如PWM,Network, Graphics等等。这一层也就是可以认为是系统的API。应用程序中你可以用这一层提供给你的函数操作PWM设备。这一层的驱动位于
nuttx/include/drivers
中。 - Lower Half Drivers 下层驱动,这一层驱动是对于上层驱动的具体实现。这一层的驱动提供的API直接操作各种芯片,也就是说不同的芯片这部分的驱动将是不同的。STM32有STM32对应的驱动,Intel也有有其对应的。
- Microcontroller + Peripherals, 这层就是各种硬件了。这一层的驱动位于
nuttx/arch/*
内。
四、各层之间的粘合剂
Nuttx的各层之间存在着各种粘合剂。这些粘合剂是在进行Nuttx系统移植的时候,你需要进行编写或者修改的。
我的这篇文章中介绍了这些粘合剂的实例编写(采用的是星瞳的pyboard)。
文章链接:Nuttx移植-星瞳pyboard开发板
- 首先是
configs/<board-name>/include/board.h
这个文件。这个文件中定义了,你所用的开发版的外设和芯片的有关参数。晶振配置,SD卡,DMA的配置等等。这一层是粘合硬件与Lower Half Drivers 下层驱动的。 - 其次,
configs/<board-name>/src/*
这个目录下的各种Nuttx启动外设初始化c文件。比如我移植时编写的stm32_pwm.c
就负责通过调用设备注册函数,来创建PWM设备。stm32_sdio.c
负责创建和初始化SD卡设备。
五、总结&开发步骤
Nuttx系统的设计还是十分简洁的,分层较为清晰。一般的开发步骤如下。
- 移植Nuttx系统至你所用的开发版上(编写粘合剂)。可以参考:文章链接:Nuttx移植-星瞳pyboard开发板
- 分析你的应用程序需要哪些设备,并在
configs/<board-name>/src/*
下的c文件中编写,创建并初始化你所需要的设备。 - 应用程序的开发,在app目录下创建你自己的app目录,通过调用Upper Half Drivers 上层驱动来进行实现功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)