Chromebook 啟動流程

大多數使用裝置樹的最新 Chromebook 都使用開源的 depthcharge 引導載入程式。Depthcharge 期望將作業系統打包為 FIT 映象,其中包含作業系統映象以及裝置樹集合。由 depthchargeFIT 映象 中選擇正確的裝置樹並將其提供給作業系統。

depthcharge 用來選擇裝置樹的方案考慮了三個變數

  • depthcharge 編譯時指定的板名稱。這是下面的 $(BOARD)。

  • 板修訂號,在執行時確定(可能透過讀取 GPIO 跳線,可能透過其他方法)。這是下面的 $(REV)。

  • SKU 編號,在啟動時從 GPIO 跳線讀取。這是下面的 $(SKU)。

對於最新的 Chromebook,depthcharge 建立一個如下所示的匹配列表

  • google,$(BOARD)-rev$(REV)-sku$(SKU)

  • google,$(BOARD)-rev$(REV)

  • google,$(BOARD)-sku$(SKU)

  • google,$(BOARD)

請注意,一些較舊的 Chromebook 使用的列表略有不同,可能不包括 SKU 匹配,或者可能以不同的方式優先考慮 SKU/rev。

請注意,對於某些板,可能有額外的特定於板的邏輯來將額外的相容性注入到列表中,但這並不常見。

Depthcharge 將遍歷 FIT 映象 中的所有裝置樹,嘗試找到與最具體的相容性匹配的裝置樹。 然後它將遍歷 FIT 映象 中的所有裝置樹,嘗試找到與*第二*最具體的相容性匹配的裝置樹,依此類推。

在搜尋裝置樹時,depthcharge 不關心相容字串落在裝置樹的根相容字串陣列中的哪個位置。 例如,如果我們在板 "lazor" 上,修訂版 4,SKU 0,並且我們有兩個裝置樹

  • “google,lazor-rev5-sku0”, “google,lazor-rev4-sku0”, “qcom,sc7180”

  • “google,lazor”, “qcom,sc7180”

那麼即使 "google,lazor-rev4-sku0" 是該裝置樹中列出的第二個相容項,depthcharge 也會選擇第一個裝置樹。 這是因為它比 "google,lazor" 更具體。

應該注意的是,depthcharge 沒有任何智慧來嘗試匹配“接近”的板或 SKU 修訂版。 也就是說,如果 depthcharge 知道它在板的 "rev4" 上,但沒有 "rev4" 裝置樹,那麼 depthcharge *不會* 尋找 "rev3" 裝置樹。

一般來說,當對板進行任何重大更改時,即使這些更改都不需要在裝置樹中反映出來,板修訂號也會增加。 因此,看到具有多個修訂版的裝置樹是很常見的。

應該注意的是,考慮到上述 depthcharge 具有的系統,如果在支援板的最新修訂版的裝置樹中省略了 "-rev{REV}" 相容字串,則可以獲得最大的靈活性。 如果這樣做,如果您獲得一個新的板修訂版並嘗試在其上執行舊軟體,那麼我們將至少選擇我們所知道的最新裝置樹。