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.mzph.cn/bicheng/67750.shtml

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

相关文章

【微服务】4、服务保护

微服务架构与组件介绍 单体架构拆分&#xff1a;黑马商城早期为单体架构&#xff0c;后拆分为微服务架构。跨服务调用与组件使用 服务拆分后存在跨服务远程调用&#xff0c;如下单需查询商品信息&#xff0c;使用openfeign组件解决。服务间调用关系复杂&#xff0c;需维护服务…

【网络安全 | 漏洞挖掘】通过模拟功能实现提权(Bugcrowd)

未经许可,不得转载。 我将与大家分享我在 Bugcrowd 的某个项目中发现的一个漏洞,该项目中有一个“用户模拟”功能。 什么是用户模拟? 用户模拟允许管理员在不知晓用户凭据的情况下“以用户身份登录”。这种功能常见于管理员需要调试问题、审查用户权限或解决投诉的平台中。…

安装MySQL的五种方法(Linux系统和Windows系统)

一.在Linux系统中安装MySQL 第一种方法:在线YUM仓库 首先打开MySQL官网首页 www.mysql.com 找到【DOWNLOADS】选项&#xff0c;点击 下拉&#xff0c;找到 【MySQL Community(GPL) Downloads】 在社区版下载页面中&#xff0c;【 MySQL Yum Repository 】链接为在线仓库安装…

【Spring Boot 应用开发】-01 初识

特性 Spring Boot 是由 Pivotal 团队提供的全新框架&#xff0c;其设计目的是帮助开发者快速创建独立的、生产级的基于 Spring 框架的应用程序。以下是 Spring Boot 的一些主要特点&#xff1a; 简化配置&#xff1a;Spring Boot 提供了自动配置机制&#xff0c;能够根据类路径…

AR 眼镜之-拍照/录像动效切换-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 拍照/录像动效切换 1. &#x1f531; 技术方案 1.1 技术方案概述 1.2 实现方案 1&#xff09;第一阶段动效 2&#xff09;第二阶段动效 2. &#x1f4a0; 默认代码配置 2.1 XML 初始布局 2.2 监听滑动对 View 改变 3. ⚛️…

django解决跨域问题

# 1.安装django-cors-headers 库 pip install django-cors-headers -i https://pypi.tuna.tsinghua.edu.cn/simple2.添加到应用程序中 添加 corsheaders 到你的 INSTALLED_APPS 设置中&#xff1a; INSTALLED_APPS [...corsheaders,... ]3.添加中间件 MIDDLEWARE [...cor…

Ubuntu Bash工具

Ubuntu Bash工具 &#x1f4bb;⚡ Ubuntu Bash 工具&#x1f528; 指令列表1. &#x1f50b; 查看电池信息 (-b)2. &#x1f4bb; 查看 CPU 和内存使用情况 (-m)3. &#x1f504; 旋转屏幕 (-r)4. &#x1f513; 解锁屏幕 (-s)5. &#x1f310; 设置代理 (-p <proxy_url>…

【GoLang】两个字符串如何比较大小?以及字典顺序的比较规则

在 Go 语言中&#xff0c;字符串的比较是基于字典顺序进行的。 字典顺序的比较规则&#xff1a; 比较两个字符串从左到右逐个字符的Unicode码点值&#xff0c; 若比较结果不相等则将此结果作为字符串大小的结果&#xff0c; 若比较结果相等则比较下一位&#xff0c; 若其中一个…

《机器学习》——贝叶斯算法

贝叶斯简介 贝叶斯公式&#xff0c;又称贝叶斯定理、贝叶斯法则&#xff0c;最初是用来描述两个事件的条件概率间的关系的公式&#xff0c;后来被人们发现具有很深刻的实际意义和应用价值。该公式的实际内涵是&#xff0c;支持某项属性的事件发生得愈多&#xff0c;则该属性成…

matlab离线安装硬件支持包

MATLAB 硬件支持包离线安装 本文章提供matlab硬件支持包离线安装教程&#xff0c;因为我的matlab安装的某种原因&#xff08;破解&#xff09;&#xff0c;不支持硬件支持包的安装&#xff0c;相信也有很多相同情况的朋友&#xff0c;所以记录一下我是如何离线安装的&#xff…

