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开发环境搭建
2129 1
|
算法 搜索推荐 数据挖掘
AB实验设计
AB实验的原理、优缺点及流程
2475 0
AB实验设计
|
3月前
|
算法 Java Nacos
Sentinel 流量治理实战:熔断降级限流 + Nacos 持久化
Sentinel 流量治理如何落地?本文从服务雪崩讲起,带你掌握熔断、降级、限流策略,配合 Nacos 实现规则持久化
569 0
|
3月前
|
云安全 运维 安全
阿里云国际站:AccessKey泄露风险检测与应急处置指南(云安全中心)
AccessKey 泄露已经成为云上安全事故中响应最急迫的一类——攻击者拿到凭证后,不消半小时就能遍历资源、窃取数据或植入后门。没有一套可落地的阿里云 AccessKey 泄露检测与应急处理指南,多数团队往往在账单爆表或业务中断后才开始被动处置。以下从根因与影响入手,把这条最常见的攻击链拆开来看。
258 0
|
9月前
|
SQL 人工智能 供应链
2026年适合制造业的BI产品盘点推荐
制造业数字化渗透率超58%,BI工具已成生产决策核心。IDC报告显示,2025年全球制造BI市场规模达92亿美元,AI赋能、多场景适配成主流。本文梳理10款主流BI工具,瓴羊Quick BI凭借智能小Q的自然语言问数、自动归因、报告生成等能力,连续6年入选Gartner魔力象限,助力企业实现降本提质增效。
|
Linux 网络安全 数据安全/隐私保护
在CentOS 7.9中安装sshpass教程
如果在控制台显示出sshpass的使用方法,那就说明我们的大餐已经准备好,sshpass已经成功安装。 以上就是在 CentOS 7.9 中安装 sshpass 的彩色步骤,专业而生动,就像大厨在厨房一样顺利。
818 8
|
数据可视化 数据挖掘 数据安全/隐私保护
Python实现时间序列动量策略:波动率标准化让量化交易收益更平稳
时间序列动量策略(TSMOM)是一种基于资产价格趋势的量化交易方法,通过建立多头或空头头寸捕捉市场惯性。然而,传统TSMOM策略因风险敞口不稳定而面临收益波动问题。波动率调整技术通过动态调节头寸规模,维持恒定风险水平,优化了策略表现。本文系统分析了波动率调整TSMOM的原理、实施步骤及优势,强调其在现代量化投资中的重要地位,并探讨关键参数设定与实际应用考量,为投资者提供更平稳的风险管理体验。
921 4
Python实现时间序列动量策略:波动率标准化让量化交易收益更平稳
JVM进阶调优系列(5)CMS回收器通俗演义一文讲透FullGC
本文介绍了JVM中CMS垃圾回收器对Full GC的优化,包括Stop the world的影响、Full GC触发条件、GC过程的四个阶段(初始标记、并发标记、重新标记、并发清理)及并发清理期间的Concurrent mode failure处理,并简述了GC roots的概念及其在GC中的作用。
|
传感器 监控 物联网
智能水管理:城市水资源的优化分配
【10月更文挑战第9天】在城市化进程中,水资源管理和分配成为关键议题。面对人口增长、工业与农业需求增加导致的资源短缺和污染问题,智能水管理技术应运而生。本文探讨其概念、技术和应用,展示如何通过现代信息技术、物联网、大数据分析及人工智能手段实现水资源的实时监控、精准预测和智能调度,从而提升城市供水系统的安全性与可靠性,促进可持续发展。
|
JavaScript Android开发
手机也能轻松搭建个人博客,使用安卓Termux+Hexo建立自己的网站
手机也能轻松搭建个人博客,使用安卓Termux+Hexo建立自己的网站
784 1