NUTTX移植到STM32

STM32移植NUTTX

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

开发板:DshanMCUF407

在这里插入图片描述

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

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

1. Ubuntu下搭建开发环境

1.1 先决条件

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

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

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 前端:

sudo apt install kconfig-frontends

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

工具链:

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

1.2 下载 NuttX

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 配置,基于 预先存在的配置。要列出所有支持的配置,找到自己适合的型号,可以执行以下操作:

cd nuttx
./tools/configure.sh -L | less

在这里插入图片描述

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

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

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

cd nuttx
make menuconfig

构建NUTTX:

cd nuttx
make

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

make clean
make distclean

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

1.4 烧录运行

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

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 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, readhttp://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这个板子,我们需要输入这个:

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来进行连接,然后:

sudo minicom -D /dev/ttyUSB

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

sudo apt install minicom

运行如下图所示:

在这里插入图片描述

2.通过NUTTX点亮LED

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

2.1 部署操作系统

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

cd nuttx
make clean
make distclean

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

./tools/configure.sh stm32f103-minimum/userled 

2.2 修改配置文件

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

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文件以后,我们就可以执行以下命令烧录到开发板:

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

在这里插入图片描述

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

sudo minicom -D /dev/ttyUSB0

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

ls /dev/tty*

在这里插入图片描述

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

运行入如下所示:

在这里插入图片描述

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

  printf \x00 > /dev/userleds 

LED灯灭:

  printf \x01 > /dev/userleds 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/503344.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MITRE ATTCK 简介:初学者指南

网络安全已成为当今数字世界的一个关键问题。随着网络威胁日益复杂&#xff0c;组织需要一种结构化的方法来理解和应对这些风险。这就是 MITRE ATT&CK 框架发挥作用的地方。如果您是网络安全新手或刚刚开始探索威胁分析和缓解&#xff0c;本指南将为 MITRE ATT&CK 提供…

JAVA创建绘图板JAVA构建主窗口鼠标拖动来绘制线条

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…

鸿蒙 ArkUI实现地图找房效果

常用的地图找房功能&#xff0c;是在地图上添加区域、商圈、房源等一些自定义 marker&#xff0c;然后配上自己应用的一些筛选逻辑构成&#xff0c;在这里使用鸿蒙 ArkUI 简单实现下怎么添加区域/商圈、房源等 Marker. 1、开启地图服务 在华为开发者官网&#xff0c;注册应用&…

AI Development Notes 1 - introduction with the OpenAI API Development

Official document&#xff1a;https://platform.openai.com/docs/api-reference/chat/create 1. Use APIfox to call APIs 2.Use PyCharm to call APIs 2.1-1 WIN OS.Configure the Enviorment variable #HK代理环境&#xff0c;不需要科学上网(价格便宜、有安全风险&#…

ComfyUI节点安装笔记

AI高速发展&#xff0c;版本更新相当快&#xff08;11月25日才安装的版本v.0.3.4&#xff0c;27日版本就已经更新到v.0.3.5了&#xff09;&#xff0c;在遇到问题&#xff0c;找到问题原因所在的过程中&#xff0c;ComfyUI版本、python版本、节点对环境版本的依赖&#xff0c;本…

小白学Pytorch

小白学Pytorch 发现一个比较好的教程&#xff0c;对于自己来说比较合适&#xff0c;适合从零开始的教程。 1、搭建一个简单的网络 https://www.cnblogs.com/PythonLearner/p/13587092.html 搭建网络这步说的比较清楚&#xff1a; 我们使用nn包中的Sequential搭建网络&#…

如何查看服务器上的MySQL/Redis等系统服务状态和列表

如果呢你知道系统服务名称&#xff0c;要看状态很简单&#xff1a; systemctl status server-name 比如 systemctl status nginxsystemctl status redis # 等 这是一个nginx的示例&#xff1a; 那问题是 当你不知道服务名称时该怎么办。举个例子&#xff0c;比如mysql在启动…

ubuntu开机启动服务

需求背景&#xff1a; 需要监控日志&#xff0c;每次都是手动启动 nohup ./prometheus >/dev/null & nohub ./node_exporter >/dev/null & 需求目标&#xff1a; 重启后系统自动启动服务

路由组件与一般组件的区别

