| # 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`). |