Nuttx学习入门

news2024/12/24 3:18:40

Nuttx学习

NuttX 是一个实时操作系统 (RTOS),强调标准合规性和占用空间小。可从 8 位扩展到 64 位微控制器环境,NuttX 中的主要管理标准是 POSIX 和 ANSI 标准。

NuttX 的主要环境依赖性是 (1) GNU make,(2) bash 脚本,和 (3) Linux 实用程序(例如 cat、sed 等)。

1. 安装依赖项

sudo apt install \
bison flex gettext texinfo libncurses5-dev libncursesw5-dev \
gperf automake libtool pkg-config build-essential gperf genromfs \
libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev \
libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux
sudo apt install \
bison flex gettext texinfo libncurses5-dev libncursesw5-dev \
gperf automake libtool pkg-config build-essential \
libexpat-dev gcc-multilib g++-multilib picocom \
libssl-dev

2. KConfig前端

NuttX 配置系统使用KConfig,它通过一系列基于交互式菜单的前端公开,是kconfig-frontends包的一部分。

git clone https://bitbucket.org/nuttx/tools.git
$ cd tools/kconfig-frontends
$ # on Linux do the following:
$ ./configure --enable-mconf --disable-nconf --disable-gconf --disable-qconf
$ make
$ make install

configure完正确的输出如下:

  CC       libs/parser/libs_parser_libkconfig_parser_la-yconf.lo
  CCLD     libs/parser/libkconfig-parser.la
  CC       frontends/conf/frontends_conf_kconfig_conf-conf.o
  CCLD     frontends/conf/kconfig-conf
  CC       frontends/mconf/frontends_mconf_kconfig_mconf-mconf.o
  CCLD     frontends/mconf/kconfig-mconf
  CC       utils/utils_kconfig_gettext-gettext.o
  CCLD     utils/kconfig-gettext
  GEN      frontends/kconfig
  GEN      utils/kconfig-tweak

3. 下载NuttX

Apache NuttX 在 GitHub上,有两个主要的库,nuttx和apps,后者在技术上是可选的(但建议使用完整的功能集)

mkdir nuttxspace
cd nuttxspace
git clone https://github.com/apache/nuttx.git nuttx
git clone https://github.com/apache/nuttx-apps apps

4. 编译

4.1 初始化配置

列出所有支持的配置,您可以执行以下操作:

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

teensy-2.0:usbmsc
teensy-2.0:nsh
teensy-2.0:hello
arduino-mega2560:nsh
arduino-mega2560:hello

#:nsh
要选择配置,请将选项传递给并指明您的主机平台。
例如:: configure.sh

4.2 选择配置

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

-l表明我们在 Linux 上使用,选择完配置之后,就会在source root目录生成.config文件,删掉这个文件,重新执行命令,就可以再生成一次。

同时,选择配置后会生成Make.def的符号链接,指向选择的Make.def文件,

然后,可以使用menuconfig自定义此配置:

cd nuttx
make menuconfig

在这里插入图片描述

4.3 构建NuttX

cd nuttx
make

nuttx构建将通过在目录内生成二进制输出来完成。通常这包括nuttx ELF 文件(适用于使用调试gdb)和一个nuttx.bin 可以flash的文件。
在这里插入图片描述

4.4 NuttShell(NSH)

NuttShell 是 NuttX 中使用的一个非常完整的 shell 系统,类似于 bash 和其他类似的选项。在 NSH 提示符下输入 help 命令以查看实际可用的命令。

访问NuttShell

picocom -b 115200 /dev/ttyUSB0

或者:

gtkterm -s 115200 -p /dev/ttyUSB0

5. 模拟器

Apache NuttX 有一个模拟器,可以在 Linux、Mac 和 Windows 计算机上作为常规程序运行。它可用于调试与特定设备驱动程序无关的操作系统功能,例如 TCP/IP 堆栈本身、应用程序的 Web 界面或 API,或其他通信协议。

5.1 配置模拟器

使用sim:nsh基本的 NuttX Shell 配置

cd nuttx
./tools/configure.sh sim:nsh
make

5.2 运行模拟器

./nuttx
login: admin
password: <Administrator>
User Logged-in!

修改模拟器默认用户名密码:Application Configration ‣Nsh Library ‣ Cosole login:

在这里插入图片描述

修改后:

$ ./nuttx 
login: admin
password: <admin>
User Logged-in!
nsh> hello
Hello, World!!
nsh> poweroff

6. 调试

NuttX 具有强大的系统日志记录工具 (syslog),具有info、warn和error级别。您可以使用menuconfig系统为子系统或功能的构建启用调试。

调试选项配置在Build Setup ‣ Debug Options下:

  • Enable Debug Features,此项将打开子系统级调试选项。
  • Enable Error Output,这只会产生错误信息输出。
  • Enable Warnings Output,这将产生警告和错误信息输出。
  • Enable Informational Debug Output,这将产生info,warn和error级别信息输出。

[图片]

7. 目录结构

