NuttX的学习笔记 5

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

Configure and build

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

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

NuttX的学习笔记 5_第1张图片

已经编译好的APP有:

  • ltdc
  • nx

测试一下 ltdc :

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

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

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

先来看看 ltdc 的文件夹吧。

NuttX的学习笔记 5_第2张图片

总体来说分为两部分:一部分是代码,还有一部分是配置文件。这些配置文件在 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 里。

NuttX的学习笔记 5_第3张图片

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

NuttX的学习笔记 5_第4张图片

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

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

很容易就能写出

NuttX的学习笔记 5_第5张图片

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

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

NuttX的学习笔记 5_第6张图片

先不看文档,分析一下。

NuttX的学习笔记 5_第7张图片

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

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

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

.
.
.

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

NuttX的学习笔记 5_第8张图片

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

NuttX的学习笔记 5_第9张图片

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

NuttX的学习笔记 5_第10张图片

好,下一个, 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 ..

好,把例子拿出来。

NuttX的学习笔记 5_第11张图片

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

先按照 README 文档来写。

NuttX的学习笔记 5_第12张图片

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

下面写 C 文件。

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

NuttX的学习笔记 5_第13张图片

然后 make menuconfig 结果。。

NuttX的学习笔记 5_第14张图片

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

加上我怀疑缺失的 -includeinclude

NuttX的学习笔记 5_第15张图片

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

NuttX的学习笔记 5_第16张图片

然后退出编译。

NuttX的学习笔记 5_第17张图片

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

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

NuttX的学习笔记 5_第18张图片

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

你可能感兴趣的:(NuttX)