Nuttx学习笔记(二) 您所在的位置:网站首页 openocd烧录stm32 Nuttx学习笔记(二)

Nuttx学习笔记(二)

2024-06-28 02:55| 来源: 网络整理| 查看: 265

目录

一、平台配置

二、在ubuntu下使用串口来烧录至目标文件至STM32F07

(一)ubuntu下stm32flash工具下载

(二)Ubuntu20.04安装stm32开发环境

(三)将nuttx.bin文件烧录进stm32

三、ubuntu下使用OpenOCD进行烧录nuttx系统

(一)什么是OpenOCD(Open On-Chip Debugger)

(二)安装OpenOCD

(三)运行

(四)使用OpenOCD烧录nuttx.bin

一、平台配置

在这里选择的芯片为STM32F407ZGT6,于是我们在nuttx的支持平台中选择:stm32f4discovery。前面的文章是在虚拟器上跑的,这个时候我们需要部署到真正的嵌入式平台上,首先我们需要对已经配置的系统进行:

make clean make distclean

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

./tools/configure.sh -l stm32f4discovery:nsh

-l表示告诉用户是在Linux上构建的。构建的时候可以看到我们stm32的库文件,已经被包括进去了:

之后输入make开始编译。编译后我们可以看到下面的提示,这个时候已经生成了相应的文件:

 

那么接下来是要将这个nuttx.bin文件烧录进去我们的板子中。

二、在ubuntu下使用串口来烧录至目标文件至STM32F07 (一)ubuntu下stm32flash工具下载

GitHub:https://github.com/ARMinARM/stm32flash

这个工具的作用如下:

在nuttxspace下新建一个stm32flash文件夹,将GitHub上面的代码clone下来:

git clone https://github.com/ARMinARM/stm32flash.git

之后在当前目录下进行编译:make -j4。

出现错误:

打开i2c.c文件中,加入这句: 

#define I2C_FUNC_I2C I2C_FUNCS

 

之后即可编译成功:

 

执行命令安装stm32flash:

sudo make install

 安装成功提示:

这个工具的用法可以输入./stm32flash -h进行查阅。

 

获取设备信息:

./stm32flash /dev/ttyS0 (二)Ubuntu20.04安装stm32开发环境

安装gcc-arm-nano-eabi

这一步是要安装运行在x86平台的gcc编译器,而这个编译器编译出的代码是要在ARM平台(stm32)上跑的,因此这种编译器被我们称之为交叉编译器。

那么首先我们要进入官网:Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer下载对应的交叉编译器:

解压并且重命名为gcc-arm-none-eabi,并且从终端进入查看文件夹内容,可以看看bin的内容:

 

之后我们将我们的bin路径添加到环境变量中:

gedit ~/.bashrc #添加到最后 export PATH=$PATH:/home/zhengxiting/gcc-arm-none-eabi/gcc-arm-none-eabi-10.3-2021.10/bin source ~/.bashrc

之后重启终端,如果输入arm-none-并按下两次Tab键并且能自动补齐,那么则说明环境变量添加成功:

上面是安装交叉编译器的一种方法,其实也可以简单粗暴的进行:

sudo apt-get install gcc-arm-none-eabi

下面是安装其他的一些依赖

sudo apt-get install gcc sudo apt-get install make sudo apt-get install openocd  软件安装

所需软件有:STM32CubeMX、VSCode、GNU Arm Embedded Toolchain、Mingw-w64。

进入STM32CubeMX官网进行下载:my.st.com

那么具体的安装网上有很多。

安装VSCode:Download Visual Studio Code - Mac, Linux, Windows

下载后执行:

sudo dpkg -i code_1.69.2-1658162013_amd64.deb

需要安装的插件:

(三)将nuttx.bin文件烧录进stm32

烧录之前首先得看看开发板的数据手册,将其进入系统烧录模式,STM32具有三种启动模式:

BOOT1 = x,BOOT0 = 0,芯片内置flash,即主存储器Flash。SRAM:BOOT1 = 1,BOOT0 = 1,芯片内置的SRAM区,也就是内存。系统存储器:BOOT1 = 0,BOOT0 = 1,芯片内部的一块特定的区域,叫做系统存储器。

