1d201506cSStephen Warren# U-Boot pytest suite 2d201506cSStephen Warren 3d201506cSStephen Warren## Introduction 4d201506cSStephen Warren 5d201506cSStephen WarrenThis tool aims to test U-Boot by executing U-Boot shell commands using the 6d201506cSStephen Warrenconsole interface. A single top-level script exists to execute or attach to the 7d201506cSStephen WarrenU-Boot console, run the entire script of tests against it, and summarize the 8d201506cSStephen Warrenresults. Advantages of this approach are: 9d201506cSStephen Warren 10d201506cSStephen Warren- Testing is performed in the same way a user or script would interact with 11d201506cSStephen Warren U-Boot; there can be no disconnect. 12d201506cSStephen Warren- There is no need to write or embed test-related code into U-Boot itself. 13d201506cSStephen Warren It is asserted that writing test-related code in Python is simpler and more 143aca4a44SMasahiro Yamada flexible than writing it all in C. 15d201506cSStephen Warren- It is reasonably simple to interact with U-Boot in this way. 16d201506cSStephen Warren 17d201506cSStephen Warren## Requirements 18d201506cSStephen Warren 19d201506cSStephen WarrenThe test suite is implemented using pytest. Interaction with the U-Boot console 20d201506cSStephen Warreninvolves executing some binary and interacting with its stdin/stdout. You will 21d201506cSStephen Warrenneed to implement various "hook" scripts that are called by the test suite at 22d201506cSStephen Warrenthe appropriate time. 23d201506cSStephen Warren 24d201506cSStephen WarrenOn Debian or Debian-like distributions, the following packages are required. 25af3fae0bSStephen WarrenSome packages are required to execute any test, and others only for specific 26af3fae0bSStephen Warrentests. Similar package names should exist in other distributions. 27d201506cSStephen Warren 28d201506cSStephen Warren| Package | Version tested (Ubuntu 14.04) | 29d201506cSStephen Warren| -------------- | ----------------------------- | 30d201506cSStephen Warren| python | 2.7.5-5ubuntu3 | 31d201506cSStephen Warren| python-pytest | 2.5.1-1 | 32*11ae93eeSSimon Glass| python-subunit | - | 33af3fae0bSStephen Warren| gdisk | 0.8.8-1ubuntu0.1 | 34af3fae0bSStephen Warren| dfu-util | 0.5-1 | 35af3fae0bSStephen Warren| dtc | 1.4.0+dfsg-1 | 36af3fae0bSStephen Warren| openssl | 1.0.1f-1ubuntu2.22 | 37d201506cSStephen Warren 38d201506cSStephen WarrenThe test script supports either: 39d201506cSStephen Warren 40d201506cSStephen Warren- Executing a sandbox port of U-Boot on the local machine as a sub-process, 41d201506cSStephen Warren and interacting with it over stdin/stdout. 42d201506cSStephen Warren- Executing an external "hook" scripts to flash a U-Boot binary onto a 43d201506cSStephen Warren physical board, attach to the board's console stream, and reset the board. 44d201506cSStephen Warren Further details are described later. 45d201506cSStephen Warren 46d201506cSStephen Warren### Using `virtualenv` to provide requirements 47d201506cSStephen Warren 48d201506cSStephen WarrenOlder distributions (e.g. Ubuntu 10.04) may not provide all the required 49d201506cSStephen Warrenpackages, or may provide versions that are too old to run the test suite. One 50d201506cSStephen Warrencan use the Python `virtualenv` script to locally install more up-to-date 51d201506cSStephen Warrenversions of the required packages without interfering with the OS installation. 52d201506cSStephen WarrenFor example: 53d201506cSStephen Warren 54d201506cSStephen Warren```bash 55d201506cSStephen Warren$ cd /path/to/u-boot 56d201506cSStephen Warren$ sudo apt-get install python python-virtualenv 57d201506cSStephen Warren$ virtualenv venv 58d201506cSStephen Warren$ . ./venv/bin/activate 59d201506cSStephen Warren$ pip install pytest 60d201506cSStephen Warren``` 61d201506cSStephen Warren 62d201506cSStephen Warren## Testing sandbox 63d201506cSStephen Warren 64d201506cSStephen WarrenTo run the testsuite on the sandbox port (U-Boot built as a native user-space 65d201506cSStephen Warrenapplication), simply execute: 66d201506cSStephen Warren 67d201506cSStephen Warren``` 68d201506cSStephen Warren./test/py/test.py --bd sandbox --build 69d201506cSStephen Warren``` 70d201506cSStephen Warren 71d201506cSStephen WarrenThe `--bd` option tells the test suite which board type is being tested. This 72d201506cSStephen Warrenlets the test suite know which features the board has, and hence exactly what 73d201506cSStephen Warrencan be tested. 74d201506cSStephen Warren 75d201506cSStephen WarrenThe `--build` option tells U-Boot to compile U-Boot. Alternatively, you may 76d201506cSStephen Warrenomit this option and build U-Boot yourself, in whatever way you choose, before 77d201506cSStephen Warrenrunning the test script. 78d201506cSStephen Warren 79d201506cSStephen WarrenThe test script will attach to U-Boot, execute all valid tests for the board, 80d201506cSStephen Warrenthen print a summary of the test process. A complete log of the test session 81d201506cSStephen Warrenwill be written to `${build_dir}/test-log.html`. This is best viewed in a web 82d201506cSStephen Warrenbrowser, but may be read directly as plain text, perhaps with the aid of the 83d201506cSStephen Warren`html2text` utility. 84d201506cSStephen Warren 85d70facf8SStephen Warren### Testing under a debugger 86d70facf8SStephen Warren 87d70facf8SStephen WarrenIf you need to run sandbox under a debugger, you may pass the command-line 88d70facf8SStephen Warrenoption `--gdbserver COMM`. This causes two things to happens: 89d70facf8SStephen Warren 90d70facf8SStephen Warren- Instead of running U-Boot directly, it will be run under gdbserver, with 91d70facf8SStephen Warren debug communication via the channel `COMM`. You can attach a debugger to the 92d70facf8SStephen Warren sandbox process in order to debug it. See `man gdbserver` and the example 93d70facf8SStephen Warren below for details of valid values for `COMM`. 94d70facf8SStephen Warren- All timeouts in tests are disabled, allowing U-Boot an arbitrary amount of 95d70facf8SStephen Warren time to execute commands. This is useful if U-Boot is stopped at a breakpoint 96d70facf8SStephen Warren during debugging. 97d70facf8SStephen Warren 98d70facf8SStephen WarrenA usage example is: 99d70facf8SStephen Warren 100d70facf8SStephen WarrenWindow 1: 101d70facf8SStephen Warren```shell 102d70facf8SStephen Warren./test/py/test.py --bd sandbox --gdbserver localhost:1234 103d70facf8SStephen Warren``` 104d70facf8SStephen Warren 105d70facf8SStephen WarrenWindow 2: 106d70facf8SStephen Warren```shell 107d70facf8SStephen Warrengdb ./build-sandbox/u-boot -ex 'target remote localhost:1234' 108d70facf8SStephen Warren``` 109d70facf8SStephen Warren 110d70facf8SStephen WarrenAlternatively, you could leave off the `-ex` option and type the command 111d70facf8SStephen Warrenmanually into gdb once it starts. 112d70facf8SStephen Warren 113d70facf8SStephen WarrenYou can use any debugger you wish, so long as it speaks the gdb remote 114d70facf8SStephen Warrenprotocol, or any graphical wrapper around gdb. 115d70facf8SStephen Warren 116d70facf8SStephen WarrenSome tests deliberately cause the sandbox process to exit, e.g. to test the 117d70facf8SStephen Warrenreset command, or sandbox's CTRL-C handling. When this happens, you will need 118d70facf8SStephen Warrento attach the debugger to the new sandbox instance. If these tests are not 119d70facf8SStephen Warrenrelevant to your debugging session, you can skip them using pytest's -k 120d70facf8SStephen Warrencommand-line option; see the next section. 121d70facf8SStephen Warren 122d201506cSStephen Warren## Command-line options 123d201506cSStephen Warren 124d201506cSStephen Warren- `--board-type`, `--bd`, `-B` set the type of the board to be tested. For 125d201506cSStephen Warren example, `sandbox` or `seaboard`. 126d201506cSStephen Warren- `--board-identity`, `--id` set the identity of the board to be tested. 127d201506cSStephen Warren This allows differentiation between multiple instances of the same type of 128d201506cSStephen Warren physical board that are attached to the same host machine. This parameter is 129d201506cSStephen Warren not interpreted by the test script in any way, but rather is simply passed 130d201506cSStephen Warren to the hook scripts described below, and may be used in any site-specific 131d201506cSStephen Warren way deemed necessary. 132d201506cSStephen Warren- `--build` indicates that the test script should compile U-Boot itself 133d201506cSStephen Warren before running the tests. If using this option, make sure that any 134d201506cSStephen Warren environment variables required by the build process are already set, such as 135d201506cSStephen Warren `$CROSS_COMPILE`. 136d201506cSStephen Warren- `--build-dir` sets the directory containing the compiled U-Boot binaries. 137d201506cSStephen Warren If omitted, this is `${source_dir}/build-${board_type}`. 138d201506cSStephen Warren- `--result-dir` sets the directory to write results, such as log files, 139d201506cSStephen Warren into. If omitted, the build directory is used. 140d201506cSStephen Warren- `--persistent-data-dir` sets the directory used to store persistent test 141d201506cSStephen Warren data. This is test data that may be re-used across test runs, such as file- 142d201506cSStephen Warren system images. 143d201506cSStephen Warren 144d70facf8SStephen Warren`pytest` also implements a number of its own command-line options. Commonly used 145d70facf8SStephen Warrenoptions are mentioned below. Please see `pytest` documentation for complete 146d70facf8SStephen Warrendetails. Execute `py.test --version` for a brief summary. Note that U-Boot's 147d70facf8SStephen Warrentest.py script passes all command-line arguments directly to `pytest` for 148d70facf8SStephen Warrenprocessing. 149d70facf8SStephen Warren 150d70facf8SStephen Warren- `-k` selects which tests to run. The default is to run all known tests. This 151d70facf8SStephen Warren option takes a single argument which is used to filter test names. Simple 152d70facf8SStephen Warren logical operators are supported. For example: 153d70facf8SStephen Warren - `'ums'` runs only tests with "ums" in their name. 1540e5dd786SLiam Beguin - `'ut_dm'` runs only tests with "ut_dm" in their name. Note that in this 155d70facf8SStephen Warren case, "ut_dm" is a parameter to a test rather than the test name. The full 156d70facf8SStephen Warren test name is e.g. "test_ut[ut_dm_leak]". 157d70facf8SStephen Warren - `'not reset'` runs everything except tests with "reset" in their name. 158d70facf8SStephen Warren - `'ut or hush'` runs only tests with "ut" or "hush" in their name. 159d70facf8SStephen Warren - `'not (ut or hush)'` runs everything except tests with "ut" or "hush" in 160d70facf8SStephen Warren their name. 161d70facf8SStephen Warren- `-s` prevents pytest from hiding a test's stdout. This allows you to see 162d70facf8SStephen Warren U-Boot's console log in real time on pytest's stdout. 163d201506cSStephen Warren 164d201506cSStephen Warren## Testing real hardware 165d201506cSStephen Warren 166d201506cSStephen WarrenThe tools and techniques used to interact with real hardware will vary 167d201506cSStephen Warrenradically between different host and target systems, and the whims of the user. 168d201506cSStephen WarrenFor this reason, the test suite does not attempt to directly interact with real 169d201506cSStephen Warrenhardware in any way. Rather, it executes a standardized set of "hook" scripts 170d201506cSStephen Warrenvia `$PATH`. These scripts implement certain actions on behalf of the test 171d201506cSStephen Warrensuite. This keeps the test suite simple and isolated from system variances 172d201506cSStephen Warrenunrelated to U-Boot features. 173d201506cSStephen Warren 174d201506cSStephen Warren### Hook scripts 175d201506cSStephen Warren 176d201506cSStephen Warren#### Environment variables 177d201506cSStephen Warren 178d201506cSStephen WarrenThe following environment variables are set when running hook scripts: 179d201506cSStephen Warren 180d201506cSStephen Warren- `UBOOT_BOARD_TYPE` the board type being tested. 181d201506cSStephen Warren- `UBOOT_BOARD_IDENTITY` the board identity being tested, or `na` if none was 182d201506cSStephen Warren specified. 183d201506cSStephen Warren- `UBOOT_SOURCE_DIR` the U-Boot source directory. 184d201506cSStephen Warren- `UBOOT_TEST_PY_DIR` the full path to `test/py/` in the source directory. 185d201506cSStephen Warren- `UBOOT_BUILD_DIR` the U-Boot build directory. 186d201506cSStephen Warren- `UBOOT_RESULT_DIR` the test result directory. 1873aca4a44SMasahiro Yamada- `UBOOT_PERSISTENT_DATA_DIR` the test persistent data directory. 188d201506cSStephen Warren 189d201506cSStephen Warren#### `u-boot-test-console` 190d201506cSStephen Warren 191d201506cSStephen WarrenThis script provides access to the U-Boot console. The script's stdin/stdout 192d201506cSStephen Warrenshould be connected to the board's console. This process should continue to run 193d201506cSStephen Warrenindefinitely, until killed. The test suite will run this script in parallel 194d201506cSStephen Warrenwith all other hooks. 195d201506cSStephen Warren 196d201506cSStephen WarrenThis script may be implemented e.g. by exec()ing `cu`, `kermit`, `conmux`, etc. 197d201506cSStephen Warren 198d201506cSStephen WarrenIf you are able to run U-Boot under a hardware simulator such as qemu, then 199d201506cSStephen Warrenyou would likely spawn that simulator from this script. However, note that 200d201506cSStephen Warren`u-boot-test-reset` may be called multiple times per test script run, and must 201d201506cSStephen Warrencause U-Boot to start execution from scratch each time. Hopefully your 202d201506cSStephen Warrensimulator includes a virtual reset button! If not, you can launch the 203d201506cSStephen Warrensimulator from `u-boot-test-reset` instead, while arranging for this console 204d201506cSStephen Warrenprocess to always communicate with the current simulator instance. 205d201506cSStephen Warren 206d201506cSStephen Warren#### `u-boot-test-flash` 207d201506cSStephen Warren 208d201506cSStephen WarrenPrior to running the test suite against a board, some arrangement must be made 209d201506cSStephen Warrenso that the board executes the particular U-Boot binary to be tested. Often, 210d201506cSStephen Warrenthis involves writing the U-Boot binary to the board's flash ROM. The test 211d201506cSStephen Warrensuite calls this hook script for that purpose. 212d201506cSStephen Warren 213d201506cSStephen WarrenThis script should perform the entire flashing process synchronously; the 214d201506cSStephen Warrenscript should only exit once flashing is complete, and a board reset will 215d201506cSStephen Warrencause the newly flashed U-Boot binary to be executed. 216d201506cSStephen Warren 217d201506cSStephen WarrenIt is conceivable that this script will do nothing. This might be useful in 218d201506cSStephen Warrenthe following cases: 219d201506cSStephen Warren 220d201506cSStephen Warren- Some other process has already written the desired U-Boot binary into the 221d201506cSStephen Warren board's flash prior to running the test suite. 222d201506cSStephen Warren- The board allows U-Boot to be downloaded directly into RAM, and executed 223d201506cSStephen Warren from there. Use of this feature will reduce wear on the board's flash, so 224d201506cSStephen Warren may be preferable if available, and if cold boot testing of U-Boot is not 225d201506cSStephen Warren required. If this feature is used, the `u-boot-test-reset` script should 2263aca4a44SMasahiro Yamada perform this download, since the board could conceivably be reset multiple 227d201506cSStephen Warren times in a single test run. 228d201506cSStephen Warren 229d201506cSStephen WarrenIt is up to the user to determine if those situations exist, and to code this 230d201506cSStephen Warrenhook script appropriately. 231d201506cSStephen Warren 232d201506cSStephen WarrenThis script will typically be implemented by calling out to some SoC- or 233d201506cSStephen Warrenboard-specific vendor flashing utility. 234d201506cSStephen Warren 235d201506cSStephen Warren#### `u-boot-test-reset` 236d201506cSStephen Warren 237d201506cSStephen WarrenWhenever the test suite needs to reset the target board, this script is 238d201506cSStephen Warrenexecuted. This is guaranteed to happen at least once, prior to executing the 239d201506cSStephen Warrenfirst test function. If any test fails, the test infra-structure will execute 240d201506cSStephen Warrenthis script again to restore U-Boot to an operational state before running the 241d201506cSStephen Warrennext test function. 242d201506cSStephen Warren 243d201506cSStephen WarrenThis script will likely be implemented by communicating with some form of 244d201506cSStephen Warrenrelay or electronic switch attached to the board's reset signal. 245d201506cSStephen Warren 246d201506cSStephen WarrenThe semantics of this script require that when it is executed, U-Boot will 247d201506cSStephen Warrenstart running from scratch. If the U-Boot binary to be tested has been written 248d201506cSStephen Warrento flash, pulsing the board's reset signal is likely all this script need do. 249d201506cSStephen WarrenHowever, in some scenarios, this script may perform other actions. For 250d201506cSStephen Warrenexample, it may call out to some SoC- or board-specific vendor utility in order 251d201506cSStephen Warrento download the U-Boot binary directly into RAM and execute it. This would 252d201506cSStephen Warrenavoid the need for `u-boot-test-flash` to actually write U-Boot to flash, thus 253d201506cSStephen Warrensaving wear on the flash chip(s). 254d201506cSStephen Warren 2555b2beab5SStephen Warren#### Examples 2565b2beab5SStephen Warren 2575b2beab5SStephen Warrenhttps://github.com/swarren/uboot-test-hooks contains some working example hook 2585b2beab5SStephen Warrenscripts, and may be useful as a reference when implementing hook scripts for 2595b2beab5SStephen Warrenyour platform. These scripts are not considered part of U-Boot itself. 2605b2beab5SStephen Warren 261d201506cSStephen Warren### Board-type-specific configuration 262d201506cSStephen Warren 263d201506cSStephen WarrenEach board has a different configuration and behaviour. Many of these 264d201506cSStephen Warrendifferences can be automatically detected by parsing the `.config` file in the 265d201506cSStephen Warrenbuild directory. However, some differences can't yet be handled automatically. 266d201506cSStephen Warren 267d201506cSStephen WarrenFor each board, an optional Python module `u_boot_board_${board_type}` may exist 268d201506cSStephen Warrento provide board-specific information to the test script. Any global value 269d201506cSStephen Warrendefined in these modules is available for use by any test function. The data 270d201506cSStephen Warrencontained in these scripts must be purely derived from U-Boot source code. 271d201506cSStephen WarrenHence, these configuration files are part of the U-Boot source tree too. 272d201506cSStephen Warren 273d201506cSStephen Warren### Execution environment configuration 274d201506cSStephen Warren 275d201506cSStephen WarrenEach user's hardware setup may enable testing different subsets of the features 276d201506cSStephen Warrenimplemented by a particular board's configuration of U-Boot. For example, a 277d201506cSStephen WarrenU-Boot configuration may support USB device mode and USB Mass Storage, but this 278d201506cSStephen Warrencan only be tested if a USB cable is connected between the board and the host 279d201506cSStephen Warrenmachine running the test script. 280d201506cSStephen Warren 281d201506cSStephen WarrenFor each board, optional Python modules `u_boot_boardenv_${board_type}` and 282d201506cSStephen Warren`u_boot_boardenv_${board_type}_${board_identity}` may exist to provide 283d201506cSStephen Warrenboard-specific and board-identity-specific information to the test script. Any 284d201506cSStephen Warrenglobal value defined in these modules is available for use by any test 285d201506cSStephen Warrenfunction. The data contained in these is specific to a particular user's 286d201506cSStephen Warrenhardware configuration. Hence, these configuration files are not part of the 287d201506cSStephen WarrenU-Boot source tree, and should be installed outside of the source tree. Users 288d201506cSStephen Warrenshould set `$PYTHONPATH` prior to running the test script to allow these 289d201506cSStephen Warrenmodules to be loaded. 290d201506cSStephen Warren 291d201506cSStephen Warren### Board module parameter usage 292d201506cSStephen Warren 293d201506cSStephen WarrenThe test scripts rely on the following variables being defined by the board 294d201506cSStephen Warrenmodule: 295d201506cSStephen Warren 296d201506cSStephen Warren- None at present. 297d201506cSStephen Warren 298d201506cSStephen Warren### U-Boot `.config` feature usage 299d201506cSStephen Warren 300d201506cSStephen WarrenThe test scripts rely on various U-Boot `.config` features, either directly in 301d201506cSStephen Warrenorder to test those features, or indirectly in order to query information from 302d201506cSStephen Warrenthe running U-Boot instance in order to test other features. 303d201506cSStephen Warren 304d201506cSStephen WarrenOne example is that testing of the `md` command requires knowledge of a RAM 305d201506cSStephen Warrenaddress to use for the test. This data is parsed from the output of the 306d201506cSStephen Warren`bdinfo` command, and hence relies on CONFIG_CMD_BDI being enabled. 307d201506cSStephen Warren 308d201506cSStephen WarrenFor a complete list of dependencies, please search the test scripts for 309d201506cSStephen Warreninstances of: 310d201506cSStephen Warren 311d201506cSStephen Warren- `buildconfig.get(...` 312d201506cSStephen Warren- `@pytest.mark.buildconfigspec(...` 313d201506cSStephen Warren 314d201506cSStephen Warren### Complete invocation example 315d201506cSStephen Warren 316d201506cSStephen WarrenAssuming that you have installed the hook scripts into $HOME/ubtest/bin, and 317d201506cSStephen Warrenany required environment configuration Python modules into $HOME/ubtest/py, 318d201506cSStephen Warrenthen you would likely invoke the test script as follows: 319d201506cSStephen Warren 320d201506cSStephen WarrenIf U-Boot has already been built: 321d201506cSStephen Warren 322d201506cSStephen Warren```bash 323d201506cSStephen WarrenPATH=$HOME/ubtest/bin:$PATH \ 324be91691dSLiam Beguin PYTHONPATH=${HOME}/ubtest/py/${HOSTNAME}:${PYTHONPATH} \ 325d201506cSStephen Warren ./test/py/test.py --bd seaboard 326d201506cSStephen Warren``` 327d201506cSStephen Warren 328d201506cSStephen WarrenIf you want the test script to compile U-Boot for you too, then you likely 329d201506cSStephen Warrenneed to set `$CROSS_COMPILE` to allow this, and invoke the test script as 330d201506cSStephen Warrenfollow: 331d201506cSStephen Warren 332d201506cSStephen Warren```bash 333d201506cSStephen WarrenCROSS_COMPILE=arm-none-eabi- \ 334d201506cSStephen Warren PATH=$HOME/ubtest/bin:$PATH \ 335be91691dSLiam Beguin PYTHONPATH=${HOME}/ubtest/py/${HOSTNAME}:${PYTHONPATH} \ 336d201506cSStephen Warren ./test/py/test.py --bd seaboard --build 337d201506cSStephen Warren``` 338d201506cSStephen Warren 339d201506cSStephen Warren## Writing tests 340d201506cSStephen Warren 341d201506cSStephen WarrenPlease refer to the pytest documentation for details of writing pytest tests. 342d201506cSStephen WarrenDetails specific to the U-Boot test suite are described below. 343d201506cSStephen Warren 344d201506cSStephen WarrenA test fixture named `u_boot_console` should be used by each test function. This 345d201506cSStephen Warrenprovides the means to interact with the U-Boot console, and retrieve board and 346d201506cSStephen Warrenenvironment configuration information. 347d201506cSStephen Warren 348d201506cSStephen WarrenThe function `u_boot_console.run_command()` executes a shell command on the 349d201506cSStephen WarrenU-Boot console, and returns all output from that command. This allows 350d201506cSStephen Warrenvalidation or interpretation of the command output. This function validates 351d201506cSStephen Warrenthat certain strings are not seen on the U-Boot console. These include shell 352d201506cSStephen Warrenerror messages and the U-Boot sign-on message (in order to detect unexpected 353d201506cSStephen Warrenboard resets). See the source of `u_boot_console_base.py` for a complete list of 354d201506cSStephen Warren"bad" strings. Some test scenarios are expected to trigger these strings. Use 355d201506cSStephen Warren`u_boot_console.disable_check()` to temporarily disable checking for specific 356d201506cSStephen Warrenstrings. See `test_unknown_cmd.py` for an example. 357d201506cSStephen Warren 358d201506cSStephen WarrenBoard- and board-environment configuration values may be accessed as sub-fields 359d201506cSStephen Warrenof the `u_boot_console.config` object, for example 360d201506cSStephen Warren`u_boot_console.config.ram_base`. 361d201506cSStephen Warren 362d201506cSStephen WarrenBuild configuration values (from `.config`) may be accessed via the dictionary 363d201506cSStephen Warren`u_boot_console.config.buildconfig`, with keys equal to the Kconfig variable 364d201506cSStephen Warrennames. 365