nuttx/arch

  • 该目录包含多个子目录,每个子目录包含特定于体系结构的逻辑。将 NuttX 移植到新处理器的任务包括在arch/ 包含特定于新架构的逻辑下添加一个新的子目录。

nuttx/binfmt

  • binfmt/子目录包含将文件系统中的二进制文件以可用于执行它们的形式加载到内存中的逻辑。

nuttx/audio

  • audio/子目录包含 NuttX 音频子系统

nuttx/boards

  • boards/子目录包含每个板的自定义逻辑和板配置数据。
  • board板特定配置子目录
  • < boards/arch-name> / //configs
  • 如:boards/arm/stm32/nucleo-f103rb/configs

nuttx/crypto

  • crypto子目录包含 NuttX 加密子系统。

nuttx/drivers

  • crypto子目录包含与体系结构无关的设备驱动程序。

nuttx/fs

  • fs子该目录包含 NuttX 文件系统。

nuttx/graphics

  • graphics子目录包含 NuttX 下的图形/视频支持文件。

nuttx/include

  • 目录包含 NuttX 头文件。

nuttx

  • 这几乎是一个空的目录,用于存放生成的静态库。

nuttx/libs/libc

  • 目录包含一组标准的类 libc 函数,带有 NuttX 的自定义接口。

nuttx/mm

  • 这是 NuttX 内存管理器。

nuttx/net

  • 该目录包含 NuttX 网络层的实现,包括内部套接字 API。

nuttx/sched

  • 构成 NuttX RTOS 核心的文件位于此处。

nuttx/syscall

  • 该目录包含一个系统调用接口,可用于用户模式应用程序和内核模式 RTOS 之间的通信。

nuttx/tools

  • 该目录包含一组工具和脚本,用于简化配置、构建和维护 NuttX。

nuttx/wireless

  • 该目录包含对独立于硬件的无线支持的支持。

nuttx/Makefile

  • Makefile目录中的顶层$(TOPDIR)包含构建 NuttX 的所有顶层控制逻辑。

参考

  • 入门
    • https://nuttx.apache.org/docs/latest/quickstart/index.html
  • 模拟器
    • https://nuttx.apache.org/docs/latest/guides/simulator.html

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

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

相关文章

第三十四章 数论——高斯消元解线性方程组

第三十四章 数论——高斯消元解线性方程组一、高斯消元1、线性方程组2、高斯消元步骤&#xff08;1&#xff09;数学知识铺垫增广矩阵和阶梯矩阵初等变换&#xff08;2&#xff09;高斯消元步骤二、代码模板1、问题&#xff1a;2、代码一、高斯消元 1、线性方程组 我们在小学…

P3884 [JLOI2009]二叉树问题

题目 如下图所示的一棵二叉树的深度、宽度及结点间距离分别为&#xff1a; 深度&#xff1a;44宽度&#xff1a;44结点 8 和 6 之间的距离&#xff1a;88结点 7 和 6 之间的距离&#xff1a;33 其中宽度表示二叉树上同一层最多的结点个数&#xff0c;节点 u, vu,v 之间的距离…

算法工程师需要学习的基础

文章目录应该早点系统地了解算法工程师需要学习的东西的&#xff0c;B站上的up主&#xff1a;梁唐讲的很好&#xff0c;大家可以去看一下&#xff0c;只截了一部分图做一个记录

MySQL5.7 多主一从(多源复制)同步配置

主从复制有如下一些优势&#xff1a; 分担负载&#xff1a;对业务进行读写分离&#xff0c;减轻主库I/O负载&#xff0c;将部分压力分担到从库上&#xff0c;缩短客户查询响应时间。 增加健壮性&#xff1a;在主库出现问题时&#xff0c;可通过多种方案将从库设置为主库&#…

100%全国产龙芯2K1000设计方案

国产工业处理器&#xff0c;龙芯2K1000主板&#xff0c;100%全国产化方案 可实现100%国产元器件方案&#xff0c;国产处理器 信迈2k1000开发板采用龙芯 2k1000处理器&#xff0c;处理器集成 2 个 GS264 处理器核&#xff0c;主频 1GHz&#xff0c;64 位 DDR3 控制器&#xff…

Vue与VueComponent的内置关系

上一节讲到了 Vue.extend 与 VueComponent 的区别&#xff0c;这一节讲一讲 Vue 与 VueComponent的内置关系。 原型与原型链 这里需要用到原型与原型链中的知识点&#xff0c;具体文章链接在这里。js中的原型与原型链 这里只需要理解一个点&#xff0c;那就是构造函数的protot…

【idea2022.3】安装教程2022-12

教程目录教程简介所需环境和版本软件下载执行过程安装激活开始使用前的配置结束语教程简介 换电脑了&#xff0c;又经历了一遍软件和环境的安装&#xff0c;已经安装好了jdk和对应版本的maven&#xff0c;所以接下来该安装idea等软件了 所需环境和版本 系统&#xff1a;win1…

软件测试人员30K的月薪,是个什么段位?

