這篇文章,來源于GitHub : https://github.com/alibaba/AliOS-Things/wiki/AliOS-Things-Technical-Overview.zh 零妖是勤勞的搬運工。
技術架構總覽
AliOS Things是一款由阿裡巴巴開發的輕量級物聯網作業系統。
它在2017年杭州雲栖大會中問世,并在同年10月20号于github:
https://github.com/alibaba/AliOS-Things開源。
架構概述
AliOS Things的架構可以适用于分層架構群組件化架構。從底部到頂部,AliOS Things包括:
- 闆級支援包(BSP):主要由SoC供應商開發和維護
- 硬體抽象層(HAL):比如WiFi和UART
- 核心:包括Rhino實時作業系統核心、Yloop, VFS, KV 存儲
- 協定棧:包括TCP/IP協定棧(LwIP),uMesh網絡協定棧
- 安全:安全傳輸層協定(TLS),可信服務架構(TFS)、可信運作環境(TEE)
- AOS API:提供可供應用軟體和中間件使用的API
- 中間件:包括常見的物聯網元件和阿裡巴巴增值服務中間件
- 示例應用:阿裡自主開發的示例代碼,以及通過了完備測試的應用程式(比如Alinkapp)
所有的模組都已經被組織成元件,且每個元件都有自己的.mk檔案,用于描述它和其它元件間的依賴關系,友善應用開發者按需選用。
結構框圖

