0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Nuttx实时操作系统学习笔记

CHANBAEK 来源: 非典型技术宅 作者: 非典型技术宅 2023-11-24 09:53 次阅读

之前在论坛看到过一篇帖子,说怎么在 STM32 上移植 Linux ,帖子写了很长,最后才发现使用的 uclinux,而且还是只启动一个 uboot。

现在想想为什么需要在 STM32 这种 MCU 上移植 Linux 呢,个人猜测可能是因为 Linux 环境丰富的组件和软件可移植性吧。

可是如果有一个 mini 版的 Linux 系统可以用呢,而且还不需要移植,上手即用,这个就是 Nuttx。

NUTTX 简介

NuttX 可拓展的实时操作系统,在2017年由 Gregory Nutt 发布, 并在2019年正式进入Apache基金会,成为 Apache 孵化项目。

它最大的特点是:

  • 高度可扩展性 :Nuttx 支持8位到64位多种 CPU,其功能全部可进行裁剪和配置,可根据需要选择所需的组件。
  • 合规性 :Nuttx 的系统 API 原生支持标准 POSIX 接口和完整的 C 标准库,这让一些 Linux/Unix 的程序可以很方便的移植到 Nuttx 中使用,而不需要做太多更改。

(吐槽一下:在之前使用其他 RTOS 的 Posix 接口使用体验并不太友好:FreeRTOS 支持的 POSIX 接口仅包含线程的的部分,缺少文件按系统支持使用总感觉有点鸡肋。RT-Thread 在组件中支持了 POSIX 线程接口也有文件系统支持,但是使用的时候总会有一两处不同让人心烦意乱)

除此之外 Nuttx 还有丰富的系统组件:

  • 文件系统 :Nuttx 支持多种不同的文件系统,包括但不限于 LittleFS、 ROMFS、NFS、FATFS 等等,甚至你还可以在 Nuttx 中挂载一个 FTP 服务器~
  • 设备驱动 :Nuttx 提供了丰富统一的设备和总线驱动,在不同芯片平台可使用相同的方式访问设备。包括网络USBSDIO、TFT 等多种总线或者设备。
  • 网络支持 :Nuttx 中支持了 IPv4、IPv6、TCP/IP、ICMP、BT、BLE 等多种协议栈,还支持 DHCP、SMTP、Telnet 、FTP、HTTP 等多种服务端和客户端,在使用中可无缝对接 Linux 程序。
  • 多核支持 :在一些复杂应用的所使用 SOC,往往不止一个 CPU,Nuttx 中基于 OpenAMP 提供了一个强大的多核框架,能够在使用时完全忽略多核差异。

支持的平台

根据官方的文档,现在 Nuttx 已经支持了 16 种不同芯片架构,累计 280+ 种芯片。包括 TINXP、ST、乐鑫在内的众多常用芯片都已支持在内。

更重要的是 Nuttx 支持,在电脑中使用模拟器运行 nuttx。在开发时先在 sim 中调试验证完成后,再使用硬件进行调试,能够提高开发效率和缩短开发时间。

快速开始

开发 Nuttx 推荐使用 Ubuntu 20.04 进行开发,在 windows 中可以使用 wsl2 安装 Ubuntu 20.04 可获得相同体验。以下以 WSL2 (Ubuntu 20.04)为例进行说明。

安装开发环境

安装编译工具: 由于 nuttx 在编译时会使用到一些额外的工具,所以需要提前安装依赖的工具。(其实下面有些也不常用。。)

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 kconfig-frontends
sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi

下载代码

mkdir nuttx-learning
cd nuttx-learning
git clone --depth=1 -b nuttx-10.2.0 https://github.com/apache/incubator-nuttx.git nuttx
git clone --depth=1 -b nuttx-10.2.0 https://github.com/apache/incubator-nuttx-apps apps

配置编译

在 Nuttx 的代码中默认包含所有支持的芯片驱动,所有无需下载额外的代码,只要根据需要选择你需要使用配置即可:

# 进入 nuttx 目录
cd nuttx
# c查看所有可用的配置
./tools/configure.sh -L

输入命令后会打印非常多配置,以 sim:minibaisc 为例,其中冒号前面的 sim 表示使用芯片,冒号后面的 minibasic 表示具体配置名称。

sim:minibasic 表示在模拟器中运行的最小程序配置,它编译完后它只包含一个 shell 和一个 hello world。

# 生成指定配置的配置信息
./tools/configure.sh -l sim:minibasic
# 编译程序
make -j

编译完成后,在 nuttx 目录下(执行 make 的当前目录),会生成一个 ./nuttx 文件。

图片

运行 ./nuttx 后会出现一个新的 shell,这个是 Nuttx 的终端 nsh,输入 help 命令可查看当前可用命令。

