NUTTX移植到STM32

STM32移植NUTTX

    • [1. Ubuntu下搭建开发环境](#1. Ubuntu下搭建开发环境)
      • [1.1 先决条件](#1.1 先决条件)
      • [1.2 下载 NuttX](#1.2 下载 NuttX)
      • [1.3 使用Make 进行编译](#1.3 使用Make 进行编译)
      • [1.4 烧录运行](#1.4 烧录运行)
    • 2.通过NUTTX点亮LED
      • [2.1 部署操作系统](#2.1 部署操作系统)
      • [2.2 修改配置文件](#2.2 修改配置文件)
      • [2.3 编译运行程序](#2.3 编译运行程序)

开发板:DshanMCUF407

官方开发文档:安装 --- NuttX latest 文档

参考文档:Nuttx学习笔记(一)-CSDN博客

1. Ubuntu下搭建开发环境

1.1 先决条件

环境: ubuntu 20.04 ,首先进行基础环境安装;

执行以下命令安装软件包:

c 复制代码
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

KConfig 前端:

c 复制代码
sudo apt install kconfig-frontends

NuttX 配置系统使用 KConfig,它通过一系列基于菜单的交互式前端(软件包的一部分)公开。

工具链:

c 复制代码
sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi

1.2 下载 NuttX

c 复制代码
mkdir nuttxspace
cd nuttxspace
git clone https://github.com/apache/nuttx.git nuttx
git clone https://github.com/apache/nuttx-apps apps
git clone https://bitbucket.org/nuttx/tools.git
cd tools/kconfig-frontends
./configure
make
sudo make install
sudo ldconfig

1.3 使用Make 进行编译

现在我们已经安装了 Apache NuttX 先决条件并下载了源代码, 我们已经准备好将源代码编译成一个可执行的二进制文件,该文件可以 在嵌入式主板上运行。

初始化配置:

第一步是初始化给定板的 NuttX 配置,基于 预先存在的配置。要列出所有支持的配置,找到自己适合的型号,可以执行以下操作:

c 复制代码
cd nuttx
./tools/configure.sh -L | less

如果找到了自己适合的型号,则可以执行以下命令:

c 复制代码
cd nuttx
./tools/configure.sh -l stm32f4discovery:nsh

然后,您可以使用基于菜单的配置系统自定义配置:

c 复制代码
cd nuttx
make menuconfig

构建NUTTX:

c 复制代码
cd nuttx
make

如果要清理之前构建的,则需要使用 以下命令:

c 复制代码
make clean
make distclean

注意: 以上操作如有报错,跟据提示安装相应软件即可。

1.4 烧录运行

在运行之前我们应提前安装 openocd 以使用STLink进行烧录:

c 复制代码
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:

c 复制代码
sudo apt-get install libusb-1.0.0-dev

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

c 复制代码
./configure --disable--werror

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

sudo make install

安装好OpenOCD后,我们需要根据操作系统,设置访问debug适配器的权限。在Linux系统上,通常会涉及etc/udev/rules.d文件夹的操作。OpenOCD会附带一个通用规则文件60-openocd.rules,位置在于OpenOCD解压后的文件夹contrib目录中。这个时候我们需要把我们的60-openocd.rules拷贝过去。

c 复制代码
sudo cp 60-openocd.rules /etc/udev/rules.d/

之后我们可以看看openocd的服务,可以输入--help来实现:

c 复制代码
Open On-Chip Debugger 0.12.0-rc1
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
Open On-Chip Debugger
Licensed under GNU GPL v2
--help       | -h	display this help
--version    | -v	display OpenOCD version
--file       | -f	use configuration file <name>
--search     | -s	dir to search for config files and scripts
--debug      | -d	set debug level to 3
             | -d<n>	set debug level to <level>
--log_output | -l	redirect log output to file <name>
--command    | -c	run <command>

如果没有输入 -f或者是-c的选项命令,OpenOCD会试图读取openocd.cfg这个配置文件。如果我们需要指定配置文件,比如我们需要部署到这个STM32F103这个板子,我们需要输入这个:

c 复制代码
openocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c init -c "reset halt" -c "program nuttx.bin exit 0x08000000"
  1. openocd:启动 OpenOCD 调试器。

  2. -f interface/stlink.cfg:指定调试器接口配置文件。

  3. -target/stm32f1x.cfg:指定目标芯片配置文件。

  4. -c init:初始化调试会话。

  5. -c "reset halt":重置并停止芯片。

  6. -c "program nuttx.bin exit 0x08000":烧录固件到芯片并退出调试会话。

访问 NuttShell:

那么这个时候我们已经将系统烧录进去了,然后我们可以打开minicom,我们终端的指令是在串口打印出来的,所以我们需要有一个USB-TTL来进行连接,然后:

c 复制代码
sudo minicom -D /dev/ttyUSB

在执行此命令前,需要提前安装 minicom:

c 复制代码
sudo apt install minicom

运行如下图所示:

2.通过NUTTX点亮LED

上一节我们介绍了如何搭建开发环境,知道了如何编译烧录程序到开发板,此节我们通过STM32F103C8T6进行实践通过NUTTX点亮LED灯。

2.1 部署操作系统

如果之前编译过,在开始之前,我们要先清除之前的构建配置:

cd nuttx
make clean
make distclean

之后选择stm32f1上部署我们的操作系统:

c 复制代码
./tools/configure.sh stm32f103-minimum/userled 

2.2 修改配置文件

然后进入menuconfig修改配置文件:

c 复制代码
make menuconfig

具体配置如下图所示:

进入Board Selection:

选择目标开发板:

然后我们退回到上一级目录下,进入到"Device Drivers"目录下:

进入到"Device Drivers"目录后,在进入"LED Support"目录:

进入"LED Support"目录后如下配置:

然后在退回到上一级,进入"Application Configuration"目录下:

进入"Application Configuration"目录后,在进入"Examaple"目录,选中"LED driver example":

接着回退到上一级目录,进入"NSH Library"目录下:

进入"NSH Library"目录后,再进入到"Disable Individual commands"目录:

进入到"Disable Individual commands"目录后,向下找到 "Disable printf",空格键取消掉选中 :

完成配置以后,保存并退出。

2.3 编译运行程序

修改完配置文件后,我们执行"make"命令,一得到nuttx.bin文件,如下图所示:

得到bin文件以后,我们就可以执行以下命令烧录到开发板:

c 复制代码
openocd -f interface/stlink.cfg -f target/stm32f1x.cfg -c init -c "reset halt" -c "program nuttx.bin exit 0x08000000"

烧录完以后,我们可以打开minicom,我们终端的指令是在串口打印出来的,所以我们需要有一个USB-TTL来进行连接,然后执行以下命令:

c 复制代码
sudo minicom -D /dev/ttyUSB0

注意: 如果不知到自己使用的哪个串口,可以执行以下命令对比接入串口前后的设别情况:

c 复制代码
ls /dev/tty*

进入串口后,我这里出现了一个名为"/dev/ttyUSB0"的端口。

运行入如下所示:

这里是输入"leds"自动执行leds的程序,LED灯开始闪烁,如需手动控制LED灯的亮灭需输入以下命令:

LED灯亮:

c 复制代码
  printf \x00 > /dev/userleds 

LED灯灭:

c 复制代码
  printf \x01 > /dev/userleds 
相关推荐
9稳1 小时前
基于单片机的小功率数控调频发射器设计
数据库·单片机·嵌入式硬件·51单片机
LaoZhangGong1231 小时前
解决“KEIL5软件模拟仿真无法打印浮点数”之问题
经验分享·单片机·嵌入式硬件·float·仿真
犹若故人归1 小时前
计算机网络、嵌入式等常见问题简答
java·网络·嵌入式硬件·计算机网络·intellij-idea
LS_learner3 小时前
Arduino IDE刷微控制器并下载对应固件的原由
嵌入式硬件
xiebingsuccess3 小时前
去耦电容理解:“耦”了什么?非要“去”了?
单片机·嵌入式硬件
就叫飞六吧3 小时前
Keil C51 与 Keil MDK(ARM-stm32?):嵌入式开发的利器
arm开发·stm32·嵌入式硬件
又熟了3 小时前
stm32新建工程
stm32·单片机·嵌入式硬件
OpenVINO生态社区4 小时前
【FPGA与单片机的区别】
单片机·嵌入式硬件·fpga开发
iFinder@5 小时前
【51单片机】01入门篇
单片机·嵌入式硬件·51单片机
通信小菜鸡@posedge clk5 小时前
FPGA实现UART对应的电路和单片机内部配合寄存器实现的电路到底有何区别?
单片机·嵌入式硬件·fpga开发