NuttX的学习笔记 5

今天测试了其他项目,比如LTDC,LCD,USBOTG的两个,还了解到kconfig和linux的内核编译有一些关系,虽然我还没有试过编译内核。
先找一个例子吧。例如LTDC。
LTDC文件夹下有文档:

Configure and build

cd tools
./configure stm32f429i-disco/ltdc
cd ..
make

编译方法还是老样子。
编译下载
然后在串口的 NuttX Shell 中输入 help 便可以看到目前支持的指令以及编译好的APP:

这里写图片描述

已经编译好的APP有:

  • ltdc
  • nx

测试一下 ltdc :

开发板屏幕开始播放一组测试程序
看起来还行。
就是没法停下来。。。

试试 nx ,出现了一堆窗口,看起来图形操作界面都可以啊。

这两个 apps 都在 aps/examples 下。分别为 ltdc , nx

先来看看 ltdc 的文件夹吧。

ltdc

总体来说分为两部分:一部分是代码,还有一部分是配置文件。这些配置文件在 apps/README 中有说明。

Example Built-In Application

An example application skeleton can be found under the examples/hello
sub-directory. This example shows how a builtin application can be added
to the project. One must:

  • Create sub-directory as: appname
  • In this directory there should be:

    • A Make.defs file that would be included by the apps/Makefile
    • A Kconfig file that would be used by the configuration tool (see the
      file kconfig-language.txt in the NuttX tools repository). This
      Kconfig file should be included by the apps/Kconfig file
    • A Makefile, and
    • The application source code.
  • The application source code should provide the entry point:

    appname_main()

  • Set the requirements in the file: Makefile, specially the lines:

    APPNAME = appname
    PRIORITY = SCHED_PRIORITY_DEFAULT
    STACKSIZE = 768
    ASRCS = asm source file list as a.asm b.asm …
    CSRCS = C source file list as foo1.c foo2.c ..

  • The Make.defs file should include a line like:

    ifeq ($(CONFIG_APPNAME),y)
    CONFIGURED_APPS += appname
    endif

这部分就是讲如何建立一个新的 app 。按照步骤操作一遍好了。就比方说 hello world

为了方便,直接把 hello world 的工程文件夹建在 example 里。

hello_test

按照说明,需要创建文件 Make.defs , KconfigMakefile 这三个文件。先从第一个开始,因为接触Linux的机会也不是很多,对于 vi 这个听起来很牛逼的编辑器并没有下功夫练习,所以直接用 nano 好了。。或许图形界面的 gedit 更好用一点。左边顺手打开 ltdc 的Make.defs 文件进行比对。

Make.defs 比对

看起来关键段就是下面的类似 if 语句的代码了。在参照文档中所说的:

ifeq ($(CONFIG_APPNAME),y)
CONFIGURED_APPS += appname
endif

很容易就能写出

第一个文件

ifeq ($(CONFIG_EXAMPLES_Hello_TEST),y)
CONFIGURED_APPS += examples/hello_test
endif

再来是 Kconfig 文件。
文档当前部分说该部分的语法要到 tools/ 文件夹下看。。先打开 ltdc 文件夹中的例子看一下。

这里写图片描述

先不看文档,分析一下。

Kcinfig

很明显
# :注释符。
config :配置,感觉一直都在配置中。。。。
bool :这个应该是显示在 menuconfig 中的选项栏的名称。
bool :显示在 menuconfig 中的选项栏的名称,此外,此选项为开关选项。
default :默认为否。编译时跳过。
depends on :这个有点像自然语言啊,中间还有空格,这个不太确定,看起来可以依附在某个 config 下,待会看文档。
---help---:就是帮助。

而且该文档有明显的格式规范,以 TAB 制表符来缩进。

看起来这个文件也很简单。赶快看看README.txt

.
.
.

文档开头部分就说明了如何配置:

readme

这段是个例子,是在配置某个模块的某个版本 MODVERSIONS 而该版本是在该模块 MODULES 下,看样子分析的没错,下面还有一个更直观的:

这里写图片描述

这样一来就很明显了。所以新的 Kconfig 文件应该这样写:

write by my self

好,下一个, Makefile 文件。
文档中说,该文件中要有:

APPNAME = appname
PRIORITY = SCHED_PRIORITY_DEFAULT
STACKSIZE = 768
ASRCS = asm source file list as a.asm b.asm …
CSRCS = C source file list as foo1.c foo2.c ..

好,把例子拿出来。

例子

看起来有点不同啊。
多了一个 -includeinclude

先按照 README 文档来写。

1st

(我有预感,这个可能不行。)

下面写 C 文件。

参考一下 example 中的 helloworld 在编辑时,我下载了 eclipse 来帮忙,导入工程后,发现意外的好用。

果然不行

然后 make menuconfig 结果。。

make错误

果然,和我预想的一样,出现问题了。查看原因,是因为没有为例子创建 preconfig 的规则。

加上我怀疑缺失的 -includeinclude

家伙上却是的部分

然后make menuconfig 配置界面出现了,在 example 里寻找hello test。并用空格设置启用。

启用例子

然后退出编译。

还是出问题了

好吧,这里翻了个小错误。C 文件中的变量名没有按照规定起。

改成 hello_test_main 再试一下。
完成,出现了 nuttx.bin 。下载测试。

这里写图片描述

完全没有问题。就先到这里吧。

04-11
### 关于 NuttX RTOS 的详细介绍 NuttX 是一种成熟的嵌入式实时操作系统(RTOS),具有类 Linux 的完整性和强大的嵌入式实时性能,能够很好地填补传统 RTOS 与 Linux 之间的空白[^3]。它的设计使得即使是在资源受限的环境中也能实现复杂的系统功能,比如网络支持和图形界面。 #### 构建与使用入门 NuttX 提供了一个详细的快速启动指南来帮助开发者熟悉其基本操作流程[^1]。该文档涵盖了从安装必要的工具链到配置、编译以及运行第一个项目的全过程。具体来说: - **安装依赖项**: 开发者需按照官方指引完成开发环境搭建,这通常涉及 GNU 工具链和其他必要软件包的设置[^5]。 - **源码获取**: 用户可以从 Apache 官方网站或者镜像站点下载最新稳定版代码库[^4]。例如通过 Git 克隆仓库 `https://gitcode.com/gh_mirrors/nu/nuttx` 即可获得完整的项目结构[^2]。 - **构建过程**: 利用 Makefile 文件定义的一系列规则,在顶级目录 $(TOPDIR) 中执行命令即可触发整个系统的组装工作流[^1]。典型的操作可能如下所示: ```bash make menuconfig make all ``` #### 功能模块概览 除了基础内核外,NuttX 还提供了丰富的组件集合用于满足不同应用场景的需求。其中包括但不限于文件系统接口、设备驱动框架以及 POSIX API 支持等功能集[^4]。 #### 社区交流渠道 为了促进技术分享并解决实际遇到的各种难题,围绕着这个开源项目形成了活跃的社区氛围。无论是初学者还是资深工程师都能从中受益匪浅。可以通过加入邮件列表等方式参与讨论[^4]。 --- ### 示例代码片段展示如何简单验证 NuttX 是否正常运作 下面给出一段简单的测试程序用来确认基本硬件交互能力是否完好无损: ```c #include <stdio.h> int main(void){ printf("Hello from NuttX!\n"); return 0; } ``` 此 C 程序当被成功加载至目标板卡之后将会打印字符串消息表明环境初始化完毕并且可以继续深入探索其他高级特性了。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值