總覽
在 Fuchsia 中,硬體支援可依架構、主機板和驅動程式劃分,請參閱 RFC-0111:Fuchsia 初始硬體平台規格。本頁未說明如何新增對新架構的支援。本頁面說明如何為新版新增支援。
請注意,x64 架構本身即為板卡 (可高度設定),因此已獲得支援,因此我們並未在此處加以說明 (但其實作方式可改善,並支援目前無法新增的更多設定)。
如要新增對新板子的支援,我們必須先新增對啟動產品設定的支援。
新增啟動建構設定支援
如要讓開發版本正常運作,您需要:
支援的架構
如要瞭解架構支援程序,請參閱 RFC-0111:Fuchsia 初始硬體平台規格。
系統啟動載入程式和核心支援
新主機板需要一種載入核心的方式,最好是使用支援 Fuchsia 的引導程式。此外,核心必須至少支援早期偵錯機制 (例如序列埠)、中斷控制器和計時器,以核心驅動程式形式提供支援。
主機板必須包含編程機制 (例如在快閃記憶體中儲存內容)。這項操作是更新 Bootloader 的必要步驟。Fuchsia 映像檔可透過這個機制或啟動載入程式提供的支援進行編程。
系統啟動載入程式
在本文件中,Bootloader 是指最終階段的 Bootloader,也就是載入 Fuchsia 核心的啟動程序軟體元件。
系統啟動載入程式可透過多種設定載入 Fuchsia 核心:
- 引導程式支援 Fuchsia:在引導程式中新增對 Fuchsia 的支援是最佳選項。在這種情況下,Zircon 開機映像檔 (ZBI) 規格是由 Firmware SDK 實作。例如,我們為 VIM3 的 U-Boot 新增支援。
- 如果開機載入器不支援 Fuchsia,則必須在核心中新增開機 shim 機制,讓 Fuchsia 版本與開機載入器的開機設施 (例如 Fastboot) 相容。請參閱這篇文章,瞭解 MediaTek 8167 主板的示例。這個啟動補丁會在下列項目中指定所有驅動程式。請注意,您也必須在此處列出啟動補丁。
注意:
- 分區對應功能需要提供足夠大的分區,以符合 Fuchsia 的需求。
- 您必須考量啟動載入器、Fuchsia 核心和任何安全側軟體之間的保留資源,特別是保留的記憶體區域和保留的硬體區塊。舉例來說,某些硬體可能由系統啟動載入程式設定,並受 EL3/EL2 執行的程式碼控制。透過驅動程式從 EL1/0 操控這類裝置,可能會導致行為不穩定。請務必瞭解安全監控器或虛擬機器人可能使用的硬體/周邊裝置。
核心驅動程式
在 Fuchsia 中,大多數的驅動程式都位於使用者空間,但本節所列的驅動程式必須位於核心中。
啟動新電路板時,需要使用某些早期偵錯機制,例如序列埠或 JTAG。如果是序列埠機制,則必須新增 UART 驅動程式庫 (如果核心中尚未提供),例如這裡。驅動程式也加入了 ARM 中斷控制器和計時器支援,例如 gicv3 和泛型計時器。
所有這些驅動程式都必須設定為可供核心使用。如果核心是由支援 Fuchsia 的啟動載入程式啟動,驅動程式就會在 ZBI 中設定,例如在 此處的 U-Boot 中。如果核心是使用啟動墊片啟動,驅動程式就會在墊片中設定,例如 MediaTek 8167 主機板這裡。
注意:
- 例如,您可以新增其他驅動程式,以便透過 PSCI 控制電源。
建構組裝
如要新增板子支援功能,請將新的板子設定新增至建構系統 (gn)。舉例來說,對於 VIM3,board_bootfs_labels
gn 變數 (定義請見此處) 會定義在啟動中載入的內容 (載入至
新增板卡設定後,即可指示建構系統為新板卡建立映像檔。例如:fx set bringup.vim3
後面接著 fx build
(請參閱 fx 工作流程)。
完成這項設定後,即可將新電路板的啟動構建載入目標,並在序列埠中取得殼層 (如果已新增核心序列埠驅動程式庫)。下一步是新增板卡驅動程式庫及其對應的非核心驅動程式,以便提供額外功能。
板卡驅動程式庫
在為板子和建構系統組合新增核心支援後,您必須建立此處的例子,才能在執行階段新增及設定要使用的非核心驅動程式。板卡驅動程式庫會描述及設定板卡的硬體,這些硬體無法透過探測來定位/設定,這在以 ARM64 為基礎的系統中很常見。
注意:
- 驅動程式的設定必須在板卡驅動程式庫中完成,而非在實際驅動程式庫中,這樣才能在組裝時重複使用及模組化。
非核心驅動程式
注意:
- 有時 HW 會在 Bootloader 中刻意初始化,例如顯示標誌。這需要在一般驅動程式中計算。這方面的資訊可透過 ZBI 中的核心引數傳遞。
- 建立可在各個驅動程式間共用的程式庫,或讓驅動程式可從板卡驅動程式進行高度自訂,避免重複,藉此重複使用 SW。
- 請使用系列命名驅動程式和變數,而非特定 SoC,以便更清楚地重複使用和匯總。
- 請勿對引導程式所保留的硬體狀態做出假設 (除了第 1 點所述的已知情況)。硬體可能處於重設狀態,也可能不處於重設狀態。
- 請特別確認所有 GPIO 都處於安全狀態。
- 具體來說,請考量啟動載入程式可能已將 DDR、DVFS、顯示畫面等硬體留在內部,導致設定速度變慢。
新增核心建構設定支援
啟動版本運作後,您需要新增對核心版本產品設定的支援,以便建立可自行更新的系統,其中包含核心系統服務、連線和指標回報。
如要啟用核心版本,您必須擁有可運作的網路堆疊,因為核心版本可透過此方式進行系統偵錯 (例如使用 fx log
和 fx shell
)、更新 (例如使用 fx ota
的執行個體) 和指標回報 (例如使用 fx snapshot
)。
新增完整的系統設定支援
核心版本運作後,您可以定義新的產品設定,整合完整的系統。舉例來說,我們已為 x64 定義 workbench_eng,其中包含網頁瀏覽器和許多其他功能。同樣地,您也可以為其他架構 (例如 ARM64 架構的系統) 新增新產品設定。