Kernel commandline options can be added to a product assembly either indirectly (as a platform implementation detail), or directly by a developer for local debug and testing.
Products and boards can only add kernel commandline options indirectly, via product assembly:
For local development, a list of strings that should be appended to the kernel command line can be specified as part of assembly developer overrides.
This takes two steps:
Define an assembly overrides target in //local/BUILD.gn
or other BUILD.gn
file under //local/*
.
import("//build/assembly/developer_overrides.gni") assembly_developer_overrides("custom_kernel_args") { kernel = { command_line_args = [ "foo" ] } }
This only needs to be done once per set of overrides, and can then be re-used with any product assembly or any outdir in your build.
The next step is to tell GN which developer overrides target to use for your product.
For the “main” product assembly (the one named in your fx set
command), you tell GN to use the above-defined product assembly target with the following:
fx set ... --assembly-override //local:custom_kernel_args
Alternatively, an existing args.gn
file can be modified by running fx args
and adding or modifying a line as follows:
product_assembly_overrides_label = "//local:custom_kernel_args"
A slightly more verbose mechanism is required for assemblies other than the “main” product assembly, such as the zedboot or recovery assemblies. This is done using a wildcard-based pattern-match:
fx set ... --assembly-override '//build/images/zedboot/*=//local:custom_kernel_args'
or
fx set ... --assembly-override '//products/microfuchsia/*=//local:custom_kernel_args' When dealing with multiple product assemblies, it's easier to specify this directly in `args.gn`: ```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" } ]
Note that when using a //vendor/*
board, the product assembly target will also be in the //vendor
repo (e.g //vendor/<foo>/products/minimal
).