AliOS Things 基于组件化思想的多bin特性

简介: 今年杭州云栖大会上,AliOS Things正式发布,其中有一个基于组件化思想的多bin特性,这是AliOS Things有专利保护的多bin fota升级解决方案的核心

今年杭州云栖大会上,AliOS Things正式发布,其中有一个基于组件化思想的多bin特性,这是AliOS Things有专利保护的多bin fota升级解决方案核心。随着我们不断的版本迭代,这里很高兴和大家分享下多bin基于AliOS Things v1.1.2版本的具体实现。这里我主要以"两个W(what、why)、一个H(how)"来展开。

What -- AliOS Things多bin特性是什么

AliOS Things v1.1.2版本实现的多bin版本(实现的是三bin方案,分为kernel、framework、app bin),主要是指AliOS Things基于组件化思想能够独立编译、烧录、OTA升级kernel、framework、app bin,这三部分通过syscall来实现彼此的函数调用,syscall是在扁平地址空间中通过访问函数数组来实现的。

       fsyscall                 ksyscall

app ------> framework ------> kernel

如果有反向调用的需求,可以使用函数注册方式来实现。

Why -- 为什么需要AliOS Things多bin特性

AliOS Things 多bin特性到底能够带来什么好处呢?物联网设备数量众多,模组种类也繁杂,芯片厂商、模组厂商、终端厂商开发者都有自己的侧重点,但是对AliOS Things来讲,我们希望让芯片、模组厂商减少硬件成本,降低模组功耗,让终端厂商开发者简易开发,专注于应用软件的开发,而多bin特性就是为此服务的。

总结来讲,AliOS Things核心利益点就是“减成本、利开发”,具体如下:

  • AliOS Things拆分kernel、framework、app bin,支持细粒度fota升级,减少ota备份空间大小(甚至可以做到0备份空间升级),有效减少硬件flash成本
  • 对NB和LoRa芯片,对比下载一个几百K和几十K的固件包,对电池供电寿命来说差别巨大
  • 芯片厂商、模组厂商预置测试稳定的kernel、framework版本,开发者购买阿里云市场中的模组解决方案,专注于开发app即可

下图更直观的展示了单bin和多bin版本在fota升级上的硬件flash消耗对比:

f9dd34cec53650a3a455d7f20f7170fb77a55156

How -- 如何实现AliOS Things多bin特性

上面我们了解了什么是AliOS Things  多bin特性以及多bin特性带来的好处,那AliOS Things 多bin特性是如何实现的呢?AliOS Things多bin特性基于AliOS Things的组件化思想,组件化思想是指各个组件之间解耦,组件之间仅通过暴露出来的api接口进行交互,这样子就可以动态调整组件的位置。多bin特性就是在保有基本组件的基础上(如内核组件必属于kernel模块),动态调整其他组件来实现fota升级空间消耗的最优化(比如cloud组件可以动态在kernel、framework模块间切换,如果要最小ota备份区间,可以调整组件使得kernel、framework bin的codesize维持差不多,因为ota备份空间取kernel、framework、app bin的最大值)。

接下来我们具体分析下AliOS Things的多bin特性实现:

1、首先对组件类型要进行区分:

在AliOS Things编译体系的组件makefile 中增加了$(NAME)_TYPE变量,标明组件的类型,各个bin包含哪些组件类型如下:
$(NAME)_TYPE: app、framework、kernel、app&framework、framework&kernel、app&kernel、share(三bin共享)、默认
app bin: app、app&framework、app&kernel、share、默认
framework bin:framework、app&framework、framework&kernel、share
kernel bin: kernel、app&kernel、framework&kernel、share
注意:framework、kernel组件理论上必须标明组件类型,app组件可标可不标

2、Syscall函数调用方式说明:

AliOS Things 多bin特性的syscall方式是在扁平地址空间中的函数数组访问,而且在基于组件化的思想下,syscall是分布在各个组件中,可以灵活配置成syscall函数或者取消,使用宏来标识需要暴露的syscall接口,因为syscall接口是kernel暴露给framework、app或者framework暴露给app的,故在kernel和framework模块的组件中使用AOS_EXPORT宏来进行标识:

#define AOS_EXPORT(ret,fun,argstype...)

参数说明:
ret:返回值类型
fun:函数名
argstype:参数类型,中间用逗号分隔
示例:

Int aos_get_hz(void)
{
return RHINO_CONFIG_TICKS_PER_SECOND;
}
AOS_EXPORT(int,aos_get_hz, void);

使用注意点:
1、宏支持的可变参数类型前面必须是格式化参数项;
2、函数指针类型参数,请去掉fn,如int (*fn)(char *, int)
3、宏不支持在头文件中定义,必须在.c文件中定义,如果只有库文件,没有头文件,请把函数的宏放置在kernel模块或者framework模块的syscall文件中,分别是syscall_ktbl.c和syscall_ftbl.c

对AOS_EXPORT宏的解析是在编译过程中调用python脚本解析的,根据用户设定的宏参数,生成ksyscall和fsyscall的syscall数组和对应函数文件,脚本自动生成的文件在out/syscall目录下。

