Nuttx学习笔记(一)

2023-05-16

最近在工作上需要用到这个nuttx实时操作系统,并且对这个系统进行学习记录以及记录下自己所遇到过的问题。

目录

一、环境配置

(1)基础环境

(2)下载nuttx

(3)构建模拟器

(4)初始化配置

(5)调试信息

二、Nuttx目录结构

三、NSH应用程序

(一)NSH自定义启动脚本

(二)自定义NuttShell


那么对于这个操作系统有帮助的文档:

Quickstart — NuttX Companion 0.1.6 documentation

NuttX Documentation — NuttX latest documentation

Wiki - NUTTX - Apache Software Foundation

GitHub:GitHub - apache/incubator-nuttx: Apache NuttX is a mature, real-time embedded operating system (RTOS)

一、环境配置

(1)基础环境

环境:ubuntu 20.04,首先进行基础的环境配置。

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

(2)下载nuttx

mkdir nuttxspace
cd nuttxspace
git clone https://github.com/apache/incubator-nuttx.git nuttx
git clone https://github.com/apache/incubator-nuttx-apps apps
git clone https://bitbucket.org/nuttx/tools.git
cd tools/kconfig-frontends
./configure
make
sudo make install
sudo ldconfig

(3)构建模拟器

进入到nuttx文件中,输入:./tools/configure.sh sim/nsh

修改配置文件:make menuconfig

设置:

Build Setup----------Build Host Platform(Linux)

用户免密登陆设置:

 

 

这里按下enter把原来有的*取消掉就行了。然后save一下,之后回来进行make。之后即可得到可执行文件,并且是在模拟器上运行,若中间出现什么错误,只需要在ubuntu上安装对应的库就行了:

 

也可以从另外一个终端窗口中,杀死模拟器:pkill nuttx

(4)初始化配置

这个操作系统是可以适配很多种嵌入式设备,可以通过以下命令进行选择:

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

使用上面的命令可以查看所有的配置,如果找到了自己适配的型号,则可以:

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

选定后即可以基于菜单的配置系统自定义此配置:

cd nuttx
make menuconfig

 如果需要清理所构建的,则需要使用make clean

(5)调试信息

sudo apt install openocd
openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg
cd nuttx/
gdb-multiarch nuttx/nuttx

gdb调试在这就不过多说明了,网上有很多教程。

