Total Pageviews

Tuesday 6 April 2021

使用嵌入式操作系统nuttx

 之所以选择Nuttx作为操作系统,一是因为Nuttx提供的接口支持Posix,大部分Linux上的应用程序都可以移植过来,对于比较复杂的应用,这点是极好的;二是Nuttx支持动态加载程序,也就是说Nuttx可以在线进行应用的升级。

这篇文章从以下几点切入,说一下如何使用Nuttx进行应用开发:

  1. Nuttx的目录结构
  2. 如何编译及下载到开发板上
  3. 如何驱动一个设备(这里写一个闪灯的例子,使用GPIO方式驱动)
  4. 如何在app中添加一个应用
  5. 如何设置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头文件
libsnuttx的库文件
mmnuttx的内存管理
netnuttx实现的网络协议栈,支持ipv4和ipv6
sched调度器、线程、信号量、定时器等
syscall系统调用
tools构建用到的工具
wireless无线相关,蓝牙,ieee802154等

接下来的开发中,我们最常进入的几个目录依次是:configsarchdrivers

下面进入到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