可以执行如下命令得知stm32的状态,使用USB-TTL设备连接并进行镜像烧录,执行:

sudo stm32flash /dev/ttyUSB0

出现报错:

stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Failed to init device.

这个问题网上说只要boot键设置得对,再复位一下就可以了。

之后使用如下命令烧录文件:

sudo stm32flash -w nuttx.bin -v -g 0 /dev/ttyUSB0

即可将操作系统烧录进去。之后将Boot0以及Boot1全部置为0,然后重新上电,之后使用串口登陆stm32:

sudo apt install minicom sudo minicom -D /dev/ttyUSB0 三、ubuntu下使用OpenOCD进行烧录nuttx系统

在当前的快发环境下,嵌入式工程师都会十分熟悉自己项目使用到的调试器还有调试软件,比较熟悉的有JTAG、SWD、CMSIS-DAP等,那么这些东西的工作原理是什么,可能未必都是清楚的,那么就首先进入什么是OpenOCD这一栏吧:

(一)什么是OpenOCD(Open On-Chip Debugger)

OpenOCD是一款开源软件,他的功能是在仿真器的辅助下完成的,仿真器是能够提供调试目标的电信号的小型硬件单元。仿真器也是必须的,因为调试主机(运行OpenOCD的主机)通常不具备这种电信号的直接解析功能。(这个仿真器也就是我们一直使用的J-Link等设备)。

仿真器支持一个或多个传输协议,每个协议涉及不同的电信号,且使用不同的协议栈进行消息传输。它有时候也会被封装成独立的加密狗,称为硬件加密狗。一些开发板上面直接集成了硬件接口加密狗,这样可以使开发板通过USB直接连到主机上进行调试。

那么JTAG与SWD有什么区别?

JTAG支持仿真器支持JTAG信号,可以用来进行TAPs和目标板子之间符合JTAG协议的通讯。TAP是处理特殊指令和数据的单元。JTAG支持调试和边界扫描。

SWD信号支持与一些比较新的ARM芯片进行通讯,而且还可以作为同时支持JTAG和SWD的芯片的仿真器。不过SWD支持调试,不支持边检扫描。

对于一些芯片,还有专门的编程下载器,这些下载器仅支持擦写flash的功能,不支持调试和边界扫描。对于此类专用下载器,OpenOCD并不支持。

(二)安装OpenOCD

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

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

tar -jxvf openocd-0.12.0-rc1.tar.bz2 cd openocd-0.12.0-rc1 ./configure -h

因为我是用的是stlink所以我需要这么实现:

./configure --enable-stlink

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

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

sudo apt-get install libusb-1.0.0-dev

之后就可以看到:

在这里需要注意的是,OpenOCD可以使用gcc和clang两个编译器进行编译,但这个OpenOCD有个bug,需要忽略warning,我们再进行设置一下:

./configure --disable--werror

 设置完后进行make。运行软件安装,默认路径为/usr/local/share:

sudo make install

之后执行openocd -v看看有没有安装成功:

如果后续需要卸载openocd,那么我们需要执行:make uninstall。

(三)运行

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

sudo cp 60-openocd.rules /etc/udev/rules.d/

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

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 --search | -s dir to search for config files and scripts --debug | -d set debug level to 3 | -d set debug level to --log_output | -l redirect log output to file --command | -c run

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

openocd -f interface/jlink.cfg -c 'transport select swd' -f target/stm32f4x.cfg

其他命令可以在该文件夹的README中查看。

使用lsusb命令进行查看当前使用的端口以及型号Bus 002 Device 015: ID 1366:0105 SEGGER J-Link。会打印这样的debug信息:

(四)使用OpenOCD烧录nuttx.bin

首先熟悉一下OpenOCD的指令:

-f interface/jlink.cfg 配置下载工具 -c init 初始化 -c halt 目标芯片挂起,停机 -c flash write_image erase 配置下载源文件 -c reset 复位

 那么我们进入nuttx文件中,执行如下:

openocd -f interface/jlink.cfg -c 'transport select swd' -f target/stm32f4x.cfg -c "program nuttx.bin exit 0x08000000"

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

sudo minicom -D /dev/ttyUSB

这样子就成功部署啦!! 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有