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/修订版本。

请注意,对于某些板,可能存在额外的特定于板的逻辑,用于将额外的兼容项注入到列表中,但这并不常见。

Depthcharge 将遍历 FIT 映像中的所有设备树,尝试找到一个与最具体的兼容项匹配的设备树。然后,它将遍历 FIT 映像中的所有设备树,尝试找到与第二最具体的兼容项匹配的设备树,依此类推。

在搜索设备树时,depthcharge 不关心兼容字符串在设备树的根兼容字符串数组中的位置。例如,如果我们位于板“lazor”、修订版 4、SKU 0 上,并且我们有两个设备树

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

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

那么 depthcharge 将选择第一个设备树,即使“google,lazor-rev4-sku0”是该设备树中列出的第二个兼容项。这是因为它比“google,lazor”更具体。

应该注意的是,depthcharge 没有任何智能功能来尝试匹配“附近”的板或 SKU 修订版本。也就是说,如果 depthcharge 知道它在板的“rev4”上,但没有“rev4”设备树,那么 depthcharge 不会 查找“rev3”设备树。

一般来说,当对板进行任何重大更改时,即使这些更改都不需要在设备树中反映出来,板修订号也会增加。因此,看到具有多个修订版本的设备树是很常见的。

应该注意的是,考虑到上面的 depthcharge 系统,如果支持板最新修订版的设备树省略了“ -rev{REV}”兼容字符串,则可以实现最大的灵活性。如果这样做,那么如果您获得新的板修订版并尝试在其上运行旧软件,那么我们将至少选择我们知道的最新设备树。