3、多bin相关文件及调用方式:

AliOS Things 多bin特性分别包含了kernel/ksyscall、framework/fsyscall、app/usyscall三个目录:
ksyscall:kernel syscall函数的数组文件
fsyscall:framework syscall函数的数组文件和kernel syscall函数在frame中的实现
usyscall:fsyscall函数在app中的实现
以mk3060芯片相应组件为例说明组件在各bin中分布以及多bin启动过程说明:

d2674692cc0b29cae0ba8293e0f80ea0a78b2974

python脚本解析AOS_EXPORT宏,自动生成相应的syscall文件,如下图说明kernel、framework、app目录中的syscall文件以及脚本生成在out目录下的对应文件:

e78aa1c022123c21477dd076999509cfd91b4478

用户在移植多bin特性的时候,因为多bin特性可以单独编译,需要增加kernel、framework、app的ld链接文件,并对相应的空间布局做相应的调整。

小结

AliOS Things 多bin特性致力于 降低硬件成本,让应用开发者更高效开发。多bin特性随着版本在不停迭代,希望有更多开发者参与其中,让多bin特性更简洁、高效、好用,让多bin特性在实际场景中发挥更大作用,致力于AliOS Things生态发展。有什么需求或者指教,欢迎访问github官网:https://github.com/alibaba/AliOS-Things


目录
相关文章
|
监控 芯片 Windows
保姆级ESP-IDF开发环境搭建
保姆级ESP-IDF开发环境搭建
2154 1
|
算法 搜索推荐 数据挖掘
AB实验设计
AB实验的原理、优缺点及流程
2504 0
AB实验设计
|
4月前
|
人工智能 数据挖掘 调度
什么是OPC一人公司?
本文解析AI智能体时代兴起的“一人公司”(OPC)与“一人部门”(OPD)新范式,阐释其依托ChatGPT、Midjourney、Dify、Coze等工具实现内容生成、运营、开发、交付全链路闭环的底层逻辑,并对比传统模式,揭示AIAGC(智能体自主生成)带来的生产力跃迁与应用前景。
|
4月前
|
人工智能 搜索推荐 数据挖掘
数据挖掘有哪些数据来源?一文盘点数据挖掘的公开数据来源!
本文系统梳理了AI时代必备的优质公开数据源,涵盖政府宏观、企业金融、互联网、电商、媒体、交通及行业研究七大类共20+平台,如国家统计局、EDGAR、Statcounter、猫眼专业版等,助你低成本、高效率获取高质量数据,夯实AI应用根基。
|
4月前
|
消息中间件 人工智能 Java
“八股文”已死?2026技术校招面试官亲述:我们现在只问这三个真实项目题
本文揭示校招面试新趋势:面试官已从考察“知识记忆”转向甄别“真实工程能力”。通过三个核心项目题,聚焦候选人是否独立解决过真实问题——有数据、有工具、有复盘。背八股文难通关,唯真做项目者胜出。
|
自然语言处理 搜索推荐 数据可视化
阿里云Chat App消息服务如何助力企业高效触达全球用户?
阿里云Chat App消息服务,一站式打通WhatsApp、Viber、Facebook、Instagram、短信、邮件等全球主流通信渠道,助力企业高效触达C端用户。解决多通道接入开发复杂、维护成本高、体验不一致等痛点,支持消息模板、智能回落、自动化流程与大模型集成,广泛应用于跨境电商、物流、游戏等行业,提升营销转化与用户互动体验。
585 0
|
Linux 网络安全 数据安全/隐私保护
在CentOS 7.9中安装sshpass教程
如果在控制台显示出sshpass的使用方法,那就说明我们的大餐已经准备好,sshpass已经成功安装。 以上就是在 CentOS 7.9 中安装 sshpass 的彩色步骤,专业而生动,就像大厨在厨房一样顺利。
833 8
JVM进阶调优系列(5)CMS回收器通俗演义一文讲透FullGC
本文介绍了JVM中CMS垃圾回收器对Full GC的优化,包括Stop the world的影响、Full GC触发条件、GC过程的四个阶段(初始标记、并发标记、重新标记、并发清理)及并发清理期间的Concurrent mode failure处理,并简述了GC roots的概念及其在GC中的作用。
|
存储 搜索推荐 安全
介绍几个常用的电商API接口及其应用场景。(一篇文章全清楚)
电商API接口是电商平台高效运营的核心技术支撑,涵盖商品管理、订单管理、支付、客户管理、营销推广和数据分析六大模块。商品管理API实现商品信息的精准上传与动态调整;订单管理API确保订单全流程透明可控;支付API保障交易安全便捷;客户管理API通过数据分析提供个性化服务;营销推广API助力精准营销;数据分析API为决策提供数据支持。各API协同工作,推动电商行业创新发展,构建智能便捷的电商生态。
1355 12
|
JavaScript Android开发
手机也能轻松搭建个人博客,使用安卓Termux+Hexo建立自己的网站
手机也能轻松搭建个人博客,使用安卓Termux+Hexo建立自己的网站
790 1