二、Nuttx目录结构

  • NSH,各种app(nuttx shell):实际的应用曾,应用程序可以shizuo为是我们在终端中运行的东西,或者可以看作是一个终端。

  • Virtual File System(虚拟文件系统):虚拟文件系统,符合Linux系统的思想,这一层的主要作用是将设备的操作转化为对虚拟文件的操作

  • Upper Half Drivers(上层驱动):这些驱动可以看作为是对各种设备的操作接口的定义,比如PWM、Network等等。这一层也可以视作为系统的API。在这里你可以不需要管底层的实现,直接调用就可以了。

  • Lower Half Drivers(下层驱动):这一层是上层驱动的具体化,在这里是每种芯片都有不一样的寄存器操作,这一层的驱动提供的API直接操作各种芯片,各种芯片的驱动在这里都是不相同的。

  • Microcontroller + Peripherals(外设):这一层是各种硬件以及外设。位于Nuttx/arch/*

具体文件架构:Directory Structure — NuttX latest documentation

三、NSH应用程序

(一)NSH自定义启动脚本

配置:File Systems -> ROMFS file system

到达:Application Configuration → NSH Library → Scripting Support ->Support ROMFS start-up script

 

可以看到这个系统的默认启动脚本为init.d/rc.sysinit,我们可以通过这个地方进行修改,但是最好还是不要改了,避免有bug,我们可以进入系统的文件中修改:

 

那么我们回到nuttx,进入这个地址:

/home/zhengxiting/nuttxspace/nuttx/boards/sim/sim/sim/src/etc/init.d,打开rcS文件,进行修改:

 首先先make clean一下,再进行make,再运行即可看到:

那么在这我们就可以编写很多启动脚本了,方法类似上面写的。

(二)自定义NuttShell

NuttxShell是一个简单的Shell应用程序,可以与Nuttx一起使用,支持各种命令,也可以自定义命令,可以添加新命令、更改初始化序列等。

那么他的shell语句是在哪里实现的,可以具体看到:/nuttxspace/apps/nshlib,这个地方是他的库:

输入help即可看到所有的NSH命令以及内置应用程序,这个内置应用程序不要理解错为是内部的命令,其实是Builtin Apps中的东西,其实是外部应用程序,也就是我们可以进行添加的:

 

那么如何编写自己的应用程序,可以看看apps中的例程,路径为/nuttxspace/apps/examples/hello,以这个hello为例,我们做一些小修改,让其成为一个小的应用程序:

 

打开hello_main.c可以看到:  

那么我们就在这个基础上进行改进吧:

我们在apps的文件夹中创建名为projects的文件夹,然后把hello文件夹拷贝到这个地方:

mkdir projects
cp -a examples/hello projects/test
cd projects/test
mv hello_main.c test_hello.c

修改自己的程序配置文件,修改TEST文件夹中的Makefile\make.defs\kconfig这三个文件,首先看看Makefile,我们将其修改为test_main.c,修改一下对应的宏以及我们对应的源文件:

 

其中的PROGNAME设置为在Kconfig中配置的名字,优先级设置为Kconfig中的配置,栈大小设置为Kconfig中给他配置的大小,模块也是K config中配置的名称

接下来是啥打开Make.defs文件,修改为我们自己文件的路径:

 

之后是打开我们的Kconfig文件,主要是要修改我们的宏,要与上方的匹配:

 

改名字是用来在deconfig中配置使用,在添加该配之后,该应用会被打开。下面的hello nuttx则可以看作为是名字。如果打开了选项,那么就打开下面的配置显示,首先是出现了app名,之后再设置栈的优先级,设置栈的大小。

最后就是修改对应的源文件了,简单改个样子就行:

将apps/examples中的Makefile、Make.defs、Kconfig三个文件拷贝过来:

cp ../../examples/Makefile ../
cp ../../examples/Make.defs ../
cp ../../examples/Kconfig ../

 目录结构是这样的:

首先修改Kconfig文件,修改为如下,这个地方是到时候在menu中会展现出来的文件名:

 

打开Make.defs文件,修改为:

 

之后进入到nuttx文件夹中:

 make apps_distclean
 make menuconfig

 可以发现执行完后apps的文件中出现了一个Kconfig:

之后就可以发现在Application Configuratuon-->Projects中:

 

 

 之后我们选中他,保存退出,之后我们make一下。生成可执行文件后,执行可执行文件./nuttx,再输入help,执行hello_nuttx,即可以及看到我们的hello nuttx

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nuttx学习笔记(一) 的相关文章

  • 1705_Python处理中文经验与实践

    全部学习汇总 xff1a GreyZhang python basic My learning notes about python github com 曾经在很长的一段时间内 xff0c Python处理中文的时候真是把我难坏了 总觉得
  • 1706_Python中带余数除法

    全部学习汇总 xff1a GitHub GreyZhang python basic My learning notes about python 欢迎路过的YUAN类朋友们 xff0c 希望我们能够相互交流共同成长 如有错误或者不足希望及
  • 1707_Python中的多成员处理

    全部学习汇总 xff1a GreyZhang python basic My learning notes about python github com 欢迎路过的YUAN类朋友们 xff0c 希望我们能够相互交流共同成长 如有错误或者不
  • 1708_Simulink中取数组元素

    全部学习汇总 xff1a GitHub GreyZhang g matlab MATLAB once used to be my daily tool After many years when I go back and read my
  • STM32F407 CUBEMX+HAL库完成对XPT2064触摸屏控制芯片的驱动

    硬件介绍 首先介绍一下硬件 xff0c 我购买的液晶屏大小为480 320 xff0c 液晶屏控制芯片为ST996S xff0c 两者均采用SPI通讯协议 xff0c 这节只讲触摸屏控制芯片XPT2064的部分 如果你需要阅读有关液晶屏控制
  • C++ (STL BOOST) 智能指针的一些解析

    C 43 43 xff08 STL BOOST xff09 智能指针的一些解析 xff0c 包括智能指针的原理 xff0c 智能指针的一些使用 只有了解了原理才能真正用对他们 现在blog的文章几乎就是一把抄 郁闷 C 43 43 里面内存
  • Python安装第三方库PIL时失败的解决办法

    Python中 xff0c 安装第三方模块 xff0c 是通过setuptools这个工具完成的 Python有两个封装了setuptools的包管理工具 xff1a easy install和pip 目前官方推荐使用pip 安装一个第三方
  • 在VMware上安装Ubuntu详细教程

    目录 1 先下载好VMware Workstation Pro 2 下载Ubuntu系统镜像 3 在VMware新建虚拟机 4 开启虚拟机 xff0c 安装Ubuntu 这时我们发现由于窗口太小无法安装 作为全球最流行且最有影响力的Linu
  • 树莓派 Linux 下的串口通讯 (C语言)

    运行环境 xff1a Ubuntu14 04 树莓派3B 43 功能 xff1a 实现串口数据的收发 main c文件 include 34 com h 34 define BUFFER SIZE 30 最大缓存区 char pstr 61
  • 1--FreeRTOS操作系统介绍

    1 FreeRTOS 操作系统介绍 第3章 FreeRTOS 读作 34 free arr toss 34 是一个嵌入式系统使用的开源实时操作系统 FreeRTOS 被设计为 小巧 xff0c 简单 xff0c 和易用 xff0c 能支持许
  • 2--嵌入式操作系统FreeRTOS的原理与实现

    2 嵌入式操作系统FreeRTOS的原理与实现 摘自 xff1a http xilinx eetrend com article 7828 摘要 xff1a FreeRTOS 是一个源码公开的免费的嵌入式实时操作系统 xff0c 通过研究其
  • 自动驾驶技术-环境感知篇:V2X技术的介绍

    V2X技术概述 在前面的几篇文章分别介绍了自动驾驶在环境感知领域的相关技术点 xff0c 主要介绍了如何通过雷达配合视觉技术实现车辆自身的智能 其实在环境感知方面 xff0c 除了利用车辆自身的智能 xff0c 还可以借助外部环境实现信息的
  • 深度学习分布式策略优化、显存优化、通信优化、编译优化综述

    综述 因为我个人最近在从事可能是AI领域对性能挑战最大的方向 xff0c 自动驾驶领域 xff0c 所以对整个深度学习训练的优化尤为关注 xff0c 最近一直在学习相关内容 xff0c 谨以此篇文章做一个总结 我一直很看好深度学习训练优化这
  • 量子计算机的优势和建设挑战

    1 为什么需要量子计算机 目前大家日常使用的计算机都是经典计算机 xff0c 经典计算机计算性能的发展遵循摩尔定律 xff0c 在价格不变时 xff0c 集成电路上可容纳的晶体管数目 xff0c 约每隔18个月便会增加一倍 性能也将提升一倍
  • 浅谈ChatGPT对生产关系及工具的颠覆影响

    xff08 先歪个楼 xff0c 配图是三体乱纪元 xff0c 证明三体问题无解 xff0c 而ChatGPT证明了AIGC问题是可解的 xff09 最近ChatGPT越来越热 xff0c 仿佛看到了资本市场又一次的爆发 最近周末也会跟几个
  • 蓟门边studio-码农创业路的起点

    蓟门边工作室 xff0c 开张了 先简单介绍下lz的情况吧 xff01 lz是北邮在读硕士 xff0c 码农一枚 断断续续写代码也有一两个年头了 xff0c 但是感觉总是在外面飘着 xff0c 没写过什么大的项目 xff0c 也没真正依靠技
  • 【机器学习算法-python实现】逻辑回归的实现(LogicalRegression)

    转载请注明出处 xff1a http blog csdn net buptgshengod 1 背景知识 在刚刚结束的天猫大数据s1比赛中 xff0c 逻辑回归是大家都普遍使用且效果不错的一种算法 xff08 1 xff09 回归 先来说说
  • 计算机视觉~~~

    这两年 xff0c 计算机视觉似乎火了起来计算机视觉的黄金时代真的到来了吗 xff1f 生物医学 机械自动化 土木建筑等好多专业的学生都开始研究其在各自领域的应用 xff0c 一个视觉交流群里三分之一以上都不是计算机相关专业的 当然 xff
  • 新闻个性化推荐系统(python)-(附源码 数据集)

    1 背景 最近参加了一个评测 xff0c 是关于新闻个性化推荐 说白了就是给你一个人的浏览记录 xff0c 预测他下一次的浏览记录 花了一周时间写了一个集成系统 xff0c 可以一键推荐新闻 xff0c 但是准确率比较不理想 xff0c 所
  • 明天是我的生日,写给24岁的自己

    哎 xff0c 本来想把今晚留给蛋疼的latex 我的导师让我写一篇论文 xff0c 我正在研究怎么用latex 但是想了想 xff0c 明天就过生日了 xff0c 最后一晚还是写点东西 xff0c 静静地思考下 本来想写点东西发到朋友圈或

随机推荐

  • 【码农本色】用数据解读我的2014

    转眼2014就过去了 xff0c 不禁感叹又老了一岁的同时 xff0c 却发现已经快研究生毕业了 xff0c 趁着这个活动简单总结下2014 1 实习篇 2014年一月份拿到了人生第一个实习offer xff0c 在sony这样的大公司做a
  • 如何用PYTHON代码写出音乐

    如何用PYTHON代码写出音乐 什么是MIDI 博主本人虽然五音不全 xff0c 而且唱歌还很难听 xff0c 但是还是非常喜欢听歌的 我一直在做这样的尝试 xff0c 就是通过人工智能算法实现机器自动的作词和编曲 xff08 在这里预告下
  • 普通程序员如何入门AI

    毫无疑问 xff0c 人工智能是目前整个互联网领域最火的行业 xff0c 随着AlphaGo战胜世界围棋冠军 xff0c 以及各种无人驾驶 智能家居项目的布道 xff0c 人们已经意识到了AI就是下一个风口 当然 xff0c 程序员是我见过
  • 深度学习RNN实现股票预测实战(附数据、代码)

    背景知识 最近再看一些量化交易相关的材料 xff0c 偶然在网上看到了一个关于用 RNN实现股票预测的文章 xff0c 出于好奇心把文章中介绍的代码在本地跑了一遍 xff0c 发现可以 work 于是就花了两个晚上的时间学习了下代码 xff
  • 图像拐点检测-原理以及代码实现

    今天带来的内容只用两个字形容 干货 xff01 xff01 首先我们科普下图像识别的常识 xff0c 图片在电脑看来 xff0c 其实就是一个矩阵 xff0c 每个矩阵中的一个值都对应图片的一个像素点 xff08 下图摘自 机器学习实践应用
  • c#如何实现在两个窗体(Form)间传输数据或变量

    在父窗体中显示子窗体时 xff0c 加上子窗体 Owner 61 this 在子窗体中定义一个父窗体对象 xff0c 在Load函数里面让父窗体对象 61 xff08 父窗体类型 xff09 this Owner 然后用这个父窗体对象就可以
  • docker容器webui界面之portainer

    docker通常下都是命令行管理 xff0c 不太方便 xff0c web管理能直观一点 xff0c 如果是公司有运维组 xff0c ssh账号也不用给到开发这边 单机安装命令 docker run d p 19000 9000 name
  • Windows 10安装ubuntu18.04双系统(bios和boot manager)

    1 按照网上教程制作系统盘 xff1b 2 在windows下创建空白区 xff0c 为ubuntu分配空间 xff1b 3 用做好的系统盘安装系统 由于各个厂商计算机的bios和boot manager启动键不同 xff0c 自行百度 本
  • OpenCv入门(三)——阈值化处理

    目录 0x01 OTSU 0X02 固定阈值化 0x03 自适应阈值化 0x04 双阈值化 0x05 半阈值化 在图像处理中 xff0c 处理灰度图像的计算量要小于处理彩色图像 xff0c 而二值化图像 xff08 只含灰度值0或1 xff
  • 运行gazebo时出现[Err] [REST.cc:205] Error in REST request

    出现错误 xff1a Err REST cc 205 Error in REST request libcurl 51 SSL no alternative certificate subject name matches target h
  • 安装双系统ubuntu18.04后,不能进入ubuntu界面的解决办法

    某天晚上电脑自动升级了bios xff0c 作为新手小白此时还没有意识到问题 第二天开机发现电脑不仅不能进去ubuntu xff0c 连bios都进不去了 多次开机关机重复后 xff0c 灵机一动改成重启 xff0c 终于有进入bios的界
  • Python中集合的使用

    1 set add xff09 xff1a 向集合中添加元素 xff0c 是整体添加进集合set中 xff1b set update 向集合中添加元素 xff0c update是将字符串中的拆分成字符进行追加 xff1b eg s1 61
  • Resource not found问题

    在运行ros中的xacro文件时出现的如下问题 resource not found mbot description ROS path 0 61 opt ros melodic share ros ROS path 1 61 opt ro
  • 启动Moveit Setup Assistant出错

    1 首先安装moveit配置助手 xff0c 我的ubuntu版本是18 04 xff0c 所以运行 xff1a sudo apt get install ros melodic moveit 填写个人密码安装 source opt ros
  • 形参如何改变实参

    把实参数组传递给函数 xff0c 则形参从数组那里得到了起始地址 xff0c 因此数组与实参数组共占了同一段内存单元 xff0c 在函数调用期间 xff0c 该变了形参数组的值 xff0c 也就改变了实参数组的值 例 xff1a int i
  • Linux下ARM 和单片机的串口通信设计

    摘要 xff1a 介绍Linux 环境下串口通信的设计方法和步骤 xff0c 并介绍了ARM9 微处理器s3c2440 在Linux 下和C8051Fxxx 系列单片机进行串行通信的设计方法 xff0c 给出了硬件连接和通信程序流程图 该方
  • AT+CSQ信号质量指示含义

    AT 43 CSQ 命令解释 xff1a 检查网络信号强度和SIM卡情况 命令格式 xff1a AT 43 CSQ lt CR gt 命令返回 xff1a AT 43 CSQ lt rssi gt lt ber gt 其中 lt rssi
  • MIPI接口和DVP接口的区别及优点

    DVP是并口 xff0c 需要PCLK VSYNC HSYNC D 0 xff1a 11 可以是8 10 12bit数据 xff0c 看ISP或baseband是否支持 xff1b MIPI是LVDS xff0c 低压差分串口 只需要要CL
  • 立体耳机插头和四极耳机插头三段、四段处的区别

    立体 耳机插头 和四极 耳机插头 三段 四段处的区别 在日常生活中 xff0c 通常较为细心的消费者就会发现 xff0c 适用于NOKIA手机的 耳机插头 和适用于iphone的 耳机插头 是互补兼容的 xff0c 但是iphone HTC
  • Nuttx学习笔记(一)

    最近在工作上需要用到这个nuttx实时操作系统 xff0c 并且对这个系统进行学习记录以及记录下自己所遇到过的问题 目录 一 环境配置 xff08 1 xff09 基础环境 xff08 2 xff09 下载nuttx xff08 3 xff