输入 hello 后按回车,即执行 hello 的程序,然后打印出 hello world。退出 nsh 需要使用命令 poweroff,而不能使用 Ctrl-C 结束程序。

修改文件

hello 程序所在位置为:apps/examples/hello/hello_main.c 中,打开文件可以可进行修改然后编译运行。

将我之前移植 FreeRTOS 时所自带的 Posix 测试程序,替换 hello_main.c 的内容,修改入口函数名为 main,然后重新编译运行。

无需任何移植,即可完美兼容 POSIX 接口的程序。

图片

结语

这是我关于 Nuttx 学习记录的第一篇文章,如有不严谨或者错误的地方欢迎大家指出。
在下一篇会讲到如何新建一个自己的工程以及如何修改 Nuttx 的配置,给 Nuttx 添加功能。

该项目的两个仓库,我已合并成一个 github 仓库方便下载,后续学习记录的代码和笔记都会同步到该仓库,有需要可点文末阅读原文自取。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10442

    浏览量

    206564
  • Linux
    +关注

    关注

    87

    文章

    10991

    浏览量

    206736
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348746
  • 移植
    +关注

    关注

    1

    文章

    367

    浏览量

    27854
  • 实时操作系统

    关注

    1

    文章

    184

    浏览量

    30516
收藏 人收藏

    评论

    相关推荐

    实时操作系统nuttx源码

    实时操作系统nuttx源码
    发表于 05-07 16:43

    嵌入式Linux操作系统学习规划,不看肯定后悔

    嵌入式Linux操作系统学习规划,不看肯定后悔
    发表于 04-28 06:22

    NuttX实时操作系统简介

    NuttX 介绍NuttX 实时操作系统NuttX 是一个实时
    发表于 08-05 08:27

    NuttX实时操作系统

    (嵌入式 实时操作系统 rtos nuttx 7.1)NuttX 介绍转载请注明出处: NuttX 实时
    发表于 08-06 07:53

    探讨嵌入式操作系统

    嵌入式操作系统学习笔记
    发表于 10-27 06:56

    NuttX实时操作系统有哪些特征呢

    NuttX是什么?NuttX实时操作系统有哪些特征?
    发表于 11-03 06:34

    有关NuttX实时操作系统的基本知识汇总

    NuttX是什么?NuttX实时操作系统有哪些关键特征?
    发表于 11-04 06:14

    NuttX实时操作系统的关键特征有哪些呢

    NuttX是什么?NuttX实时操作系统的关键特征有哪些呢?
    发表于 11-04 07:08

    嵌入式Linux操作系统学习规划

    嵌入式Linux操作系统学习规划ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标:(1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9)(2) 必须掌握一个嵌入式
    发表于 11-05 06:45

    实时操作系统的行为同步是什么意思

    《基于嵌入式实时操作系统的编程技术》笔记清单:第三章任务划分.《基于嵌入式实时操作系统的编程技术》笔记
    发表于 12-22 06:16

    UCOSII操作系统的简介

    前言这是我将UCOSII操作系统移植在STM32单片机上后进行UCOSII操作系统学习的一些笔记与理解,此文最后会附上我自己在UCOSII操作系统下使用STM32写
    发表于 01-12 06:00

    嵌入式操作系统学习笔记

    嵌入式操作系统学习笔记
    发表于 10-20 13:51 3次下载
    嵌入式<b class='flag-5'>操作系统学习</b><b class='flag-5'>笔记</b>

    51操作系统学习笔记(三):建立一个属于自己的AVR的RTOS(1)

    这篇笔记虽然是“51操作系统学习笔记”,但没有找到合适的代码。用杨明记的感觉还有点难度。因而转学《建立一个属于自己的AVR的RTOS》这篇文章绝对是学操作系统入门经典之作。经典之处在于
    发表于 11-15 18:36 9次下载
    51<b class='flag-5'>操作系统学习</b><b class='flag-5'>笔记</b>(三):建立一个属于自己的AVR的RTOS(1)

    51操作系统学习笔记(四):建立一个属于自己的AVR的RTOS(2)

    承接51操作系统学习笔记(三):建立一个属于自己的AVR的RTOS(1),在avr中调试一下下面的程序.为了加深学习应用,决定把代码全部输一遍,比复制的学些效果应该好一些吧。打开Avr studio
    发表于 11-15 21:06 7次下载
    51<b class='flag-5'>操作系统学习</b><b class='flag-5'>笔记</b>(四):建立一个属于自己的AVR的RTOS(2)

    UCOSIII操作系统学习笔记——任务

    RTOS系统RTOS全程为:Real Time OS,就是实时操作系统实时操作系统分为硬实时
    发表于 12-02 13:51 2次下载
    UCOSIII<b class='flag-5'>操作系统学习</b><b class='flag-5'>笔记</b>——任务