新增 Jamboard 支援

總覽

在 Fuchsia 中,硬體支援可依架構、主機板和驅動程式劃分,請參閱 RFC-0111:Fuchsia 初始硬體平台規格。本頁未說明如何新增對新架構的支援。

請注意,x64 架構本身被視為在 白板 (可設定高) 中,因此本文並未說明,因為我們已支援這個架構 (雖然實作可以改善,並支援更多目前未在新增的設定)。

如要新增對新板子的支援,我們必須先新增對啟動產品設定的支援。

新增啟動建構設定支援

如要讓啟動程序正常運作,您需要:

  1. 支援的架構
  2. 系統啟動載入程式和核心支援
  3. 建構組合
  4. 已定義板卡驅動程式
  5. 非核心驅動程式

支援的架構

如要瞭解架構支援程序,請參閱 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 主板的示例。這個開機輔助程式會指定下列項目中的所有驅動程式。請注意,您也必須在這裡列出啟動補丁。

注意:

  1. 為滿足 Fuchsia 的需求,分區對應必須提供足夠大的分區。
  2. 您必須考量啟動載入器、Fuchsia 核心和任何安全側軟體之間的保留資源,特別是保留的記憶體區域和保留的硬體區塊。舉例來說,某些硬體可能會由系統啟動載入程式設定,並可能由系統控制在 EL3/EL2 執行的程式碼。透過驅動程式從 EL1/0 操控這類裝置,可能會導致行為不穩定。請務必瞭解安全監控或虛擬機器人可能使用的硬體/周邊裝置。

核心驅動程式

在 Fuchsia 中,大多數的驅動程式都位於使用者空間,但本節所列的驅動程式必須位於核心中。

啟動新電路板時,需要使用某些早期偵錯機制,例如序列埠或 JTAG。如果是序列埠機制,則必須新增 UART 驅動程式 (如果核心中尚未提供),例如這裡。系統也支援 ARM 的中斷控制器和計時器支援功能,例如 gicv3一般計時器

所有這些驅動程式都必須設定為可供核心使用。如果核心是由支援 Fuchsia 的系統啟動載入程式啟動,系統就會在 ZBI 中設定驅動程式 (例如在這裡執行 U-Boot)。如果核心是使用啟動填充碼啟動,驅動程式會在填充碼本身中設定,例如 MediaTek 8167 主機板

注意:

  1. 例如,您可以新增其他驅動程式,以便透過 PSCI 控制電源。

建構組件

為了新增對新 Jamboard 的支援,您需要將新的 board 設定新增至建構系統 (gn)。VIM3board_bootfs_labels

新增板卡設定後,即可指示建構系統為新板卡建立映像檔。例如:fx set bringup.vim3 後面加上 fx build (請參閱備用工作流程)。

完成這項設定後,即可將新電路板的啟動構建載入目標,並在序列埠中取得殼層 (如果已新增核心序列埠驅動程式)。下一步是新增板卡驅動程式及其對應的非核心驅動程式,以便提供額外功能。

板卡驅動程式

在為電路板新增核心支援並完成建構系統組合後,您必須建立此處的範例,才能在執行階段新增及設定要使用的非核心驅動程式。板卡驅動程式會描述及設定板卡的硬體,這些硬體無法透過探測來定位/設定,這在以 ARM64 為基礎的系統中很常見。

注意:

  1. 驅動程式的設定必須在板卡驅動程式中完成,而非在實際驅動程式中,這樣才能在組裝時重複使用及模組化。

非核心驅動程式

一般非核心

注意:

  1. 有時 HW 會在 Bootloader 中刻意初始化,例如顯示標誌。這需要在一般驅動程式中計算。這方面的資訊可透過 ZBI 中的核心引數傳遞。
  2. 如要重複使用 SW,請建立能供各個驅動程式共用的程式庫,或是讓驅動程式可高度自訂,避免發生重複。
  3. 請使用系列命名驅動程式和變數,而非特定 SoC,以便更清楚地重複使用和匯總。
  4. 請勿對引導程式所遺留的硬體狀態做出假設 (除了第 1 點所述的已知情況)。HW 可能處於重設狀態,也可能不處於重設狀態。
    1. 請特別確認所有 GPIO 都處於安全狀態。
    2. 具體而言,說明系統啟動載入程式可能將硬體留在 DDR、DVFS、顯示器等硬體中的慢設定。

新增核心建構設定支援

啟動版本運作後,您需要新增對核心版本產品設定的支援,以便建立可自行更新的系統,其中包含核心系統服務、連線和指標回報。

如要啟用核心建構作業,您需要具備有效的網路堆疊,因為核心版本允許系統偵錯 (例如使用 fx logfx shell 的執行個體)、更新 (例如使用 fx ota) 和指標報告 (例如使用 fx snapshot)。

新增完整的系統設定支援

核心版本正常運作後,只要定義新的產品設定,即可整合整個系統。舉例來說,我們已定義 x64 的 workbench_eng,當中包含網路瀏覽器和許多其他功能。同樣地,您也可以為其他架構新增新產品設定,例如以 ARM64 為基礎的系統。