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成本
芯片厂商、模组厂商预置测试稳定的kernel、framework版本,开发者购买阿里云市场中的模组解决方案,专注于开发app即可
下图更直观的展示了单bin和多bin版本在fota升级上的硬件flash消耗对比:

图片描述
How – 如何实现AliOS Things多bin特性
上面我们了解了什么是AliOS Things 和AliOS Things 多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)TYPEbin(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启动过程说明:

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库风云:老骥伏枥,新秀辈出

戳蓝字“CSDN云计算”关注我们哦!作者:姜洪军“在数据库技术方面,亚马逊落后甲骨文10至20年”。2018年10月23日,甲骨文(Oracle)创始人、执行董事长拉里埃里森,在甲骨文举办的一次大会的主题演讲…

解读阿里云oss-android/ios-sdk 断点续传(多线程)

摘要: oss sdk 断点续传功能使用及其相关原理 前言 移动端现状 随着移动端设备的硬件水平的不断提高,如今的cpu,内存等方面都大大的超过了一般的pc电脑,因此在现今的程序中,合理的使用多线程去完成一些事情是非常有必…

云钻还在吗 苏宁怎么解除实名认证_快手7天怎么养号,5步简易养号方案送上

今天我们聊一聊,新注册的快手号,7天怎么养号?为什么要养号?什么情况下需要养号?一般来说,新账号、播放量不高、很少热门、违规等情况,都需要养号。养号有什么作用?养号的作用很多&am…

将html表格导出到excel表格,table2excel-将HTML表格内容导出到Excel中_html/css_WEB-ITnose...

简要教程jquery-table2excel是一款可以将HTML表格的内容导出到微软Excel电子表格中的jQuery插件。该插件可以根据你的需要导出表格中的内容,不需要的行可以不导出。它文件体积小,使用非常方便。注意导出的Excel文件的格式,默认导出为.xlsx格式…

RDS读写分离,海量数据一键搞定

简介 RDS为用户提供高透明,高可用,高性能,高灵活的读写分离服务。在最近的版本我们基于短连接的用户进行了优化,使得短连接的用户负载均衡更加完善合理。RDS读写分离有如下特性: 易用/透明性 用户只需要在原来的只读…

7 行代码优雅地实现 Excel 文件导出功能?

文章目录一、前言二、Apache poi、jxl 的缺陷三、阿里出品的 EasyExcel,安利一波四、EasyExcel 解决了什么五、快速上手5.1 添加依赖5.2 七行代码搞定 Excel 生成六、特殊场景支持七、Web 下载示例代码八、需要注意的点九、总结一、前言 关于导出 Excel 文件&#…

Docker精华问答 | 用dockerfile制作镜像

Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!1Q:…

日志服务Flink Connector《支持Exactly Once》

摘要: Flink log connector是阿里云日志服务推出的,用于对接Flink的工具,包含两块,分别是消费者和生产者,消费者用于从日志服务中读数据,支持exactly once语义,生产者用于将数据写到日志服务中&…

两个瓶子水怎样一样多_同事每天比我多睡两个小时!省下70万买了地铁站附近房子 杭州姑娘却感叹买房时一定是脑子进了水……...

都市快报讯 你上下班路上要多久?这个问题最近引起网友热议。 昨天,杭州市城乡建设发展研究院发布11月份城区交通运行分析:从上个月起,杭州的交通运行已经开启“冬季模式”,晚高峰出行进一步集中,拥堵程度环…

为什么电路交换不适合计算机网络,电路交换技术不适合计算机数据通信

5.2 分组交换原理上一节介绍了计算机网络的组成和网络的体系结构,其中通信子网的基本任务就是将数据信息从源点传送到S的点,在源点与目的点之间可能要经过许多个链路和中继节点。链路的功能是传输,而中继节点的功能是交换,也就是从…

Kibana:数据分析的可视化利器

摘要: 阿里云Elastisearch集成了可视化工具Kibana,用户可以使用Kibana的开发工具便捷的查询和分析存储在Elastisearch中的数据。除了柱状图、线状图、饼图、环形图等经典可视化功能外,还拥有地理位置分析、数据图谱分析、时序数据分析等高级功…

Kubernetes监控在小米的落地

戳蓝字“CSDN云计算”关注我们哦!转自:小米云技术作者:郭如意本文介绍了高可用、持久存储、可动态调整的Kubernetes监控方案的实现过程。小米的弹性调度平台(Ocean)以及容器平台主要基于开源容器自动化管理平台kuberne…

智能机器人建房子后房价走势_深圳建二手房价引导制度,学习长沙意图明显,距离稳准狠差点意思...

#深圳建二手房价引导制度#大家好,我是勇谈。9月17日,深圳市司法局就《深圳市房地产市场监管办法(修订征求意见稿)》公开征求意见。《征求意见稿》共九章108条。对于修订监管办法的必要性,深圳市司法局也给出了自己的答案“《办法》的相关规定…

idea解决maven pom依赖下载失败

流程1 第一步:打开cmd窗口,进入repository本地仓库 执行命令: 进入本地仓库: cd %userprofile%\.m2\repository第二步:执行以下命令: for /r %i in (*.lastUpdated) do del %i流程2 mvn -U idea:idea

6位技术大咖11月倾心巨献,大数据+安全主题的技术分享合集【阿里云MVP 干货集锦】...

摘要: 大家好,阿里云 MVP 11月大数据安全主题分享新鲜出炉,快来一睹为快吧!哪些MVP的分享最吸引你,你最想支持哪个MVP? 我们将开启为期一周的最人气内容评选,我们将在MVP评论内容下抽取评论最佳…

淤泥管道机器人_丛台区设备管道清洗超高效率

丛台区设备管道清洗超高效率后,施工前对施工人员安全措施安排完毕后,对检查井内剩余的砖、石、部分淤泥等残留物进行人工清理,直到清理完毕为止。  CCTV管道检测是指管道闭路电视检测系统可以实现排水管道的内窥检测工作:可以检…

华为发布开发者召集令,等你来战!

戳蓝字“CSDN云计算”关注我们哦!曾几何时,“上云”只是大型企业和科技领域的特权。时至今日,“云”不再是漂浮空中那般缥缈。普通企业,甚至是个人开发者之间,对“上云”的谈及也如同一日三餐那么平常。对于新兴行业而…

承担集团数万应用、研发人员日常工作,阿里持续交付平台的设计、迭代之道...

摘要: 阿里持续交付平台已经经历了 8 年的不断迭代进化,成长为集团几万应用所依赖的最重要的研发工具,它的效率直接影响着几万研发日常工作。但平台不能只是工具的堆砌,更需要针对互联网时代的研发模式进行深度思考,不…

使用FTP下载文件connect.retrieveFileStream(filename) 获取不到InputStream流,返回null的问题

使用同事的代码做FTP下载文件,InputStream in connect.retrieveFileStream(fileName);执行这句时InputStream总是获取为空 后来把代码改成ftp.retrieveFileStream(new String(dirPath[1].getBytes(“UTF-8”), “ISO-8859-1”));加上字符集指定就好了,…

css怎么让两个table并排_关于CSS布局

水平居中水平居中可能是CSS布局中最常用到的布局,这里介绍几种水平居中的方式1、使用inline-block 和 text-align实现.parent{text-align: center;} .child{display: inline-block;}优点:兼容性好;不足:需要同时设置子元素和父元素…