路由组件与一般组件的区别 1. 基本概念 1.1 路由组件 路由组件是指通过路由规则映射的组件&#xff0c;通常放在 pages 或 views 文件夹中。 1.2 一般组件 一般组件是指通过 import 导入后直接使用的组件&#xff0c;通常放在 components 文件夹中。 2. 主要区别 2.1 存…

Qt天气预报系统设计界面布局第四部分右边

Qt天气预报系统 1、第四部分右边的第一部分1.1添加控件 2、第四部分右边的第二部分2.1添加控件 3、第四部分右边的第三部分3.1添加控件3.2修改控件名字 1、第四部分右边的第一部分 1.1添加控件 拖入一个widget&#xff0c;改名为widget04r作为第四部分的右边 往widget04r再拖…

数据库系统概论期末复习

期末考试题型&#xff1a; 选择题 20题 20分 判断题 10题 10分 简答题 4题 20分 SQL语句&#xff1a; &#xff08;select delete update&#xff09;30分 设计题&#xff1a;ER图 和关系模式 ER转关系模式&#xff0c;注意主码&#xff0c;外码的标注 15分 应用题&#xff1a;…

uni-app 页面生命周期及组件生命周期汇总(Vue2、Vue3)

文章目录 一、前言&#x1f343;二、页面生命周期三、Vue2 页面及组件生命周期流程图四、Vue3 页面及组件生命周期流程图4.1 页面加载时序介绍4.2 页面加载常见问题4.3 onShow 和 onHide4.4 onInit4.5 onLoad4.6 onReachBottom4.7 onPageScroll4.8 onBackPress4.9 onTabItemTap…

微信小程序中 “页面” 和 “非页面” 的区别

微信小程序中 “页面” 和 “非页面” 的区别&#xff0c;并用表格进行对比。 核心概念&#xff1a; 页面 (Page)&#xff1a; 页面是微信小程序中用户可以直接交互的视图层&#xff0c;也是小程序的基本组成部分。每个页面都有自己的 WXML 结构、WXSS 样式和 JavaScript 逻辑…

【Linux】传输层协议UDP

目录 再谈端口号 端口号范围划分 UDP协议 UDP协议端格式 UDP的特点 UDP的缓冲区 UDP注意事项 进一步深刻理解 再谈端口号 在上图中&#xff0c;有两个客户端A和B&#xff0c;客户端A打开了两个浏览器&#xff0c;这两个客户端都访问同一个服务器&#xff0c;都访问服务…

大数据架构演变

一、离线数仓 缺点&#xff1a; ETL计算、存储、时间成本高数据处理链路过长无法支持实时、近实时的数据分析数据采集对业务库造成影响 二、Lambda架构&#xff0c;离线实时分开 缺点&#xff1a; 组件多&#xff0c;不方便管理很难保证数据一致数据探查困难&#xff0c;出现…

进程间通讯

简介&#xff1a; 进程间通讯方式有&#xff1a; 1.内存映射&#xff08;mmap&#xff09;&#xff1a; 使用mmap函数将磁盘空间映射到内存 2.管道 3.信号 4.套接字&#xff08;socket&#xff09; 5.信号机制 通过进程中kill函数&#xff0c;去给另一个函数发送信号&a…

毕业项目推荐:基于yolov8/yolov5的行人检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

[桌面运维]windows自动设置浅深色主题

设置自动浅色/深色主题 我看很多up主的教程过于繁琐&#xff0c;需要添加四个功能&#xff0c;并且有些还不能生效&#xff01; 大多数都是教程&#xff1a; 自动任务栏浅色 add HKCUSOFTWAREMicrosoftWindowsCurrentVersionThemesPersonalize/v SystemUsesLightTheme /t …

LQ quarter 5th

目录 B. 开赛主题曲 C. BlueAI E. 精准难度 B. 开赛主题曲 &#xff08;1&#xff09;两层循环枚举所有子串。第一层子串长度&#xff0c;第二层子串起点 &#xff08;2&#xff09;判子串是否合法还要一个 for&#xff0c;26 * 26 * 2e5 快要超时&#xff0c;因此计算每个字母…

Directx12 chapter4

官方的初始化需要的组件 Initialize 初始化涉及到首次设置全局变量和类&#xff0c;initialize 函数必须准备管道和资产。 初始化管道。 启用调试层。创建设备。创建命令队列。创建交换链。创建渲染器目标视图 (RTV) 描述符堆。 备注 可将描述符堆视为描述符的数组。 其中…