IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Nuttx学习笔记(二)————在STM32上部署Nuttx系统 -> 正文阅读

[嵌入式]Nuttx学习笔记(二)————在STM32上部署Nuttx系统

目录

一、平台配置

二、在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 <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这个配置文件。如果我们需要指定配置文件,比如我们需要部署到这个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 <下载的目标bin> <flash烧写起始地址>		配置下载源文件
-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

这样子就成功部署啦!!?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:42:58  更:2022-11-05 00:44:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 2:47:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计