3_1_4_AliOS Thiings 创建新组件|学习笔记

简介: 快速学习3_1_4_AliOS Thiings 创建新组件。

开发者学堂课程【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 指令对整个工程进行编译

结果显示找不到

image.png

输入 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启动时调用的,所以此时需要进行重启来确认该函数是否被呼叫。

image.png

重启后打印出 welcome to new component

实验完成。

相关文章
|
安全 Android开发 数据安全/隐私保护
请说明鸿蒙操作系统与其他操作系统(如Android和iOS)的主要区别。
请说明鸿蒙操作系统与其他操作系统(如Android和iOS)的主要区别。
1852 1
|
存储 开发者 Python
Python中的collections模块与UserDict:用户自定义字典详解
【4月更文挑战第2天】在Python中,`collections.UserDict`是用于创建自定义字典行为的基类,它提供了一个可扩展的接口。通过继承`UserDict`,可以轻松添加或修改字典功能,如在`__init__`和`__setitem__`等方法中插入自定义逻辑。使用`UserDict`有助于保持代码可读性和可维护性,而不是直接继承内置的`dict`。例如,可以创建一个`LoggingDict`类,在设置键值对时记录操作。这样,开发者可以根据具体需求定制字典行为,同时保持对字典内部管理的抽象。
在数据驱动方式中处理复杂的数据结构
【10月更文挑战第13天】 在数据驱动的开发模式中,处理复杂数据结构是一项重要任务。本文从理解特性、数据分解、选择模型、数据绑定、转换预处理、处理嵌套、性能优化、错误处理、数据验证及实际案例等方面,详细阐述了应对这一挑战的方法和策略,强调了持续学习和改进的重要性。
608 157
|
数据可视化 索引
可视化拖拽组件库一些技术要点原理分析(二)
可视化拖拽组件库一些技术要点原理分析(二)
516 0
|
语音技术 计算机视觉 开发者
多模态模型评测框架lmms-eval发布!全面覆盖,低成本,零污染
【9月更文挑战第15天】LMMS-EVAL 是一项由多家研究机构联合开发的多模态模型评测框架,旨在为大型多模态模型提供全面、低成本且零污染的评测基准。该框架包含超过50个任务和10多个模型,覆盖图像分类、目标检测、语音识别等多个领域,使研究人员能够在有限资源下轻松评估和比较模型性能。通过利用实时更新的数据源,LMMS-EVAL 还确保了模型在真实世界中的泛化能力。论文地址: https://arxiv.org/abs/2407.12772
744 5
|
运维 网络安全
解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)
通过这些步骤和方法,您可以有效解决“ssh: connect to host IP port 22: Connection timed out”问题,并顺利使用 `scp`命令传输文件。
15137 7
|
安全 程序员 API
|
自然语言处理 JavaScript 开发者
通义灵码插件:VSCode 的智能编程助手
通义灵码插件:VSCode 的智能编程助手
15029 5
简单易操作 VsCoe离线安装插件【步骤+图片+插件】
这篇文章介绍了在Visual Studio Code (VSCode) 中进行离线安装插件的详细步骤,包括如何下载插件、以SVN插件为例的离线安装过程、通过命令行安装以及一个更加简单的离线安装方式,还提供了操作界面的截图帮助理解。
简单易操作 VsCoe离线安装插件【步骤+图片+插件】
|
监控 Linux
Linux修改fs.inotify.max_user_watches(“外部文件更改同步可能很慢”和“当前的 inotify(7) 监视限制太低”)
Linux修改fs.inotify.max_user_watches(“外部文件更改同步可能很慢”和“当前的 inotify(7) 监视限制太低”)
1231 0