NUTTX的学习记录(nuttx例程运行,环境部署)

为什么要做这篇文章?

nuttx作为px4,小米vela等厂商使用的 rtos它具备许多优点,尤其吸引我这样的“发烧人员”的一点是他支持各种类型的嵌入式设备,并且有大量的常用驱动。这就意味着我的一套代码基本上不怎么修改就可以直接部署在不同的设备上面,但是呢他的资料实在是太少了,所以我在此记录我的学习历程,并且希望帮助那些希望学习nuttx的人们快速入门。

下面开始正文叙述

一、环境配置:(我这边使用的是ubuntu20.04)

1.使用git拉取对应的代码和工具包,我这边是直接使用的官方教程里面的文件夹路径。
mkdir nuttxspace
cd nuttxspace
git clone https://github.com/apache/nuttx.git nuttx
git clone https://github.com/apache/nuttx-apps apps

2.对环境进行配置,这些很简单就是把官网上要求的工具装一遍
sudo apt install bison flex gettext texinfo libncurses5-dev libncursesw5-dev xxd git gperf automake libtool pkg-config build-essential gperf genromfs libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev libexpat1-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux

3.安装Kconfig工具这个主要是用来对项目进行配置的,所以需要图形化配置Kconfig的支持,了解Linux开发的人应该对这个工具很熟悉
sudo apt install kconfig-frontends

我这边同时也安装了python版本的Kconfig库,无所谓可装可不装

sudo apt install python3-kconfiglib
4.安装openocd这个很重要主要是在Linux上面烧录,当然如果你用的VMware之类的虚拟机的话也可以选择用虚拟机编译然后在windows主机上用烧录软件烧录

你可以使用sudo直接安装,也可以编译安装,我这边都贴出来了(这边使用的就是韦东山文章里的步骤NUTTX移植到STM32 - 韦东山嵌入式开发者社区 (100ask.net)

sudo apt install openocd

还可以直接在网上下载压缩包,传到Ubuntu解压即可,跟据提示进行相应操作:

官网下载:OpenOCD - Open On-Chip Debugger download | SourceForge.net

解压后进入目录中,并且在终端打开:

tar -jxvf openocd-0.12.0.zip
cd openocd-0.12.0
./configure --enable-stlink

之后可以使用./configure实现这个配置。

出现问题:configure: error: libusb-1.x is required for the ST-Link Programme:

sudo apt-get install libusb-1.0.0-dev

之后我们可以执行以下命令,去掉一些无用的报错警告:

./configure --disable--werror

设置完以后进行软件安装:

sudo make install

安装好OpenOCD后,我们需要根据操作系统,设置访问debug适配器的权限。在Linux系统上,通常会涉及etc/udev/rules.d文件夹的操作。OpenOCD会附带一个通用规则文件60-openocd.rules,位置在于OpenOCD解压后的文件夹contrib目录中。这个时候我们需要把我们的60-openocd.rules拷贝过去。(下面的步骤如果不做的话,在每次烧录的时候在命令行前边加上sudo给足权限也可以,可能调试的时候稍微麻烦一点)

sudo cp 60-openocd.rules /etc/udev/rules.d/
5.安装交叉编译链
sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi
6.安装minicom 在nuttx官网上面使用的好像是picocom,无所谓都可以,我习惯用minicom所以就安装了minicom
sudo apt-get install minicom

二、STM32g4的测试

1、将nuttx代码调到跟自己的板子类似的

cd nuttxspace/nuttx
./tools/configure.sh nucleo-g431rb:nsh

2、打开menuconfig(可以不开,因为跑的例程)

make menuconfig

3.查看具体硬件配置

我这边查看了一下他开启了哪些个串口(串口2)

位置在System Type ─>STM32 Peripheral Support下面

下面这个是选择作为中断输出的串口,位置在Device Drivers → Serial Driver Support

引脚位置可以查看代码文件nuttxspace/nuttx/boards/arm/stm32/nucleo-g431kb/include/broad.h文件和/nuttxspace/nuttx/arch/arm/src/stm32/hardware/stm32g4xxr_pinmap.h文件

所以在烧录之后需要将串口模块连接到

串口模块  TX---->PA3

                RX---->PA2

4.对代码进行编译烧录同时打开minicom

终端一

cd /nuttxspace/nuttx
make
openocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c init -c "reset halt" -c "program nuttx.bin exit 0x08000000

终端二(我使用的是stlink自带串口并非ch340系列所以是虚拟串口ttyACM0)

sudo minicom -D /dev/ttyACM0

5.按下复位之后就会在串口终端出现NUTTX的nsh

Welcome to minicom 2.7.1

OPTIONS: I18n 
Compiled on Dec 23 2019, 02:06:26.
Port /dev/ttyACM0, 06:08:56

Press CTRL-A Z for help on special keys


NuttShell (NSH)
nsh> 
NuttShell (NSH)
nsh> 

6.简单测试,一切正常

nsh> ?
help usage:  help [-v] [<cmd>]

    .           cd          exit        mkrd        sleep       unset       
    [           cp          expr        mount       source      uptime      
    ?           cmp         false       mv          test        usleep      
    alias       dirname     help        printf      time        watch       
    unalias     dd          hexdump     pwd         true        xd          
    basename    dmesg       kill        rm          truncate    
    break       echo        ls          rmdir       uname       
    cat         exec        mkdir       set         umount                      
                                                                                
Builtin Apps:                                                                   
    ostest    sh        nsh                                                     
nsh> echo "helloworld                                                           
nsh: ": no matching "                                                           
nsh> echo "Hello Nuttx"    

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值