Zephyr RTOS是什麼,爲什麼要學,怎樣學。

IoT軟件開發過程中問題的提出

    在我的大約15年嵌入式系統開發經歷中,從AT80C51, Atmega系列,PIC16,STM8, dsPIC, TMS320F28335,再到STM32F0,F1,F4,F7的開發,使用的都是Keil,IAR,CCS,這些集成度很高的開發環境。這些高集成度IDE在傳統的嵌入式開發上的效率極高。但當我進入IOT領域,面對IOT那嚴重碎片化的問題域時,用傳統的開發方式去應對,感覺是N種選擇*N種組件*N種雲,雖然在KEIL/IAR中也是能用GUI來比較好地去管理RTOS、中間件、芯片和板載BSP,也有現成的可視化組件管理和代碼生成器,但可視化GUI去應對N*N*N的配置複雜度,效率很低;而使用腳本去管理多變和複雜的組件和構建工程反而是最高效率的(類比於嵌入式Linux)。

   又由於我最近幾年有一半的時間是在linux下進行C、C++和Qt的開發,對於Linux的開發實踐也越來越認同,這也是我開始關注Zephyr的最主要原因,因爲如果我一直是在Windows下開發,絕不可能跳出原來的那個視野。

Zephyr RTOS是什麼

    zephyr操作系統是一個用於資源受限和嵌入式系統的小型內核(出自名門),針對的應用場景,從簡單的嵌入式環境傳感器和可穿戴設備到複雜的嵌入式控制器、智能手錶和物聯網無線應用程序。
    Zephyr內核支持多種體系結構,包括ARM Cortex-M, Intel x86, ARC, NIOS II, Tensilica Xtensa and RISC-V 32.。官網上列出支持的Boards非常多。

爲什麼要學Zephyr

   首先打擊一下Zephyr, 一些朋友不大看好Zephyr的原因很多,最主要的原因大概如下:
    (1)開發習慣和傳統的嵌入式MCU開發差別太大(但和嵌入式Linux的開發哲學很接近)。
    (2)Zephyr生態的學習成本比較高,一下子想到的就有python, sh, git, west, CMake,make, qemu, posix,這些在採用KEIL/IAR這些集成開發環境來管理和迭代整個MCU項目時,根本不需要學。
    (3)就是官網上列出支持的Boards雖然非常多,但是,這些板中,相當部份的板級支持離拿來應用於生產環境還需要開發者根據模板完善板級驅動才行,由於Zephyr的體系結構移植和板級驅動目前還不如在KEIL和IAR下來得方便,這也是很多人不看好Zephyr生態的原因。
    (4)Zephyr生態目前還沒有支持廣泛使用的Keil, IAR等商用IDE.

   針對上面的三點,我暫時的總結是:
   (1)傳統的MCU開發用傳統MCU開發模型很好,但是如果是針對IOT場景,Zephyr生態沿自Linux的開發模型很可能是一個很好的選擇,因爲Linux的開發模型是專業的程序員經過很多年總結出來的應對大碎片化、大複雜度和大項目構建的開發模型。借用Unix哲學中的原則就是:避免手工hack,儘量編寫程序去生成程序。專業領域,需要的是對專業開發者友好的工具,而不是普通人友好。
   (2)其實這是一個自我革命與否的選擇,Zephyr生態就是一種針對IOT嵌入式軟件開發的新的最佳實踐中的一種實踐。由於現在IOT推動市場需求變得越來越多樣化和複雜,要求MCU項目可以快速持續迭代,可以應對N種無線協議(Zigbee,BLE,Thread,etc)、可以對接N種雲(MQTT,COAP,HTTP,etc),還要有方便集成開源組件到MCU項目中的能力。這些要求,用傳統的基於IDE圖形界面打鉤鉤的方式,靈活性太低;而現代的開發思想(比如:腳本化、自動化、版本控制、測試驅動、敏捷快速迭代)纔是我們MCU開發者必須要進化的方向。
  (3)Zephyr正在急速迭代中,一但Zephyr的完成度達到一個很好的折中臨界點(第一個LTS已釋放出來了),zephyr將會起飛。並且由於zephyr的開發方式和linux的開發方式很相似,將會吸引一大批真正專業的開發者進入到IoT領域中來。當正反饋開始,板級BSP的移植將會變很容易,因爲到時有很多大牛的移植可以參考,借鑑。
    (4)現在可以用CMake生成支持Eclipse MCU的工程,我試了下,還不錯,至於Keil and IAR,其實Zephyr Project已在積極推進中,但還未釋放出來而已。

    一句話,適用於IOT的RTOS,不止Zephyr,傳統的FreeRTOS, RT-Thread, 面向IoT的AliOS Things, mbed-os, AWorks等等也是很好的選擇,當然,當前在生產上使用Zephyr不是一個好的實踐,但是學習下Zephyr的先進理念,絕對會有一個好收穫。

怎樣學Zephyr

    Zephyr從最初的只支持linux下開發,到現在同時支持Windows下進行開發,說明了Zephyr想吸引儘可能多的開發者加入Zephyr中來。但如果想要真正高效地使用Zephyr這個生態,個人感覺還是在ubuntu是最佳的選擇。因爲Zephyr是由linux基金會管理的,Zephyr的基因來自Linux進化了多年的最佳實踐。

   社區驅動的Zephyr生態有優點,也有缺點,一個很大的缺點就是不象在商用開發環境下那樣“易用”,Zephyr沒有向開發者隱藏太多的細節,初學者開始學時會非常興奮,照着文檔中的Getting Started Guide ,執行下面的兩行命令,就運行了一個簡單的hello world.

west build -b qemu_x86 samples/hello_world
west build -t run

    開始得確很有成就感,但當想在實際的項目上使用Zephyr時,卻感覺不知如何下手開始,更多的,比如我,開始時也一下子摸不着從那入手學習Zephyr比較好。

 我現在的心得如下:

    (1)學習Zephyr前,要大概入門一下Python, Qemu, CMake, Git, Ninja, West(是Zephyr的meta-tool, 簡化了Git管理、構建和調試,要掌握)。

    (2)好的IDE能使學習事半功倍,當前主流的Zephyr的開發環境是用visual studio code或者eclipse來搭建,我使用eclipse來搭建,只是個人習慣,不過,CMake支持把Zephyr項目構建爲支持Eclipse的Prj。如下圖所示,是我用eclipse mcu作爲Zephyr的具體項目的集成IDE。

 (3)個人感覺不要一上來就從源碼入手來學,因爲Zephyr 1.14 Release已釋放,已有一個比較長期的穩定的API,我們可以先從API這層抽象入手,然後再在理解API爲目的的前提下去看源碼,然後就到熟練使用IDE來調試代碼,再下來就是掌握zephyr的驅動開發和如何裁剪內核模塊和組件。

上面的總結只代表本人當前的心得,希望對你和將來的我(心得也是要不斷迭代的)都有所幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章