AliOS Things 基于组件化思想的多bin特性
摘要: 今年杭州云棲大會上,AliOS Things正式發(fā)布,其中有一個(gè)基于組件化思想的多bin特性,這是AliOS Things有專利保護(hù)的多bin fota升級解決方案的核心
今年杭州云棲大會上,AliOS Things正式發(fā)布,其中有一個(gè)基于組件化思想的多bin特性,這是AliOS Things有專利保護(hù)的多bin fota升級解決方案核心。隨著我們不斷的版本迭代,這里很高興和大家分享下多bin基于AliOS Things v1.1.2版本的具體實(shí)現(xiàn)。這里我主要以”兩個(gè)W(what、why)、一個(gè)H(how)”來展開。
What – AliOS Things多bin特性是什么
AliOS Things v1.1.2版本實(shí)現(xiàn)的多bin版本(實(shí)現(xiàn)的是三bin方案,分為kernel、framework、app bin),主要是指AliOS Things基于組件化思想能夠獨(dú)立編譯、燒錄、OTA升級kernel、framework、app bin,這三部分通過syscall來實(shí)現(xiàn)彼此的函數(shù)調(diào)用,syscall是在扁平地址空間中通過訪問函數(shù)數(shù)組來實(shí)現(xiàn)的。
app ——> framework ——> kernel
如果有反向調(diào)用的需求,可以使用函數(shù)注冊方式來實(shí)現(xiàn)。
Why – 為什么需要AliOS Things多bin特性
AliOS Things 多bin特性到底能夠帶來什么好處呢?物聯(lián)網(wǎng)設(shè)備數(shù)量眾多,模組種類也繁雜,芯片廠商、模組廠商、終端廠商開發(fā)者都有自己的側(cè)重點(diǎn),但是對AliOS Things來講,我們希望讓芯片、模組廠商降低硬件成本,讓終端廠商開發(fā)者簡易開發(fā),專注于應(yīng)用軟件的開發(fā),而多bin特性就是為此服務(wù)的。
總結(jié)來講,AliOS Things核心利益點(diǎn)就是“減成本、利開發(fā)”,具體如下:
AliOS Things拆分kernel、framework、app bin,支持細(xì)粒度fota升級,減少ota備份空間大小(甚至可以做到0備份空間升級),有效減少硬件flash成本
芯片廠商、模組廠商預(yù)置測試穩(wěn)定的kernel、framework版本,開發(fā)者購買阿里云市場中的模組解決方案,專注于開發(fā)app即可
下圖更直觀的展示了單bin和多bin版本在fota升級上的硬件flash消耗對比:
How – 如何實(shí)現(xiàn)AliOS Things多bin特性
上面我們了解了什么是AliOS Things 和AliOS Things 多bin特性的好處,那AliOS Things 多bin特性是如何實(shí)現(xiàn)的呢?AliOS Things多bin特性基于AliOS Things的組件化思想,組件化思想是指各個(gè)組件之間解耦,組件之間僅通過暴露出來的api接口進(jìn)行交互,這樣子就可以動態(tài)調(diào)整組件的位置。多bin特性就是在保有基本組件的基礎(chǔ)上(如內(nèi)核組件必屬于kernel模塊),動態(tài)調(diào)整其他組件來實(shí)現(xiàn)fota升級空間消耗的最優(yōu)化(比如cloud組件可以動態(tài)在kernel、framework模塊間切換,如果要最小ota備份區(qū)間,可以調(diào)整組件使得kernel、framework bin的codesize維持差不多,因?yàn)閛ta備份空間取kernel、framework、app bin的最大值)。
接下來我們具體分析下AliOS Things的多bin特性實(shí)現(xiàn):
1、首先對組件類型要進(jìn)行區(qū)分:
在AliOS Things編譯體系的組件makefile 中增加了(NAME)TYPE變量,標(biāo)明組件的類型,各個(gè)bin包含哪些組件類型如下:(NAME)_TYPE: app、framework、kernel、app&framework、framework&kernel、app&kernel、share(三bin共享)、默認(rèn)
app bin: app、app&framework、app&kernel、share、默認(rèn)
framework bin:framework、app&framework、framework&kernel、share
kernel bin: kernel、app&kernel、framework&kernel、share
注意:framework、kernel組件理論上必須標(biāo)明組件類型,app組件可標(biāo)可不標(biāo)
2、Syscall函數(shù)調(diào)用方式說明:
AliOS Things 多bin特性的syscall方式是在扁平地址空間中的函數(shù)數(shù)組訪問,而且在基于組件化的思想下,syscall是分布在各個(gè)組件中,可以靈活配置成syscall函數(shù)或者取消,使用宏來標(biāo)識需要暴露的syscall接口,因?yàn)閟yscall接口是kernel暴露給framework、app或者framework暴露給app的,故在kernel和framework模塊的組件中使用AOS_EXPORT宏來進(jìn)行標(biāo)識:
define AOS_EXPORT(ret,fun,argstype…)
參數(shù)說明:
ret:返回值類型
fun:函數(shù)名
argstype:參數(shù)類型,中間用逗號分隔
示例:
使用注意點(diǎn):
1、宏支持的可變參數(shù)類型前面必須是格式化參數(shù)項(xiàng);
2、函數(shù)指針類型參數(shù),請去掉fn,如int (fn)(char , int)
3、宏不支持在頭文件中定義,必須在.c文件中定義,如果只有庫文件,沒有頭文件,請把函數(shù)的宏放置在kernel模塊或者framework模塊的syscall文件中,分別是syscall_ktbl.c和syscall_ftbl.c
對AOS_EXPORT宏的解析是在編譯過程中調(diào)用python腳本解析的,根據(jù)用戶設(shè)定的宏參數(shù),生成ksyscall和fsyscall的syscall數(shù)組和對應(yīng)函數(shù)文件,腳本自動生成的文件在out/syscall目錄下。
3、多bin相關(guān)文件及調(diào)用方式:
AliOS Things 多bin特性分別包含了kernel/ksyscall、framework/fsyscall、app/usyscall三個(gè)目錄:
ksyscall:kernel syscall函數(shù)的數(shù)組文件
fsyscall:framework syscall函數(shù)的數(shù)組文件和kernel syscall函數(shù)在frame中的實(shí)現(xiàn)
usyscall:fsyscall函數(shù)在app中的實(shí)現(xiàn)
以mk3060芯片相應(yīng)組件為例說明組件在各bin中分布以及多bin啟動過程說明:
python腳本解析AOS_EXPORT宏,自動生成相應(yīng)的syscall文件,如下圖說明kernel、framework、app目錄中的syscall文件以及腳本生成在out目錄下的對應(yīng)文件:
用戶在移植多bin特性的時(shí)候,因?yàn)槎郻in特性可以單獨(dú)編譯,需要增加kernel、framework、app的ld鏈接文件,并對相應(yīng)的空間布局做相應(yīng)的調(diào)整。
小結(jié)
AliOS Things 多bin特性致力于 降低硬件成本,讓應(yīng)用開發(fā)者更高效開發(fā)。多bin特性隨著版本在不停迭代,希望有更多開發(fā)者參與其中,讓多bin特性更簡潔、高效、好用,讓多bin特性在實(shí)際場景中發(fā)揮更大作用,致力于AliOS Things生態(tài)發(fā)展。有什么需求或者指教,歡迎訪問github官網(wǎng):https://github.com/alibaba/AliOS-Things
總結(jié)
以上是生活随笔為你收集整理的AliOS Things 基于组件化思想的多bin特性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构是如何装入 CPU 寄存器的?
- 下一篇: 性能提升一个数量级,大杀器来了!| 文内