在Zephyr項目中使用SoC供應商HAL,加快系統設計流程

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

在Zephyr項目中使用SoC供應商HAL,加快系統設計流程

隨著物聯網設備數量越來越多,物聯網操作系統的裝機量也隨之增加,Zephyr作為一款專門為資源受限設備推出的物聯網操作系統,其具有開源性、模塊化、可配置的優點,自推出以來受到越來越多的開發者的關注,並逐步被各種物聯網設備所採用。為了滿足物聯網的碎片化需求,Zephyr操作系統盡可能支持多種架構,目前包括ARM、x86、ARC、NIOS-II、RISC-V、Xtensa六種架構,在最新的1.9.0內核版本中,Zephyr又增加了對十餘種SoC的支持,內核功能更加完善。

開發者設計的系統不僅包括內核和外設寄存器定義,還包括低層無狀態外設驅動程序和裸機事件驅動程序,這些都由SoC供應商維護,許可常常很寬鬆。然而,這些硬件系統不僅用在Zephyr中,還會用在其他項目中,系統需要更高的成熟度和質量保證測試,因此,我們需要簡化向Zephyr 添加新SoC 和驅動程序的過程,幫助開發者加快產品設計,要做到這一目標,在Zephyr項目中使用SoC供應商HAL十分必要。

開發者可能會問:HAL是什麼?HAL即硬件抽象層,是在具體的硬件平台上抽象出來的一個硬件接口層,這個接口層負責做到具體硬件平台的功能和控制,同時又為其它軟件模塊提供統一的API接口。HAL的出現就是為了將硬件操作和控制的共性抽象出來,向上層軟件提供統一操控接口,以做到其它軟件模塊與底層硬件隔離。有了HAL後,系統在新硬件平台上的移植就變得異常簡單,只需提供新硬件的抽象層即可,Zephyr操作系統通過硬件抽象層可以忽略硬件細節,以一種抽象方式來訪問硬件。

不同的SoC供應商使用不同的HAL,如下圖所示:

在Zephyr項目中使用SoC供應商HAL,加快系統設計流程

SoC供應商提供的抽象級別可以分為三類:第一,事件性HAL驅動程序,如:小巧的Zephyr shim 驅動程序、MCUX 和QMSI;第二,低層、無狀態HAL 驅動程序,如:較大的Zephyr shim 驅動程序、STM32;第三,僅含寄存器定義的抽象級別,如:準原生Zephyr 驅動程序、Atmel、Nordic。

下面,我們以CMSIS和MCUXpresso SDK為例進行具體介紹。CMSIS 是由Arm定義的Cortex 微控制器系統接口標準,包括CMSIS-Core、-SVD、-DSP、-Driver 等,CMSIS-Core 標準化處理器內核訪問和外設定義,Arm 提供通用的Cortex-M 頭文件,供應商提供設備頭文件,Zephyr 內核端口使用CMSIS 訪問NVIC、SCB 寄存器,Zephyr 驅動程序使用CMSIS 訪問外設寄存器。

在Zephyr項目中使用SoC供應商HAL,加快系統設計流程

MCUXpresso SDK通常為NXP Cortex-M MCU 啟用,外設寄存器定義兼容CMSIS-Core,從與硬件文檔相同的來源生成;裸機外設驅動程序為Kinetis和LPC 系列使用類似的API(UART/LPUART/LPSCI、SPI/DSPI/LPSPI 等),屬於無狀態和事件性抽象級別,相互依賴性極小,在所有硬件平台上都經過了測試。

需要說明的是,外部維護的源代碼位於ext/ 中,包含SoC供應商HAL、mbedTLS、TinyCrypt、FatFS、SeggerRTT,許可寬鬆,但不一定是Apache 2.0;許多產品依據BSD 3-clause,如果按原樣導入,改動極小,如果需要修改,可單獨提交,不受Zephyr 編碼樣式約束。

導入流程

1. 將包含源代碼補丁的「代碼組件自述文件README」提交到TSC;

在Zephyr項目中使用SoC供應商HAL,加快系統設計流程

2. TSC 成員是否(通過TSC 投票)同意該提案?

 否–軟件被拒絕

 是–TSC 主席將自述文件轉PO給理事會進行評審

3. 在2周評審期限內,是否有任何理事會成員對文件提出質疑

 否–軟件被接受,而且將自述文件包含在項目的文檔中(酌情放在樹和外部站點中)

 是–理事會將舉行會議,討論否決TSC 提案還是找出其他方法

在Zephyr項目中添加一個新Arm SoC之前需要搞清楚幾個問題:SoC 是否屬於一個現有的產品家族或系列?是否有CMSIS 頭文件可用?許可是否兼容?是否有事件性或無狀態驅動程序可用?許可是否兼容?API 是否兼容?它們是否可用於同一個家族中的其他SoC?如果條件全部滿足,就可以在Zephyr項目中添加所需要的Arm SoC。

通過以上流程可以看出,SoC供應商HAL 減少了自定義Zephyr 代碼的數量,能提供不同的抽象層級,在Zephyr 中已被許多的SoC成功使用,開發者可以審閱輸入流程和git歷史記錄,同時還可以與維護者進行交流。

不過採用SoC供應商HAL也需要權衡一些利弊,比如代碼需要在別處維護,比較難以進行上遊更新;許可對Zephyr是新的,或者不兼容Apache 2.0;還有就是代碼在別處使用時可能出現API不兼容,功能無法做到的問題。

關於Zephyr Zephyr 項目是一款小型且可擴展的操作系統,尤其適用於資源受限的硬件系統,可支持多種架構;該系統高度開源,對於開發人員社區完全開放,開發人員可根據需要對該系統進行二次開發,以支持最新硬件、工具和設備驅動程序;該系統高度模塊化平台,可輕鬆集成任何架構的第三方庫和嵌入式設備。

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!