开发者学堂课程【HaaS 物联网应用开发课程:3_1_4_AliOS Thiings 创建新组件】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/801/detail/13826
3_1_4_AliOS Thiings 创建新组件
内容介绍:
一、添加新组件
二、演示
三、示例演示
一、添加新组件
组件基本组成及创建方式
>组件基本组成部分
1. 组件配置文件,即 Config.in。即之前提到的与顶层配置文件相对应的组件配置文件
2. Makefile,即 aos.mk。编译的一些规则都是在 aos.mk 或 Config.in
3. 源代码,组件对外提供 API 的实现
4. 编译规则,定义在 Config.in 或 aos.mk 中
>创建新组件的三种方式
1. 按照 aos.mk、Config.in 及源代码编写规则,从头实现这三部分。知道 aos.mk 和 Config.in 是什么,知道要写的组件的功能是如何实现的就可以从头实现这三部分。
2.复制现有的组件目录例如 component 下有一个文件 netmanager 的组件,可以复制该组件的全部源代码到另一个目录下,然后根据需要修改这三部分内容。修改 aos.mk、Config.in 及源代码
3. 使用 aos create 创建新的新的组件,并在此基础上增加自己的编译选项、宏定义以及源代码。对于初学者建议使用第三种方式:简单快捷不容易出错。
二、示例
#创建新组件需要到源代码根目录下,源代码都放置在/workspace/AliOS-Things 中,进入到要新添加组件源代码根目录下
root@8b09079bcc1a:/# cd /workspace/AliOS-Things
#使用aos create component指令创建组件
root@8b09079bccla:/workspace/AliOS-Things# aos create component -t peripherals new_comp
[Info]ComponentInitializedat: /workspace/AliOS-Things/components/peripherals/new_comp
root@8b09079bcc1a:/workspace/AliOS-Things# ls
#创建完新组件后使用ls指令来查看,显示自动创建的新生成组件目录下的文件
root@8b09079bccla:/workspace/AliOS-Things# ls components/peripherals/new_comp -la | awk ’ {print$9}’
Config.in
README.md
aos.mk
example
new_comp
src
一般情况下创建组件是为其它模块提供一些新的 api 功能,新的 api 功能一般是放在 README.md 文件中。
三、示例演示
演示创建一个新组件并在 helloworld_demo 中呼叫这个组件的 API
打开窗口,进入/workspace/AliOS-Things 根目录下,输入
aos create component -t peripherals new_comp
创建组件类型为 peripherals,组件名称为 new_comp
执行完成后提示 component 初始化成功,在/workspace/AliOS-Things/components/peripherals new_comp
先来进入该目录,输入
cd /workspace/AliOS-Things/components/peripherals new_comp
再输入 ls
结果显示
Config.in
README.md
aos.mk
example
new_comp
src
再来进入 Config.in,输入 vim Config.in
可以看到其中定义了 AOS_COMP_NEW_COMP,default为y
再来进入 aos.mk,输入 vim aos.mk
可以看到$(NAME)_SOURCES := ./src/new_comp.c
指定组件使用的源代码是 new_comp..c
GLOBAL_INCLUDES += ./new_comp
组件所包含的头文件放在 new_comp 目录下
继续进入到 src下,输入 cd src/
ls
显示 new_comp.c
输入 vim new_comp.c 进入修改内容
进入后找到 int new_comp_init(void)函数
copy 后新实现一个函数
int new_comp_welcome(void)
{
/*add your code*/
printf(“welcome to new component\r\n”)
return 0;
}
然后进入到头文件中进行声明,输入 cd..
ls
vim new_comp/new_comp.h
进入后添加函数声明:
int new_comp_welcome(void)
接着可以到 helloworld_demo 下编辑 helloworld_demo 的源文件,输入
cd /workspace/AliOS-Things/application/example/helloworld_demo/
ls
vim appdemo.c
进入后找到 application_start 就是要编辑的函数
先在 application_start 函数上方添加#include “new_comp.h”
再在函数中 while(1){}上方添加 new_comp_welcome();
退出后再进入到根目录下,输入 cd /workspace/AliOS-Things/
然后执行 aos make helloworld_demo@haaseduk1 -c config 生成一个默认配置文件
结果放在 config 下,再来输入 vim .config
进入后 AOS_BUILD_BOARD=”haaseduk1”
定义了要编译的当前工程 board 是 haaseduk1
AOS_BUILD_APP=”helloworld_demo”
要编译的 app 是 helloworld_demo
退出后输入 aos make 指令对整个工程进行编译
结果显示找不到
输入 find . -name new_comp.h
结果存在,之前讲解过如果一个应用想要使用组件功能,需要设定对该组件的依赖关系。
依赖关系有两种设置方式:在应用的 config.in 中、在 aos.mk 中
现在使用第二种方式对组件添加依赖:
刚才新建的组件名为 new_comp,输入
vim application/example/helloworld_demo/aos.mk
将 new_comp 添加到$(NAME)_COMPONENTS += 后即$(NAME)_COMPONENTS += osal_aos cli new_comp
退出后输入 aos make 进行编译
可以看到 new_comp 已经编译成功
再输入 aos upload
下载完成后查看串口输出,进入一个窗口打开输入
picocom -b 150000 /dev/tty.usbserial-A908XGVV
因为刚才看到new_compwelcome的API是在helloworld_demo启动时调用的,所以此时需要进行重启来确认该函数是否被呼叫。
重启后打印出 welcome to new component
实验完成。