之所以选择Nuttx作为操作系统,一是因为Nuttx提供的接口支持Posix,大部分Linux上的应用程序都可以移植过来,对于比较复杂的应用,这点是极好的;二是Nuttx支持动态加载程序,也就是说Nuttx可以在线进行应用的升级。
这篇文章从以下几点切入,说一下如何使用Nuttx进行应用开发:
- Nuttx的目录结构
- 如何编译及下载到开发板上
- 如何驱动一个设备(这里写一个闪灯的例子,使用GPIO方式驱动)
- 如何在app中添加一个应用
- 如何设置app自启动
题主这里使用的开发板是从淘宝买的一个cortex-m4的开发板,芯片是STM32F407VET6。
ps. 下面要说的东西,大部分都是从Nuttx官方的文档中得到的。
1. Nuttx的目录结构
在说Nuttx目录之前,先说下如何安装Nuttx。
Nuttx的源代码托管在bitbucket上,一个类似github的代码托管网站。
nuttx从工程上,将内核和app的代码分离的开,他们的下载地址分别是:
内核:
git clone https://bitbucket.org/nuttx/nuttx.git nuttx
app:
git clone https://bitbucket.org/nuttx/apps.git apps
tools:
git clone https://bitbucket.org/nuttx/tools.git tools
推荐的目录结构是:
|
+---------+---------+
| | |
nuttx/ tools apps/
ok,nuttx最主要的两部分nuttx和apps就拿到手了。
tools里面是一些工具,例如kconfig-frontends、genromfs等,缺什么装什么即可.
题主写这边文档的时候,Nuttx最新的版本是7.25,apps最新版本是7.26.
进入到nuttx中,看一下内核的目录。
乍一看,目录结构是不是特别熟悉。
目录 | 主要功能 |
---|---|
arch | 存放不同体系结构的代码,nuttx目前包含了arm、mips、avr等 |
audio | 音频子系统 |
binfmt | 二进制格式,nuttx支持elf和nxflat |
configs | 已经配置好的bsp,里面包含了arch所有的体系结构的demo |
crypto | 一些加密算法 |
Documentation | 文档,很丰富 |
drivers | 驱动代码,常见设备驱动这里基本都有 |
fs | 文件系统相关,支持常见的vfat、nfs、romfs等,还有nuttx为flash设计的nxffs |
graphics | 图形子系统 |
include | 头文件 |
libs | nuttx的库文件 |
mm | nuttx的内存管理 |
net | nuttx实现的网络协议栈,支持ipv4和ipv6 |
sched | 调度器、线程、信号量、定时器等 |
syscall | 系统调用 |
tools | 构建用到的工具 |
wireless | 无线相关,蓝牙,ieee802154等 |
接下来的开发中,我们最常进入的几个目录依次是:configs
、arch
、drivers
下面进入到apps中,看下apps的目录结构。
可以看到apps里面集成了许多应用库,例如modbus,json等,具体目录的功能这里就不细说了。
examples
里面是一些应用的例子,你想要的这里基本都能找到。
nshlib
是nuttx自带的一个shell,操作类似linux的bash。
2. 如何配置、编译及下载到开发板上
好了,nuttx的目录结构说完了,下面说下如何去使用Nuttx。
从头去创建一个bsp,这个比较麻烦,一般的做法都是从configs中找一个别人做好的bsp。
这里我用到的bsp是stm32f4discovery
,这个bsp使用的单片机是STM32F407VGT6,与我的开发板单片机封装一样,只是FLASH差了512KB。
在使用开发板之前,肯定要看下原理图,至少要知道晶振频率、串口输出。
首先是晶振频率,开发板上是25MHz。
项目地址:
https://bitbucket.org/patacongo/nuttx/src/master/
https://github.com/apache/incubator-nuttx
No comments:
Post a Comment