业务代码通过 ninja 进行构建,类似于 make,同时借助于 gn 生成 ninja 构建规则,类似于 cmake,所以我们编写业务代码除了关注代码本身的内容外,还要将代码添加到 gn 的构建规则中去。
这种风格是继承自 linux 编译框架的风格,可能用惯了 STM32 啥单片机的小伙伴会觉得这个编译流程是老太太的裹脚布-又臭又长,有这种想法很正常,我刚接触的时候也想,搞一个 MCU 级别的小芯片,编译流程做的这么麻烦,不是劝退使用者嘛,实际上这些是对 LiteOS 内核适配,LiteOS 做的很大,最小都要 128K 的 ROM,对于 STM32F103C8 来说,移植都没法移植,不像 RT-Thread、FreeRTOS,最小 10K ROM 就能实现功能了,所以主观就觉得 LiteOS 拉胯。
实际上 LiteOS 设计和应用的场景一般不是应用于 这种极小资源的芯片的,在很多场景下用在多核的 MCU、AIOT 芯片等等,内核编译框架需要有强大的多核开发支持,所以其编译框架有着很浓厚的 Linux 编译背景,学习的小伙伴也不要觉得麻烦,这可以作为向 linux 开发学习进军的一个小跳板呢!
下面继续研究 Hi3861,目前官方给出的目录规则框架如下:
- .
- └── applications
- └── BearPi
- └── BearPi-HM_Nano
- └── sample
- │── my_first_app
- │ │── hello_world.c
- │ └── BUILD.gn
- └── BUILD.gn
那我按照官方的规则来建立一个测试代码目录,我的如下:
- .
- └── applications
- └── BearPi
- └── BearPi-HM_Nano
- └── sample
- │── test_app
- │ │── test.c
- │ └── BUILD.gn
- └── BUILD.gn
.c 文件内容,就是一个简单的打印程序:
- #include "ohos_init.h"
- #include "ohos_types.h"
- #include
- void test(void)
- {
- printf("[DEMO] Hello world Test.\n");
- }
- SYS_RUN(test);
SYS_RUN 用于将函数注册到 LiteOS 系统的运行代码中执行。
最小特性的配置文件(和源代码同级目录的 gn 文件)用于每个代码模块的编译,代码如下:
- static_library("testapp") {
- sources = [
- "test.c"
- ]
- include_dirs = [
- "//utils/native/liteos/include"
- ]
- }
该文件定义了 testapp 的编译规则,他的源文件和头文件目录,其中 // 是工程目录