Chromebook 启动流程¶
大多数使用设备树的最新 Chromebook 都使用开源的 depthcharge 引导加载程序。Depthcharge 期望将操作系统打包为 FIT 镜像,其中包含操作系统镜像以及设备树集合。由 depthcharge 从 FIT 镜像 中选择正确的设备树并将其提供给操作系统。
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}" 兼容字符串,则可以获得最大的灵活性。 如果这样做,如果您获得一个新的板修订版并尝试在其上运行旧软件,那么我们将至少选择我们所知道的最新设备树。