Nuttx学习笔记(一)

最近在工作上需要用到这个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

猜你喜欢

转载自blog.csdn.net/Alkaid2000/article/details/127573074