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


目录
相关文章
|
传感器 消息中间件 物联网
AliOS Things 系统架构介绍(二)
AliOS Things 系统架构介绍(二)
396 1
|
3月前
|
编译器 C# Android开发
Uno Platform 是一个用于构建跨平台应用程序的强大框架,它允许开发者使用 C# 和 XAML 来创建适用于多个平台的应用
Uno Platform 是一个用于构建跨平台应用程序的强大框架,它允许开发者使用 C# 和 XAML 来创建适用于多个平台的应用
290 8
|
3月前
|
API 开发工具 Android开发
从安装到打包,手把手教你如何在Uno Platform上部署跨平台应用——一篇详尽的开发者指南
【9月更文挑战第7天】Uno Platform 是一个跨平台应用开发框架,利用UWP API构建Web、iOS、Android等多平台应用。本文详述了安装Uno Platform SDK、配置项目支持跨平台、添加主方法以及使用命令行工具进行应用打包的过程,助您快速上手 Uno Platform 并部署应用。通过简单的代码示例,让开发者轻松掌握从安装到发布的核心步骤。
195 2
|
6月前
|
IDE Linux 开发工具
在Qt开发环境中qmake和cmake的区别优势
选择qmake还是CMake,主要取决于项目的需求和开发者的熟悉程度。如果你正在开发一个纯Qt项目,或者是一个不需要复杂构建脚本的小型项目,qmake可能是一个更好的选择。反之,如果你的项目需要处理复杂的依赖关系,或者你想要一个在多种编程环境中都能工作的构建系统,那么CMake可能是更好的选择。
882 2
|
7月前
|
算法 编译器 测试技术
跨平台构建的艺术:使用 CMake 实现项目移植的全面指南
跨平台构建的艺术:使用 CMake 实现项目移植的全面指南
421 5
|
存储 传感器 人工智能
AliOS Things 系统架构介绍(一)
AliOS Things 系统架构介绍(一)
378 0
|
存储 网络协议 物联网
AliOS Things组件功能介绍(一)
AliOS Things组件功能介绍(一)
296 0
|
传感器 数据采集 安全
AliOS Things组件功能介绍(二)
AliOS Things组件功能介绍(二)
230 0
|
安全 物联网 API
AliOS Things组件功能介绍(三)
AliOS Things组件功能介绍(三)
228 0
|
Rust 开发工具 git
性能的极致,Rust的加持,Zed-Dev编辑器快速搭建Python3.10开发环境
快就一个字,甚至比以快著称于世的Sublime 4编辑器都快,这就是Zed.dev编辑器。其底层由 Rust 编写,比基于Electron技术微软开源的编辑器VSCode快一倍有余,性能上无出其右,同时支持多人编辑代码。
性能的极致,Rust的加持,Zed-Dev编辑器快速搭建Python3.10开发环境