檔案夾結構
檔案夾名稱 | 内容描述 |
---|---|
board | 評估闆(如STM32L496G-Discovery) |
build | 編譯架構 |
device | 連接配接MCU/SoC的外設,比如支援使用AT指令的WiFi系列模組 |
example | 代碼示例,通過了完備測試的應用程式(比如Alink) |
framework | IoT 通用元件 |
include | 系統頭檔案 |
kernel | 包括Rhino和協定棧 |
platform | 晶片架構支援的相關檔案 |
security | 包括TLS,TFS, TEE在内的安全元件 |
tools | 指令行界面(CLI)和用于建立遠端裝置中心的testbed工具 |
utility | IoT通用軟體庫,比如 cJSON |
test | UT測試用例 |
核心介紹
Rhino 實時作業系統核心
Rhino是AliOS Things内部設計和開發的實時作業系統。它具有體積小、功耗低、實時性強和調試友善等特點。Rhino提供了豐富多元的核心原語,包括緩沖隊列,環形緩沖區、定時器、信号量、互斥量、先入先出隊列、事件等。
體積小
Rhino為大多數核心對象提供靜态和動态配置設定。為小記憶體塊設計的記憶體配置設定器既支援固定塊又支援可變塊,它還可以支援多個記憶體區域。
大部分的核心特性,如work queue,和記憶體配置設定器,都可以通過修改k_config.h檔案進行配置和裁剪。
由于元件可配置和可裁剪,可以讓最終編譯出的Rhino鏡像盡可能小,使其可以被燒錄進資源非常有限的裝置中。
功耗低
對于物聯網裝置來說,硬體功率至關重要,因為電量是有限的。如果系統消耗電量過快,它将很快沒電。Rhino提供了CPU的tickless idle 模式來幫助系統節約電能和延長使用時間。
通常情況下,當CPU沒有執行操作時,它将執行一個處理器指令(對于ARM來說的WFI,對于IA32位處理器來說的HLT),進入低功耗狀态。此時,CPU寄存器的資訊被儲存,系統的tick clock interrupts會在每個tick時刻喚醒CPU。
為了比正常模式節省更多的電量,Rhino為CPU提供了tickless idle模式。當作業系統檢測到有一個固定時間(多個ticks或更長時間)的空閑後,它将進入tickless idle模式。系統做好中斷配置,并把CPU置于C1模式,那時system tick clock中斷不再被觸發,system tick的計數也将停止。CPU會保持低耗電狀态直到tickless idle時間結束。然後,當system tick timer interrupt再次被觸發時,喚醒CPU從C1模式回到C0模式,為ticks計算好補償時間并繼續計數。
實時性
Rhino提供了兩個排程政策,基于優先級的搶占式排程和round-robin循環排程政策。對于兩個排程政策而言,具有最高優先級的任務都是被優先處理的。
基于優先級的搶占式排程器會在遇到比目前運作的任務具有更高優先級任務時搶占CPU。這意味着,如果出現一個任務比目前任務具有更高優先級,核心将立即儲存目前任務的context,并切換到高優先級的任務的context。是以,核心保證CPU總是優先處理優先級最高的任務。
round-robin排程器通過時間片來為各任務配置設定CPU資源。在一組具有相同優先級的任務中,每個任務都會被安排運作一個固定的時間長度,或者說時間片,之後CPU将處理下一個任務。是以,在一個任務阻塞之前,其他任務不能搶奪到處理器資源。當時間片失效時,系統将運作該優先級就緒隊列中的最後一個任務。
友善調試
Rhino 可以支援stack溢出、記憶體洩漏、記憶體損壞的檢測,這有助于開發人員找出棘手問題的根源。結合AliOS Studio的內建開發環境(IDE),Rhino的追蹤功能将實作整個系統運作活動的可視化。
Yloop 事件架構
Yloop是
的異步事件架構。借鑒了
libuv及嵌入式業界常見的event loop,綜合考慮使用複雜性,性能,及footprint,實作了一個适合于MCU的事件排程機制。Yloop提供了一套機制來統一排程管理IO(主要是socket),定時器,執行函數和事件,在大大降低了記憶體的使用的同時,避免了多線程程式設計的複雜性。
每個Yloop執行個體(aos_loop_t)與特定的任務上下文綁定。主任務以外的任務也可以建立自己的Yloop執行個體。多Yloop執行個體也可以被建立,其中每個instance都被綁定到一個單一的任務,讓強大的硬體獲得更好的性能。
鍵值對存儲(KV)
KV元件是AliOS Things中一個以Key-Value方式進行持久化存儲的輕量級元件,主要為基于Nor Flash的小型MCU裝置提供通用的Key-Value持久化存儲接口。它的優勢和特征包括:
- 更少的擦寫次數來延長flash的使用壽命
- 電源安全,沒有中間狀态将存在
- 友善使用,關鍵碼值支援二進制格式資料
- 最低支援Flash的大小是8KB
協定棧介紹
為了幫助裝置更容易地連接配接到雲端,AliOS Things通過靈活的方式提供協定棧。
面向IP裝置:
- 為直接連接配接的SoC提供了測試良好的LwIP協定棧,包括WiFi SoC,MCU+SDIO/SPI WiFi子產品等。
- 為連接配接了通信子產品(如WiFi,NB,GPRS)的MCU提供了SAL
- 提供uMesh去建構更複雜的網狀網絡拓撲
對于非IP裝置:
- LoRaWAN協定棧已經內建到系統中
- 提供BLE标準的API和BLE 協定棧
在不久的将來,LoRaWAN和BLE将被內建。
TCP / IP協定棧(LwIP)
AliOS Things擁有一個基于LwIP V2.0.0 的TCP/IP協定棧,支援IPv4,IPv6,IPv4和IPv6的共存。IPv4和IPv6已經在持續內建(CI)系統中經過良好測試,IPv6也已經在uMesh中被廣泛應用和測試。
套接字适配層(SAL)
SAL為 WiFi/GPRS/NB-IoT系列模組提供了标準的Socket功能。特别地,考慮到AT指令是這個場景中最流行的形式,提供了AT Parser來幫助處理。
有了SAL,開發人員可以使用标準的Socket API通路網絡,這将減少現有軟體元件的內建工作。
自組織網絡協定(uMesh)
uMesh是一個具有如下特征的mesh:
- 無縫支援IPv4 和IPv6
- RF标準獨立,支援WiFi,BLE, 802.11和802.15.4等通信媒介
- 支援不同通信媒介間的異構組網
- 支援樹狀拓撲,網狀拓撲和分層樹狀網格拓撲
- 支援低功耗特性
- 使用ID2對裝置進行認證,AES-128對資料進行加密
安全性介紹
安全傳輸層協定(TLS)
繼承于mbedtls, 對footprint進行了高度優化
信任架構服務(TFS)
可以對接大部分安全服務(比如 ID²)的架構
網絡裝置ID(ID²)
可信的IoT裝置身份屬性
密鑰管理(KM)
通過使用硬體的安全功能提供可信的 runtime Root
Ali-Crypto
提供經典算法實作
可信執行環境(TEE)
提供完整的可信執行環境,現可支援C-Sky CK802T,不久的将來可支援ARMV8-M。
中間元件
空中固件更新(FOTA)
FOTA 使裝置固件更新容易。AliOS Things可根據硬體配置給出FOTA解決方案,提供端到端的解決方案。
特征:
- 支援豐富的物聯網協定 (Alink,MQTT ,COAP)
- 支援HTTP / HTTPS / COAP固件下載下傳
- 支援多bin、delta和A/B更新
- 提供OTA HAL友善進入端口
uData
uData架構是基于傳統Sensor Hub概念,結合IoT的業務場景和AliOS Things物聯網作業系統的特點設計而成的一個面對IoT的感覺裝置處理架構。
uData架構主要分kernel和framework兩層,kernel層主要是負責傳感器驅動,硬體端口配置和相關的靜态校準,包括軸向校準等;framework層主要是負責應用服務管理、動态校準管理和對外子產品接口等。
uData的目标範圍服務是物聯網商業服務,像無人機玩具、智能路燈、掃地機器人等。傳感器驅動程式不僅能提供傳感器SDK,還能提供傳感器驅動像ALS,氣壓計,溫度,加速度計,陀螺儀,磁力計等。
物聯網協定
AliOS Things支援豐富的雲端連接配接協定:
- Alink:阿裡雲平台,适用于智能生活; 也包括WiFi配置元件YWSS。
- MQTT:标準MQTT協定;已和阿裡雲物聯網套件良好結合。
- COAP:基于UDP的輕量級協定。和COAP FOTA結合便可為NB-IoT裝置建立一個隻有UDP的系統。
AT 解析器
AT解析器提供了處理AT指令連接配接通信子產品的架構。AT解析器可處理串行流解析;回調OOB可以處理子產品的特殊AT指令。與SAL一起使用,應用程式甚至可以在AT子產品中使用BSD socket。.
工具
AliOS Studio 內建開發環境(IDE)
作為VS代碼插件執行,可提供編輯/編譯/調試功能。詳情請看
uDevice Center
和AliOS Studio一起,它為開發者提供了一個遠端和多裝置的調試環境。借助backbone測試平台架構,基于真實硬體的持續內建(CI)系統可以被友善地建立。
完成
檢視最新版本,要去GitHub檢視。
微信公衆号,偶爾更新。