Infineon PSoC 4 CapSense ModusToolbox IDE - 系统生态篇

本文档说明了 ModusToolbox 软体环境的 4 个层面&#xff0c;该环境为 CapSense 设备和生态系统提供支援。本文是 Infineon PSoC 4 CapSense ModusToolbox IDE-系统介绍的延伸篇 (Infineon PSoC 4 CapSense ModusToolbox IDE -系统介绍篇 - 大大通(简体站))。 什么是ModusToolb…

使用PVE快速创建虚拟机集群并搭建docker环境

安装Linux系统 这里以安装龙蜥操作系统AnolisOS8.9为例加以说明。 通过PVE后台上传操作系统ISO镜像。 然后在PVE上【创建虚拟机】&#xff0c;选定上传的龙蜥操作系统镜像进行系统安装。 注意&#xff1a;在安装过程中&#xff0c;要设定语言、时区、超管用户root的密码、普…

ElasticSearch内存占用率过高怎么办?

文章目录 1&#xff0c;先用top看看各个进程的内存占用情况2&#xff0c;不能简单的杀死进程&#xff0c;然后再重启。3&#xff0c;查看一下ElasticSearch进程的具体启动情况4&#xff0c;修改Elasticsearch 的Java堆内存 1&#xff0c;先用top看看各个进程的内存占用情况 先…

OpenHarmony AVScreenCaptureRecorder录屏开发指导

一、简介 OpenHarmony 5.0新增了AVScreenCaptureRecorder ArkTs API。用户可以调用录屏AVScreenCaptureRecorder API录制屏幕&#xff0c;采集音频源数据&#xff0c;获取封装后的音视频文件&#xff0c;然后通过文件的形式流转到其他模块进行播放或处理&#xff0c;用于以文件…

【Spring】构造方法注入 属性加final

在Spring框架中&#xff0c;构造方法注入是一种常见的依赖注入方式。通过构造方法注入&#xff0c;Spring容器会在创建Bean时自动调用相应的构造方法&#xff0c;并将所需的依赖作为参数传入。关于构造方法注入时属性是否加final关键字&#xff0c;主要有以下几点区别&#xff…

一.MySQL程序简介

整体介绍 1.服务端mysqld(可执行文件) mysqld --verbose --help 2.客户端mysql(可执行文件) 3.其它工具包程序

G1垃圾回收器的FullGC

如何确定GarbageFirst回收器发生的是FullGC ? 必须出现FullGC字样才算是FUllGC&#xff0c;例如下图&#xff1a;因为内存分配失败&#xff08;Allocation Failure&#xff09;导致 如果不出现FullGC的字样说明它不是FUllGC&#xff0c;并不像Serial GC、ParallelGC的在老年代…

Sql 创建用户

Sql server 创建用户 Sql server 创建用户SQL MI 创建用户修改其他用户密码 Sql server 创建用户 在对应的数据库执行&#xff0c;该用户得到该库的所有权限 test.database.chinacloudapi.cn DB–01 DB–02 创建服务器登录用户 CREATE LOGIN test WITH PASSWORD zDgXI7rsafkak…

腾讯云AI代码助手编程挑战赛-武器大师

作品简介 对话过程能够介绍二战 各种武器 冷战 武器 现代的 各种武器装备&#xff0c;陆海空三军都知道。 技术架构 使用全后端分离的架构&#xff0c;前端使用Vue脚手架&#xff0c;腾讯云修改样式css 开发环境、开发流程 系统&#xff1a;win11 开发工具&#xff1a;VS…

Maven核心插件之maven-resources-plugin

前言 Maven 插件是 Maven 构建系统的重要组成部分&#xff0c;它们为 Maven 提供了丰富的功能和扩展能力&#xff0c;使得 Maven 不仅是一个构建工具&#xff0c;更是一个强大的项目管理平台。在 Maven 项目中&#xff0c;插件的使用通常通过配置 pom.xml 文件来完成。每个插件…