build 中的内核

命令行选项

内核命令行选项可以间接(作为平台实现细节)添加到产品组件中,也可以由开发者直接添加以进行本地调试和测试。

在主板或产品文件中指定选项

产品和主板只能通过产品组件间接添加内核命令行选项:

在本地指定选项

对于本地开发,应附加到内核命令行的一系列字符串可以指定为程序集开发者替换项的一部分。

此过程涉及两个步骤:

1. 定义程序集替换目标

//local/* 下的 //local/BUILD.gn 或其他 BUILD.gn 文件中定义一个程序集替换目标。

import("//build/assembly/developer_overrides.gni")

assembly_developer_overrides("custom_kernel_args") {
  kernel = {
    command_line_args = [ "foo" ]
  }
}

每组替换项只需执行一次此操作,然后便可将其重新用于 build 中的任何产品 build 或任何 outdir。

下一步是告知 GN 为您的产品使用哪个开发者替换目标。

2a. 将该目标与“主要”产品程序集搭配使用

对于“主要”产品 assembly(即在 fx set 命令中指定的产品 assembly),您可以使用以下命令告知 GN 使用上述定义的产品 assembly 目标:

fx set ... --assembly-override //local:custom_kernel_args

或者,您也可以通过运行 fx args 并添加或修改如下所示的行来修改现有的 args.gn 文件:

product_assembly_overrides_label = "//local:custom_kernel_args"

2b. “主要”程序集之外的产品程序集

对于“主”产品 build 以外的 build(例如 zedboot 或恢复 build),需要使用稍微更详细的机制。这是通过基于通配符的模式匹配完成的:

fx set ... --assembly-override '//build/images/zedboot/*=//local:custom_kernel_args'

fx set ... --assembly-override '//products/microfuchsia/*=//local:custom_kernel_args'

处理多个产品组件时,最好直接在 args.gn 中指定此内容:

product_assembly_overrides = [
  {
    # core products:
    assembly = "//build/images/fuchsia/*"
    overrides = "//local:custom_kernel_args"
  },
  {
    assembly = "//build/images/zedboot/*"
    overrides = "//local:zedboot_overrides"
  },
  {
    assembly = "//products/microfuchsia/*"
    overrides = "//local:zedboot_overrides"
  }
]

请注意,使用 //vendor/* 板时,产品组装目标也会位于 //vendor 代码库中(例如 //vendor/<foo>/products/minimal)。