作者:Scott McNutt 高級軟件工程師 DesignLinx Hardware Solutions 公司 smcnutt@designlinxhs.com 嵌入式系統一般分為兩大類(lèi):需要硬實(shí)時(shí)性能的;和不需要硬實(shí)時(shí)性能的。過(guò)去,我們不得不做出艱難抉擇,即選擇實(shí)時(shí)操作系統的性能還是我們鐘愛(ài)的 Linux 系統的豐富特性,然后努力彌補不足之處。 如今,嵌入式開(kāi)發(fā)人員再也不需要在二者之間艱難選擇。非對稱(chēng)多處理 (AMP) 兼備二者的優(yōu)點(diǎn)。幾款新型片上系統 (SoC) 產(chǎn)品集成了多個(gè) CPU、多種標準 I/O 外設和可編程邏輯。例如,賽靈思 Zynq-7000 All Programmable SoC 系列包含一個(gè)雙核 ARM Cortex-A9、標準外設(例如千兆位以太網(wǎng) MAC、USB、DMA、SD/MMC、SPI 和 CAN)以及龐大的可編程邏輯陣列。我們可將這些 SoC 產(chǎn)品作為 Linux/RTOS AMP 系統的基礎,助其實(shí)現高度的靈活性。 典型的 AMP 配置在很多方面類(lèi)似于基于 PCI 的系統,即 Linux 域起到主機作用,RTOS 域起到適配器作用,并有一個(gè)或多個(gè)共享存儲器域用來(lái)實(shí)現兩個(gè)域之間的通信。不過(guò)與 PCI 不同,AMP 配置能更方便、動(dòng)態(tài)地為一個(gè)或另一個(gè)域分配資源(標準外設和自定義邏輯)。此外,Linux/RTOS AMP 系統能根據運行時(shí)間要求——例如各種外部設備的有無(wú)——動(dòng)態(tài)地重新配置可編程邏輯。 靈活程度通常會(huì )與建立 AMP 系統所涉及的復雜性和難度息息相關(guān)。不過(guò)請放心,Linux 開(kāi)發(fā)社區已經(jīng)將很多功能引入到核心,能大大簡(jiǎn)化 AMP 配置與使用。 LINUX 多處理簡(jiǎn)介 就多處理而言,Linux 核心分為兩種:?jiǎn)翁幚砥?(UP) 核心和對稱(chēng)多處理器 (SMP) 核心。無(wú)論有多少個(gè)內核,UP 核心只能在單個(gè)內核上運行。AMP 系統可包含兩個(gè)或更多個(gè)單處理器內核的實(shí)例。 SMP 核心可在一個(gè)內核或同時(shí)在多個(gè)內核上運行(圖 1)?蛇x的這些資源中包括 RTOS 代碼和數據所需的存儲器。 ![]() ![]() 追蹤緩沖區 追蹤緩沖區是自動(dòng)在 Linux 文件系統中作為文件出現的存儲器區域。顧名思義,追蹤緩沖區向遠程處理器提供基本追蹤功能。遠程處理器向緩沖區寫(xiě)入追蹤、調試和狀態(tài)消息,以便通過(guò) Linux 命令行或定制應用進(jìn)行檢查。 在資源表中輸入條目,以請求一個(gè)或多個(gè)追蹤緩沖區。盡管一般包含純文本,但追蹤緩沖區也會(huì )包含二進(jìn)制數據,例如應用狀態(tài)信息或警報指示。 虛擬 I/O 設備 我們還可使用資源表定義虛擬輸入/輸出設備 (VDEV),這種設備主要是支持 Linux 核心與遠程處理器之間消息傳送的幾對共享存儲器隊列。VDEV 定義包括用來(lái)設定隊列大小的字段,以及用來(lái)在處理器之間發(fā)信號的中斷。 Linux 核心可處理虛擬 I/O 隊列的初始化。遠程處理器上運行的軟件只需要在其資源表中包含一個(gè) VDEV 描述,然后在開(kāi)始執行時(shí)使用隊列;剩下的都由核心來(lái)處理。 遠程處理器消息框架 遠程處理器消息 (rpmsg) 框架是基于 Linux 核心的虛擬 I/O 系統的軟件消息總線(xiàn)。該消息總線(xiàn)類(lèi)似于局部區域子網(wǎng)絡(luò ),單個(gè)處理器可在其中通過(guò)共享存儲器創(chuàng )建可尋址端點(diǎn)和交換信息。 核心的 rpmsg 框架起到開(kāi)關(guān)的作用,根據消息中包含的目的地址將消息傳送到相應端點(diǎn)。由于消息報頭包含源地址,因此可在不同處理器之間建立專(zhuān)用連接。 命名服務(wù) 處理器可通過(guò)向 rpmsg 框架的命名服務(wù)發(fā)送消息,以動(dòng)態(tài)宣布特定服務(wù)。命名服務(wù)功能本身用途不是很大。不過(guò),rpmsg 框架允許將服務(wù)名稱(chēng)關(guān)聯(lián)到設備驅動(dòng)程序,以支持驅動(dòng)程序的自動(dòng)加載和初始化。 例如,如果遠程處理器宣布 dlinx-h323-v1.0 服務(wù),那么核心可以搜索、加載和初始化與該名稱(chēng)關(guān)聯(lián)的驅動(dòng)程序。如果系統中服務(wù)被動(dòng)態(tài)安裝在遠程處理器上,那么這樣可大大簡(jiǎn)化驅動(dòng)程序管理。 管理中斷 中斷管理有些棘手,尤其在啟動(dòng)和停止內核時(shí)更是如此。最終,系統需要在遠程處理器啟動(dòng)時(shí)動(dòng)態(tài)地將特定中斷重定向至遠程處理器域,然后當遠程處理器停止時(shí)收回中斷。此外,系統必須保護中斷,防止其被錯誤配置的驅動(dòng)程序誤分配。簡(jiǎn)言之,必須在系統層面管理中斷。 對于 Linux SMP 核心而言,這是一個(gè)常規事件,而且是 SMP 核心在 AMP 配置中更受青睞的另一個(gè)原因。遠程處理器框架能方便地管理中斷,只需來(lái)自設備驅動(dòng)程序的最小支持。 設備驅動(dòng)程序 設備驅動(dòng)開(kāi)發(fā)是個(gè)始終需要關(guān)注的問(wèn)題,因為所需的技能組合可能無(wú)法立刻提供。幸運的是,Linux 核心的 remoteproc 和 rpmsg 框架完成大部分重活;驅動(dòng)程序只需要實(shí)現幾個(gè)標準驅動(dòng)程序例程。功能完整的驅動(dòng)程序可能只需要幾百行代碼。核心源代碼樹(shù)包含嵌入式開(kāi)發(fā)人員可根據自身要求進(jìn)行調整的驅動(dòng)程序范例。 廠(chǎng)商還提供通用的開(kāi)源設備驅動(dòng)程序。DesignLinx Hardware Solutions 提供針對 Linux 和 FreeRTOS 的通用 rpmsg 驅動(dòng)程序。由于通用驅動(dòng)程序沒(méi)有假定所交換消息的格式,因此嵌入式開(kāi)發(fā)人員可將其用于多種 AMP 應用,無(wú)需做任何修改。 ![]() 引腳內移動(dòng) 核心的多處理支持并不局限于同構多處理系統(使用同一類(lèi)型處理器的系統)。以上介紹的所有特性也可以用在異構系統中(具有不同類(lèi)型處理器的系統)。當“在引腳內”移植已有設計時(shí),這些多處理功能尤其有用。 新型 SoC 產(chǎn)品使設計人員能夠方便地將各種硬件設計從印刷電路板移植到片上系統(圖 3)。過(guò)去在 PCB 上作為分立處理器和組件的部分可以完全在 SoC 的引腳內實(shí)現。 ![]() 例如,我們可以使用賽靈思 Zynq-7000 系列 SoC 實(shí)現圖 3 中的初始 PCB 硬件架構,將其中一個(gè) ARM 處理器作為可編程邏輯中的控制 CPU 和軟處理器(例如賽靈思 MicroBlaze™ 處理器),以替代分立處理器。我們可以使用剩余的 ARM 處理器運行 Linux SMP 核心(圖 4)。 將 Linux 添加到初始設計中能夠為 ARM 內核和軟核處理器提供以上描述的所有標準多處理功能(例如啟動(dòng)、停止、重載、追蹤緩沖區和遠程消息)。而且,還帶來(lái)豐富的 Linux 功能集,可支持多種網(wǎng)絡(luò )接口(以太網(wǎng)、Wi-Fi、藍牙)、網(wǎng)絡(luò )服務(wù)(Web 服務(wù)器、FTP、SSH、SNMP)、文件系統(DOS、NFS、cramfs、閃存存儲器)以及其他接口(PCIe、SPI、USB、MMC、視頻)等。這些特性能方便地實(shí)現新功能,無(wú)需對經(jīng)過(guò)檢驗的架構做太大改動(dòng)。 內核不斷涌現 過(guò)去幾年中,針對嵌入式市場(chǎng)的多核 SoC 產(chǎn)品不斷增加,而且很適合用于 AMP 配置。 例如,賽靈思 UltraScale+™ MPSoC 架構包含一個(gè) 64 位四核 ARM Cortex-A53、一個(gè) 32 位雙核 ARM Cortex-R5、一個(gè)圖形處理單元 (GPU) 以及多種其他外設,當然還包括有用的可編程邏輯。這為那些清楚如何駕馭實(shí)時(shí)操作系統的性能以及 Linux 核心的豐富特性集的設計人員提供了沃土。 如需了解如何設計 Linux/RTOS AMP 系統的更多詳情,敬請聯(lián)系DesignLinx Hardware Solutions。 賽靈思聯(lián)盟計劃的高級成員 DesignLinx 專(zhuān)門(mén)從事 FPGA 設計與支持業(yè)務(wù),包括系統設計、原理圖捕捉和電氣封裝/機械工程設計,以及信號完整性設計。 |