縱論物聯網(五):非Linux類的物聯網作業系統
在前面介紹物聯網終端設備的文章中,我們已經簡單地介紹了物聯網作業系統。物聯網作業系統的種類非常多,不過其中有很大一部分是基於Linux系統改造的,還有一些系統是商業公司或開源組織開發的,
出於成本或者定制化的需求,開發者往往更青睞開源的物聯網作業系統。開源系統可以大致分為兩大類:
一類是基於Linux系統改造的物聯網OS,如uCLinux、穀歌的Brillo、華為的Lite OS等;
一類是非Linux類物聯網OS,由開源社區或商業公司按照某種開源許可獨立設計實現,如uCOS、FreeRTOS、mbed等。
篇幅有限,本文重點介紹一下非Linux類的物聯網OS,這類系統通常是比較羽量級的即時操作系統,更適合應用於存儲性能有限的MCU。
FreeRTOS(www.freertos.org)是一個迷你的即時操作系統內核,但麻雀雖小,五臟俱全,包括了任務管理、時間管理、信號量、訊息佇列、記憶體管理、記錄功能、軟體計時器、協程等作業系統的基本功能。
FreeRTOS創始人是Richard Barry,最初他設計這個系統的初衷,就是出於自身為工作專案中尋找RTOS的過程很痛苦。商業系統很貴,開源系統也缺乏好的文檔支援。
相對μC/OS-II、embOS等商業作業系統,FreeRTOS作業系統是完全免費的作業系統,源碼公開、可移植、可裁減,可移植到各種單片機上運行,在嵌入式系統尤其是即時操作系統方面應用者眾多,比如著名的智慧手錶Pebble就是用了FreeRTOS。
μC/OS-IIμC/OS-II 是一種基於優先順序的搶佔式多工即時操作系統,
μC/OS-II絕大部分的代碼是用ANSII的C語言編寫的,包含一小部分彙編代碼,使之可供不同架構的微處理器使用。μC/OS-II經過了非常嚴格的測試,甚至都已經運用到美國航空管理局的飛行器上。
μC/OS-II由Micrium公司以原始程式碼的形式發佈,但並不意味著它是免費軟體。可以將其用於教學和私下研究(peaceful research);但是如果將其用於商業用途,
mbed SDK 體系及目錄結構
mBed(mbed.org)是ARM公司官方提供的一套用於快速開發ARM架構單片機應用原型的工具集,包括免費的軟體庫(SDK),硬體設計參考(HDK)和基於Web的線上編譯環境(mBed Compiler)三部分。
由於mBed的代碼和大部分硬體設計都是以開源(permissive Apache 2.0 licence)的方式提供的,
MICO系統架構
2014年7月,MiCO號稱是中國首款物聯網作業系統,由上海慶科(MXCHIP)發佈。根據官方解釋,MiCO的意思是Micro-controller based Internet Connectivity Operating system,是基於微控制器(MCU)的互聯網接入作業系統,這個解釋其實和物聯網作業系統的意思一回事。
MiCO本身包括:介面,框架,核心功能和非核心功能四部分。開發者可以在各種微控制器平臺上,基於MiCO來設計接入互聯網的創新智慧產品。
慶科與阿裡有合作關係,阿裡雲的物聯網套件的C-SDK,也有MiCO系統的版本。關於MiCO的更多資訊,可以去MiCO開發者論壇(mico.io)瞭解。
MynewtMynewt(mynewt.apache.org)是Apache軟體基金會(ASF: Apache Software Foundation)發起的一個開源項目,專注于物聯網應用的即時操作系統。Mynewt的最大特色是包括了低功耗藍牙(BLE4.2)無線傳輸協議棧NimBLE。
Mynewt支援豐富的即時操作系統特徵,可以在不同的硬體平臺上運行,包括ARM Cortex M0-M4微控制器,以及基於MIPS和RISC-V架構的處理器。
ContikiContiki (www.contiki-os.org)是一個適用於有記憶體的嵌入式系統的開源的、高可移植的、支援網路的多工作業系統。包括一個多工核心、TCP/IP 堆疊、程式集以及低能耗的無線通訊堆疊。
Contiki起源于瑞典的大學,基礎內核以及大部分的核心功能是Swedish Institute of Computer Science的Adam Dunkels開發的。
Contiki 採用 C 語言開發的非常小型的嵌入式作業系統,運行只需要幾K的記憶體。Contiki都很受學術機構以及高校的科研人員青睞,常用於無線感測器網路(WSN:Wireless Sensor Network)的研究專案中。
NuttXNuttx(www.nuttx.org) 是一個即時嵌入式作業系統,它很小巧,在微控制器環境中使用,可用於8位元到32位元系統。
NuttX的特色在於完全符合POSIX API標準,完全即時,並完全開放。目前常用于無人機的飛控系統中。
RIOT OSRIOT(riot-os.org)的目標是在物聯網領域起到Linux在互聯網領域那樣的影響力。RIOT是一個開源、免費的作業系統。支援8位到32位的微控制器,可以運行在大多數低功耗物聯網設備上。在GitHub(github.com/RIOT-OS)上可以找到RIOT的源碼。
TinyOSTiny OS是UC Berkeley(加州大學伯克利分校)開發的開放原始程式碼作業系統,專為嵌入式無線傳感網路設計。與Contiki類似,Tiny OS同樣來自於高校,由於其文檔非常完善,其受歡迎程度甚至超過Contiki,不過國內使用者不多。
作業系統基於元件(component-based)的架構使得快速更新成為可能,同時又減小了受傳感網路記憶體限制的代碼尺寸。Tiny OS只需要幾KB的記憶體空間和幾十KB的編碼空間。
ZephyrZephyr儘管是由 Linux 基金會託管的開源項目, 但 Zephyr 是一款完全獨立的作業系統, 並未採用 Linux 代碼。
Zephyr微內核能運行在只有10KB RAM的32位微控制器上,相比之下基於Linux的微控制器專案uClinux需要200KB RAM。
結語除了上面列出來的作業系統,其實還有更多沒有列出來的。就連穀歌也沒閑著,正在秘密開發一個完全獨立於Android的新系統,叫做Fuchsia(燈籠海棠),據說這個系統有可能採用iOS策略,走封閉路線。難道谷歌被安卓碎片化問題傷心了?
物聯網作業系統要比PC OS以及移動OS體量小,開發起來門檻也沒那麼高,很多很小的系統都可以作為商用,所以對於物聯網產品設計者來說還是有很多選擇的。
由上海慶科(MXCHIP)發佈。根據官方解釋,MiCO的意思是Micro-controller based Internet Connectivity Operating system,是基於微控制器(MCU)的互聯網接入作業系統,這個解釋其實和物聯網作業系統的意思一回事。MiCO本身包括:介面,框架,核心功能和非核心功能四部分。開發者可以在各種微控制器平臺上,基於MiCO來設計接入互聯網的創新智慧產品。
慶科與阿裡有合作關係,阿裡雲的物聯網套件的C-SDK,也有MiCO系統的版本。關於MiCO的更多資訊,可以去MiCO開發者論壇(mico.io)瞭解。
MynewtMynewt(mynewt.apache.org)是Apache軟體基金會(ASF: Apache Software Foundation)發起的一個開源項目,專注于物聯網應用的即時操作系統。Mynewt的最大特色是包括了低功耗藍牙(BLE4.2)無線傳輸協議棧NimBLE。
Mynewt支援豐富的即時操作系統特徵,可以在不同的硬體平臺上運行,包括ARM Cortex M0-M4微控制器,以及基於MIPS和RISC-V架構的處理器。
ContikiContiki (www.contiki-os.org)是一個適用於有記憶體的嵌入式系統的開源的、高可移植的、支援網路的多工作業系統。包括一個多工核心、TCP/IP 堆疊、程式集以及低能耗的無線通訊堆疊。
Contiki起源于瑞典的大學,基礎內核以及大部分的核心功能是Swedish Institute of Computer Science的Adam Dunkels開發的。
Contiki 採用 C 語言開發的非常小型的嵌入式作業系統,運行只需要幾K的記憶體。Contiki都很受學術機構以及高校的科研人員青睞,常用於無線感測器網路(WSN:Wireless Sensor Network)的研究專案中。
NuttXNuttx(www.nuttx.org) 是一個即時嵌入式作業系統,它很小巧,在微控制器環境中使用,可用於8位元到32位元系統。
NuttX的特色在於完全符合POSIX API標準,完全即時,並完全開放。目前常用于無人機的飛控系統中。
RIOT OSRIOT(riot-os.org)的目標是在物聯網領域起到Linux在互聯網領域那樣的影響力。RIOT是一個開源、免費的作業系統。支援8位到32位的微控制器,可以運行在大多數低功耗物聯網設備上。在GitHub(github.com/RIOT-OS)上可以找到RIOT的源碼。
TinyOSTiny OS是UC Berkeley(加州大學伯克利分校)開發的開放原始程式碼作業系統,專為嵌入式無線傳感網路設計。與Contiki類似,Tiny OS同樣來自於高校,由於其文檔非常完善,其受歡迎程度甚至超過Contiki,不過國內使用者不多。
作業系統基於元件(component-based)的架構使得快速更新成為可能,同時又減小了受傳感網路記憶體限制的代碼尺寸。Tiny OS只需要幾KB的記憶體空間和幾十KB的編碼空間。
ZephyrZephyr儘管是由 Linux 基金會託管的開源項目, 但 Zephyr 是一款完全獨立的作業系統, 並未採用 Linux 代碼。
Zephyr微內核能運行在只有10KB RAM的32位微控制器上,相比之下基於Linux的微控制器專案uClinux需要200KB RAM。
結語除了上面列出來的作業系統,其實還有更多沒有列出來的。就連穀歌也沒閑著,正在秘密開發一個完全獨立於Android的新系統,叫做Fuchsia(燈籠海棠),據說這個系統有可能採用iOS策略,走封閉路線。難道谷歌被安卓碎片化問題傷心了?
物聯網作業系統要比PC OS以及移動OS體量小,開發起來門檻也沒那麼高,很多很小的系統都可以作為商用,所以對於物聯網產品設計者來說還是有很多選擇的。