blob: 8d4aaef17e01bd7f3960fd6ea4aeb7067ef0d4ca [file] [log] [blame] [view]
# Kernel in the build
## Commandline options {#options}
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.
### Specifying options in board or product files
Products and boards can only add kernel commandline options indirectly, via
product assembly:
- As part of an [Assembly Input Bundle](/bundles/assembly/BUILD.gn).
- As part of the [platform configuration rules](/src/lib/assembly/platform_configuration/src/subsystems/)
in assembly.
### Specifying options locally
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](http://go/fuchsia-assembly-overrides).
This takes two steps:
#### 1. Define an assembly overrides target
Define an assembly overrides target in `//local/BUILD.gn` or other `BUILD.gn`
file under `//local/*`.
```gn
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.
#### 2a. Use that target with the "main" product assembly
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:
```posix-terminal
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:
```gn
product_assembly_overrides_label = "//local:custom_kernel_args"
```
#### 2b. Product assemblies other than the "main" assembly
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:
```posix-terminal
fx set ... --assembly-override '//build/images/zedboot/*=//local:custom_kernel_args'
```
or
```posix-terminal
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`).