大家可以参照BAT等一线大厂的职级&#xff0c;一般是高级测试工程师和资深测试开发工程师的职位&#xff0c;下面是在字节跳动年薪40W的测试工程师 掌握的技能树主要包含哪个方面&#xff1f; 现在的行情&#xff0c;大家想要拿到30k这个薪资&#xff0c;不妨审视自己&#xf…

跨平台备份工具Duplicati

本文软件得到了网友 冷心 的推荐&#xff1b; 什么是 Duplicati &#xff1f; Duplicati 是一个免费的开源备份客户端&#xff0c;可将加密的、增量的、压缩的备份安全地存储在云存储服务和远程文件服务器上。支持 Amazon S3、IDrive e2、Backblaze (B2)、Box、Dropbox、FTP、G…

【Flask框架】——27 SQLAlchemy高级

1、排序 order_by方法排序&#xff1a;可以指定根据模型中某个属性进行排序&#xff0c;"模型名.属性名.desc()"代表的是降序排序。 # 根据年龄降序 lst session.query(Student).order_by(Student.age.desc()).all() # 根据年龄升序 lst session.query(Student).…

WinNTSetup V5.3.0 Bata5 单文件版

前言 WinNTSetup 是一款Windows系统硬盘安装器&#xff0c;支持从PE和本地安装系统&#xff0c;支持支持NT内核的系统。 WinNTSetup 包括XP、Win7、Win8、Win8.1、Win10等这些系统。直接从硬盘安装系统&#xff0c;不需要光盘。WinNTSetup 还附加一些系统优化功能&#xff0…

Android---简易的底部导航栏

目录 一、activity_main.xml布局 二、给ViewPager2 创建适配器 三、ViewPager2 数据源 四、MainActivity.java类 1、初始化数据源。 2、ViewPager2 页面改变监听 3、BottomNavigationView 的每个 item 点击的监听 这里简单演示实现效果&#xff0c;实现快速开发&#xff…

mmdetection从入门到精通(一)-汇总目录

&#xff11;.简介 MMDetection 是商汤出品的集成了目标检测&#xff0f;实例分割分割&#xff0f;全景分割几个方面顶级模型组合的,模块化的&#xff0c;基于 PyTorch 的目标检测开源工具箱。是深度学习工作者的必备工具&#xff0c;非常有必要深入掌握。 近期汇总一下从入…

今年最后一场官方活动

阅读本文大概需要 1.6 分钟。2022 年 12 月 26&#xff0c;新型冠状病毒肺炎正式更名为了新型冠状病毒感染&#xff0c;不再纳入《中华人民共和国国境卫生检查疫法》 规定的检疫传染病管理。文字层面上&#xff0c;这意味着我们口中的疫情&#xff0c;结束了。然而我却认为并没…

Django学习 Day9

1.F对象 一个F对象代表数据库中某条记录的字段的信息。 作用&#xff1a; 通常是对数据库中的字段的值在不获取的情况下进行操作 用于类属性&#xff08;字段&#xff09;之间的比较。 语法&#xff1a; From django.db.models import F F(‘列名’)例子: 所有Book数据表中的…

云游戏的2022:破局、新生、元宇宙

文|智能相对论 作者|青月 如果说2021年是「元宇宙元年」&#xff0c;那么2022年更像是元宇宙的「祛魅之年」&#xff0c;在这一年里&#xff0c;原本处在狂奔状态下的元宇宙正在褪去虚火。 在这样的大环境下&#xff0c;由于在实时性、兼容性、无限开创等关键特性的理念上的…

99. 激光炸弹——二维前缀和

地图上有 N 个目标&#xff0c;用整数 Xi,Yi 表示目标在地图上的位置&#xff0c;每个目标都有一个价值 Wi。 注意&#xff1a;不同目标可能在同一位置。 现在有一种新型的激光炸弹&#xff0c;可以摧毁一个包含 RR 个位置的正方形内的所有目标。 激光炸弹的投放是通过卫星定…

eclipse中安装ERMaster

eclipse中安装ERMaster 简介 参考网址&#xff1a; https://www.bilibili.com/video/BV1R4411a73T/?p22&spm_id_from333.880.my_history.page.click&vd_source42661b67a37800001020550eb4a4c45e 主要看这 3 集 ERMaster 在 jeesite 官网的介绍项目 参考网址&#x…

systemd(二)单元配置文件

概述 对于系统中的每一个单元&#xff08;unit&#xff09;都有一个配置文件&#xff0c;用于指示systemd如何启动或停止这个单元。 配置文件格式 [Unit]区块 [Unit]区块通常是配置文件的第一个区块&#xff0c;用来定义单元的元数据&#xff0c;以及配置与其他单元的关系。…

多线程模式下保证事物的一致性

目录前置InsertBatchSuccessServiceImpl.javaInsertBatchErrorServiceImpl.java效果图前置 在一些特殊的场景下, 我们需要一些特定的操作. 比如我有一个接口, 做如下操作, 需要保持事物的一致性, 即: 全部成功则提交, 一个异常则全部回滚: 1.insert订单、(耗时1秒) 2.insert订单…