summaryrefslogtreecommitdiff
path: root/docs/reducing_ec_image_size.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/reducing_ec_image_size.md')
-rw-r--r--docs/reducing_ec_image_size.md459
1 files changed, 0 insertions, 459 deletions
diff --git a/docs/reducing_ec_image_size.md b/docs/reducing_ec_image_size.md
deleted file mode 100644
index a165f165ff..0000000000
--- a/docs/reducing_ec_image_size.md
+++ /dev/null
@@ -1,459 +0,0 @@
-# Reducing the EC image size
-
-The EC ToT codebase continues grows as new features are added and for bug
-fixes. This puts pressure on older boards that have limited flash space
-remaining. This document provides some tips for reducing the EC image size.
-
-[TOC]
-
-## Checking the EC image footprint
-
-The EC codebase supports two build types:
-
-1. `cros-ec` builds are the legacy EC images built using Make (e.g. `make
- BOARD=volteer`)
-1. `zephyr-ec` builds are the EC images built using the Zephyr RTOS kernel using
- zmake/Cmake (e.g. `zmake configure -b zephyr/projects/volteer/volteer`)
-
-### Checking a single cros-ec build
-
-Building a single cros-ec board using `make BOARD=<board> -j` reports the the
-number of bytes free in flash and RAM for both the RO and RW images. An example
-from building the juniper board is shown below.
-
-```
-$ make BOARD=juniper -j
- ...
- *** 668 bytes in flash and 10308 bytes in RAM still available on juniper RO ****
- *** 3224 bytes in flash and 7460 bytes in RAM still available on juniper RW ****
-```
-
-### Checking all cros-ec builds
-
-Running `make buildall -j` shows a summary of the three boards with the smallest
-RO flash footprint, FW flash footprint, and RW RAM footprint.
-
-```
-$ make buildall -j
- ...
-buildall completed successfully!
-Smallest free spaces in RO flash (bytes):
-servo_v4 : 104
-scarlet : 108
-mushu : 160
-Smallest free spaces in RW flash (bytes):
-mushu : 96
-bobba : 232
-trondo : 376
-Tightest boards' RW RAM images, bytes free:
-whiskers : 244
-minimuffin: 284
-zinger : 284
-```
-
-### Comparing cros-ec image sizes
-
-The cros-ec makefile provides two make targets for helping track the impact of
-code changes.
-
-`make savesizes` saves the EC footprint information for all boards, providing
-the baseline for comparison. `make newsizes` compares the sizes of the current
-build against the EC footprint information saved by most recent invocation of
-`make savesizes`.
-
-General workflow:
-1. Checkout branch you need to compare against. For example `repo start
- check-ec-size -r cros/main` or `repo start check-ec-size -r <hash>`.
-1. Run `make buildall -j`.
-1. Run `make savesizes`.
-1. Apply your code change (e.g. change the local branch, cherry-pick your
- changes, or directly edit source files).
-1. Run `make buildall -j` again.
-1. Run `make newsizes` to generate report of size changes.
-
-Example report from `make newsizes` shown below:
-
-```
-$ make newsizes
-build/burnet/RO/space_free_flash grew by 576 bytes: (488 to 1064)
-build/burnet/RW/space_free_flash grew by 552 bytes: (1324 to 1876)
-build/cerise/RO/space_free_flash grew by 512 bytes: (276 to 788)
-build/cerise/RW/space_free_flash grew by 548 bytes: (7076 to 7624)
- ...
-```
-
-### Checking a single zephyr-ec build
-
-By default all the information messages from the `zmake` tool are hidden during
-builds of zephyr-ec boards.
-
-Changing the logging level to INFO, displays the flash and SRAM usage of board.
-
-```
-$ zmake -l INFO configure -b zephyr/projects/volteer/volteer
-INFO: Clearing old build directory /mnt/host/source/src/platform/ec/build/zephyr/projects/volteer/volteer
- ...
-INFO: [/mnt/host/source/src/platform/ec/build/zephyr/projects/volteer/volteer:ro]Memory region Used Size Region Size %age Used
-INFO: [/mnt/host/source/src/platform/ec/build/zephyr/projects/volteer/volteer:ro]FLASH: 238852 B 512 KB 45.56%
-INFO: [/mnt/host/source/src/platform/ec/build/zephyr/projects/volteer/volteer:ro]SRAM: 57144 B 62 KB 90.01%
-INFO: [/mnt/host/source/src/platform/ec/build/zephyr/projects/volteer/volteer:ro]IDT_LIST: 0 GB 2 KB 0.00%
-INFO: [/mnt/host/source/src/platform/ec/build/zephyr/projects/volteer/volteer:rw]Memory region Used Size Region Size %age Used
-INFO: [/mnt/host/source/src/platform/ec/build/zephyr/projects/volteer/volteer:rw]FLASH: 238852 B 512 KB 45.56%
-INFO: [/mnt/host/source/src/platform/ec/build/zephyr/projects/volteer/volteer:rw]SRAM: 57144 B 62 KB 90.01%
-INFO: [/mnt/host/source/src/platform/ec/build/zephyr/projects/volteer/volteer:rw]IDT_LIST: 0 GB 2 KB 0.00%
-```
-
-For easier to read output, you can run the ninja build tool directly and see the
-RO and RW footprint.
-
-```
-$ zmake configure zephyr/projects/volteer/volteer/
-$ ninja -C build/zephyr/projects/volteer/volteer/build-ro
-ninja: Entering directory 'build/zephyr/projects/volteer/volteer/build-ro'
-[1/324] Preparing syscall dependency handling
-
-[317/324] Linking C executable zephyr/zephyr_prebuilt.elf
-
-[324/324] Linking C executable zephyr/zephyr.elf
-Memory region Used Size Region Size %age Used
- FLASH: 238852 B 512 KB 45.56%
- SRAM: 57144 B 62 KB 90.01%
- IDT_LIST: 0 GB 2 KB 0.00%
-```
-
-Note, that the flash region size listed above represents the total flash
-available on the EC. The actual available region size is only half the reported
-value in order to store two images (RO+RW).
-
-#### Other Zephyr utilities
-
-The Cmake system utilized by Zephyr provides two build targets `rom_report` and
-`ram_report` which generate a list of all the compiled objects in tabular form.
-This can be useful for identifying particular modules that contribute to the
-image size.
-
-The `rom_report` and `ram_report` targets are currently only supported when
-working outside the chroot. Follow the [instructions][1] for building zephyr-ec
-images outside chroot before running the commands below.
-
-```
-# Configure the Volteer zephyr project, storing the build files in /tmp/zephyr-volteer
-$ zmake configure -B /tmp/zephyr-volteer zephyr/projects/volteer/volteer -t zephyr
-
-# Build the RO image
-$ ninja -C /tmp/zephyr-volteer/build-ro
-
-# Generate the ROM report, report sent to stdout
-$ ninja -C /tmp/zephyr-volteer/build-ro rom_report
-```
-
-Please refer to the [Zephyr Optimization Tools][3] documentation for details on
-the `rom_report` and `ram_report` targets.
-
-## Disable console commands
-
-The lowest hanging fruit for reducing the EC image size is by disabling console
-commands that provide debug information only and don't impact the user or the
-automated testing. Any console command that is not used by the FAFT tests and
-suites is safe to disable in the EC images.
-
-For cros-ec builds, add `#undef CONFIG_CMD_<name>` to the board.h or baseboard.h
-file to disable the console command.
-
-For zephyr-ec builds, add `CONFIG_PLATFORM_EC_CONSOLE_CMD_<name>=n` to the board
-prj.conf file to disable the console command.
-
-* TODO: Create new CONFIG/Kconfig option that disables all console commands not
- required by FAFT.
-
-| Used by FAFT | config.h option | Console commands | Notes |
-|:---|:---|:---|:---|
-| | CONFIG_CMD_ACCELS | `accelrange`<br>`accelres`<br>`accelrate`<br>`accelread`<br>`accelinit`<br>`accelinfo` | |
-| | CONFIG_CMD_ACCELSPOOF | `accelspoof` | |
-| | CONFIG_CMD_ACCEL_FIFO | `fiforead` | |
-| | CONFIG_CMD_ACCEL_INFO | `accelinfo` | |
-| | CONFIG_CMD_ADC | `adc` | Note firmware_ECAdc uses the `temps` command. |
-| | CONFIG_CMD_ALS | `als` | |
-| | CONFIG_CMD_APTHROTTLE | `apthrottle` | |
-| | CONFIG_CMD_AP_RESET_LOG |??? | |
-| | CONFIG_CMD_BATDEBUG | `fgunseal`<br>`fgseal`<br>`fginit`<br>`fgprobe`<br>`fgrd`<br>`fgcmd`<br>`fcmdrd` | |
-| | CONFIG_CMD_BATTFAKE | `battfake` | |
-| | CONFIG_CMD_BATT_MFG_ACCESS | `battmfgacc` | |
-| | CONFIG_CMD_CBI | `cbi` | firmwareECCbiEeprom uses `ectool` on AP to test CBI |
-| x | CONFIG_CMD_CHARGEN | `chargen` | Used by firmware_Cr50CCDUartStress, included in faft_ccd, faft_cr50_prepvt, and faft_cr50_pvt suites |
-| | CONFIG_CMD_CHARGER | `bd9995x`<br>`sy21612` | |
-| | CONFIG_CMD_CHARGER_ADC_AMON_BMON | `amonbmon` | |
-| | CONFIG_CMD_CHARGER_DUMP | `charger_dump` | |
-| | CONFIG_CMD_CHARGER_PROFILE_OVERRIDE | `fastcharge` | |
-| | CONFIG_CMD_CHARGER_PROFILE_OVERRIDE_TEST | `fastchgtest` | |
-| | CONFIG_CMD_CHARGE_SUPPLIER_INFO | `chgsup` | |
-| | CONFIG_CMD_CHGRAMP | `chgramp` | |
-| | CONFIG_CMD_CLOCKGATES | `clockgates` | |
-| | CONFIG_CMD_COMXTEST | `comxtest` | |
-| x | CONFIG_CMD_CRASH | `crash` | |
-| | CONFIG_CMD_DEVICE_EVENT | `deviceevent` | |
-| | CONFIG_CMD_DLOG | `dlog` | |
-| | CONFIG_CMD_ECTEMP | `ectemp` | |
-| | CONFIG_CMD_FASTCHARGE | `fastcharge` | Obsolete? use CONFIG_CMD_CHARGER_PROFILE_OVERRIDE? |
-| | CONFIG_CMD_FLASH | `flasherase`<br>`flashwrite`<br>`flashread` | |
-| | CONFIG_CMD_FLASHINFO | `flashinfo` | |
-| | CONFIG_CMD_FLASH_TRISTATE | `fpcapture`<br>`flash_tristate` | |
-| | CONFIG_CMD_FLASH_WP | `flashwp` | |
-| | CONFIG_CMD_FORCETIME | `forcetime` | |
-| | CONFIG_CMD_FPSENSOR_DEBUG | `fpcapture`<br>`fpenroll`<br>`fpmatch`<br>`fpclear`<br>`fpmaintenance` | |
-| | CONFIG_CMD_GETTIME | `gettime` | Used by Cr50 tests, not by FAFT EC |
-| | CONFIG_CMD_GL3590 | `gl3590` | |
-| | CONFIG_CMD_GPIO_EXTENDED | Adds options to `gpioget` and `gpioset`. | Should be renamed to CONFIG_GPOI_EXTENDED |
-| | CONFIG_CMD_GPIO_POWER_DOWN | Not a valid config. | Should be CONFIG_GPIO_POWER_DOWN |
-| | CONFIG_CMD_GT7288 | `gt7288_desc`<br>`gt7288_repdesc`<br>`gt7288_ver`<br>`gt7288_report` | |
-| | CONFIG_CMD_HASH | `hash` | firmware_ECHash uses `ectool echash` |
-| x | CONFIG_CMD_HCDEBUG | `hcdebug` | firmware_ECBootTime.py |
-| x | CONFIG_CMD_HOSTCMD | `hostcmd` | |
-| | CONFIG_CMD_I2CWEDGE | `i2cwedge`<br>`i2cunwedge` | |
-| | CONFIG_CMD_I2C_PROTECT | `i2cprotect` | |
-| | CONFIG_CMD_I2C_SCAN | `i2cscan` | |
-| | CONFIG_CMD_I2C_STRESS_TEST | `i2ctest` | |
-| | CONFIG_CMD_I2C_STRESS_TEST_ACCEL | Not a console command | |
-| | CONFIG_CMD_I2C_STRESS_TEST_ALS | Not a console command | |
-| | CONFIG_CMD_I2C_STRESS_TEST_BATTERY | Not a console command | |
-| | CONFIG_CMD_I2C_STRESS_TEST_CHARGER | Not a console command | |
-| | CONFIG_CMD_I2C_STRESS_TEST_TCPC | `Not a console command | |
-| | CONFIG_CMD_I2C_XFER | `i2cxfer` | firmware_ECCbiEeprom uses `ectool i2cxfer` which is not guarded by CONFIG_CMD_I2C_XFER |
-| | CONFIG_CMD_I2C_XFER_RAW | | Adds options to `i2cxfer` |
-| | CONFIG_CMD_IDLE_STATS | `idlestats` | |
-| | CONFIG_CMD_INA | `ina` | |
-| | CONFIG_CMD_JUMPTAGS | `jumptags` | |
-| x | CONFIG_CMD_KEYBOARD | `8042`<br>`ksstate`<br>`kbpress` | |
-| | CONFIG_CMD_LEDTEST | `ledtest` | |
-| | CONFIG_CMD_MCDP | `mcdp` | |
-| | CONFIG_CMD_MD | `md` | |
-| | CONFIG_CMD_MEM | | Not a console command - gates `md` and `rw` |
-| | CONFIG_CMD_MFALLOW | `mfallow` | |
-| | CONFIG_CMD_MMAPINFO | `mmapinfo` | |
-| x | CONFIG_CMD_PD | `pd` | Used by FAFT PD |
-| | CONFIG_CMD_PD_DEV_DUMP_INFO | | Not a console command |
-| | CONFIG_CMD_PD_FLASH | `pd flash` | Not supported by TCPMv2 |
-| | CONFIG_CMD_PECI | `peci` | firmware_ECThermal uses `ectool tempsinfo` |
-| | CONFIG_CMD_PLL | `pll` | only used by lm4 chip |
-| | CONFIG_CMD_POWERINDEBUG | `powerindebug` | |
-| | CONFIG_CMD_POWERLED | `powerled` | |
-| x | CONFIG_CMD_POWER_AP | `apreset`<br>`apshutdown` | Used by power_Monitoring.py |
-| | CONFIG_CMD_PPC_DUMP | `ppc_dump` | |
-| | CONFIG_CMD_PS2 | `ps2ench`<br>`ps2write` | Used only on NPCX |
-| | CONFIG_CMD_PWR_AVG | `pwr_avg` | |
-| | CONFIG_CMD_RAND | `rand` | Used only on STM32 |
-| | CONFIG_CMD_REGULATOR | `ir357x` | |
-| | CONFIG_CMD_RESET_FLAGS | `rflags` | |
-| | CONFIG_CMD_RETIMER | `bb`<br>`kbxfer` | |
-| | CONFIG_CMD_RTC | `rtc` | |
-| | CONFIG_CMD_RTC_ALARM | `rtc_alarm` | |
-| | CONFIG_CMD_RW | `rw` | |
-| | CONFIG_CMD_SCRATCHPAD | `scratchpad` | |
-| | CONFIG_CMD_SEVEN_SEG_DISPLAY | `seg` | |
-| | CONFIG_CMD_SHA256_TEST | `???` | |
-| x | CONFIG_CMD_SHMEM | `shmem` | Used by firmware_ECSharedMem |
-| | CONFIG_CMD_SLEEP | `sleep` | used only lm4 |
-| | CONFIG_CMD_SLEEPMASK | `sleepmask` | Only used for Cr50 tests |
-| | CONFIG_CMD_SLEEPMASK_SET | | Adds options to `sleepmask` |
-| | CONFIG_CMD_SPI_FLASH | `spi_flasherase`<br>`spi_flashwrite`<br>`spi_flashread`<br>`spi_flash_rsr`<br>`spi_flash_wsr`<br>`spi_flash_wsr` | |
-| | CONFIG_CMD_SPI_NOR | `spinorinfo`<br>`spinorerase`<br>`spinorwrite`<br>`spinorread` | |
-| | CONFIG_CMD_SPI_XFER | `spixfer` | |
-| | CONFIG_CMD_STACKOVERFLOW | `crash stack` | Adds option to `crash` command. |
-| x | CONFIG_CMD_SYSINFO | `sysinfo` | Used by firmware_ECSystemLocked |
-| x | CONFIG_CMD_SYSJUMP | `sysjump` | Used by firmware_ECSharedMem |
-| | CONFIG_CMD_SYSLOCK | `syslock` | |
-| | CONFIG_CMD_TASKREADY | `taskready` | |
-| | CONFIG_CMD_TASK_RESET | `taskreset` | |
-| | CONFIG_CMD_TCPC_DUMP | `tcpci_dump` | |
-| x | CONFIG_CMD_TEMP_SENSOR | `temps` | |
-| | CONFIG_CMD_TIMERINFO | `timerinfo` | |
-| | CONFIG_CMD_TYPEC | `typec` | |
-| | CONFIG_CMD_USART_INFO | `usart_info` | |
-| | CONFIG_CMD_USB_PD_CABLE | `pdcable` | |
-| x | CONFIG_CMD_USB_PD_PE | `pe` | Doesn't appear to be used but might be by FAFT PD |
-| x | CONFIG_CMD_WAITMS | `waitms` | firmware_ECWatchdog | |
-
-## Reduce or eliminate USB-C debugging
-
-The TCPM (Type-C Port manager) implementation is one of the more complex modules
-implemented by the EC code. This module includes extensive debugging and is
-enabled by default due to the value provided during both board bringup and on
-production systems.
-
-The TCPM provides the following debug levels:
-* `DEBUG_DISABLE` (0) - Debugging disabled, no runtime messages displayed
-* `DEBUG_LEVEL_1` (1) - Displays all the state transitions for the TC (Type-C)
- and PE (Policy Engine) state machines
-* `DEBUG_LEVEL_2` (2) - Displays the raw contents of received PD (Power
- Delivery) packets, excluding PING packets
-* `DEBUG_LEVEL_3` (3) - Enables debug messages in the PRL Also displays received
- PING packets.
-
-When `CONFIG_USB_PD_DEBUG_LEVEL` is undefined, the EC allows runtime
-configuration of the USB-C debug level using the `pd dump <level>` EC console
-command. In this configuration, the strings from all debug levels are included
-in the image.
-
-Enabling a fixed debug level removes runtime control of the debug level and also
-removes the strings for the higher debug levels.
-
-For cros-ec builds, add the following to your board.h/baseboard.h file:
-
-```c
- #define CONFIG_USB_PD_DEBUG_LEVEL <level>
-```
-
-For zephyr-ec builds, add the following to your prj.conf file:
-
-```
- CONFIG_PLATFORM_EC_USB_PD_DEBUG_FIXED_LEVEL=y
- CONFIG_PLATFORM_EC_USB_PD_DEBUG_LEVEL=<level>
-```
-
-Approximate flash space savings from each fixed level setting:
-
-Fixed Debug Level | Relative Saving | Cumulative Saving
---- | --- | ---
-Disabled | 0 | 0
-3 | 100 bytes | 100 bytes
-2 | 500-600 bytes | 600-700 bytes
-1 | 100 bytes | 700-800 bytes
-0 | 2000 bytes | 2700-2800 bytes
-
-The recommended setting is setting the fixed debug level to `DEBUG_LEVEL_2` (2).
-This adds details about received PD packets in the EC log stored by the kernel
-and can help troubleshoot PD issues when a PD analyzer isn't available.
-
-It is not recommended to set the fixed debug level to `DEBUG_DISABLE` (0) on any
-shipping firmware.
-
-### TCPMv1 Configuration
-
-Many older platforms still use the legacy TCPMv1 (`CONFIG_USB_PD_TCPMV1`)
-implementation. Specific to TCPMv1, the PD protocol state names can be removed
-from the debug output by adding the following to the board.h/baseboard.h file.
-
-```c
-#undef CONFIG_USB_PD_TCPMV1_DEBUG
-```
-
-This saves around 900 bytes of flash space. TCPMv2 does not currently provide an
-equivalent configuration option, so there is also no Kconfig equivalent.
-
-## Other optional features
-
-### ASSERT() Calls
-
-By default, `ASSERT()` calls generate a console message of the following form:
-
-```
- ASSERTION FAILURE '<expr>' in function() at file:line
-```
-
-There are two options available that reduce the size of strings stored with the
-`ASSERT()` calls.
-
-Description | cros-ec setting | zephyr-ec setting | Total Savings
-:--- | :--- | :--- | :---
-Display only file and line number | `#define CONFIG_DEBUG_ASSERT_BRIEF` | `CONFIG_PLATFORM_EC_DEBUG_ASSERT_BRIEF=y` | 2000-2500 bytes
-Disable all debug from ASSERT() calls.<br> EC is reset using a software breakpoint. | `#undef CONFIG_DEBUG_ASSERT_REBOOTS` | `CONFIG_PLATFORM_EC_DEBUG_ASSERT_REBOOTS=n`<br>`CONFIG_PLATFORM_EC_DEBUG_ASSERT_BREAKPOINT=y` | 3000-4000 bytes
-
-It is not recommended to disable `CONFIG_PLATFORM_EC_DEBUG_ASSERT_REBOOTS` on
-shipping firmware.
-
-### Disable console help
-
-The help strings can be removed from the final build, saving about 5000 bytes of
-flash space.
-
-For cros-ec builds, add `#undef CONFIG_CONSOLE_CMDHELP` to the
-board.h/baseboard.h file.
-
-zephyr-ec builds use Zephyr's shell subsystem and by default enable the
-`CONFIG_SHELL_MINIMAL` option. This option already disables shell help along
-with many other non-critical features. Refer to the shell subsystem [Kconfig][2]
-source file for the complete list of shell features than can be configured.
-
-### Link time optimizaiton
-
-Link time optimization (LTO) is a feature of the linker to identify and remove
-unused code.
-
-For cros-ec builds, LTO is enabled by adding this to the board.h/baseboard.h
-file.
-
-```c
-#define CONFIG_LTO
-```
-
-For zephyr-ec builds, LTO is enabled by default and is controlled with Kconfig.
-
-```
-CONFIG_LTO=y
-```
-
-Note that for zephyr-ec builds, LTO is only turned on for the source files found
-under `platform/ec`. The upstream Zephyr code does not currently support LTO
-due to some auto-generated code that breaks the assumptions made by the linker.
-This [Github issue][4] tracks the effort to support LTO in the Zephyr kernel.
-
-### CONFIG_CHIP_INIT_ROM_REGION
-
-The config option `CONFIG_CHIP_INIT_ROM_REGION` creates a new linker section to
-store data that remains resident in ROM/flash at runtime. This reduces the
-effective cros-ec image size by identifying data structures that do not need to
-be copied into the code RAM section at startup.
-
-This option has the following requirements:
-1. EC executes code from RAM
-2. The ROM/flash size is larger than 2 times the code RAM size.
-3. The RO code released for the board includes this
- [change](https://crrev.com/c/2428566).
-
-The only EC chip that matches these prerequisites is the Nuvoton NPCX7.
-
-Due to the RO code requirement, take care before enabling this option for boards
-released prior to 2021.
-
-If the above requirements are meant, add the following to the
-board.h/baseboard.h file:
-
-```c
-#define CONFIG_CHIP_INIT_ROM_REGION
-#define CONFIG_CHIP_DATA_IN_INIT_ROM
-```
-
-These options are not supported for zephyr-ec builds.
-
-### Enable short GPIO names
-
-The [GPIO macros](./configuration/gpio.md) defined by the board get stored as
-descriptive strings for use with the `gpioget` and `gpioset` console commands.
-
-The names of the GPIOs can be shorted by enabling the
-`CONFIG_COMMON_GPIO_SHORTNAMES` option.
-
-For example, the Kukui board defines this GPIO:
-
-```c
-GPIO(PMIC_FORCE_RESET_ODL, PIN(A, 2), GPIO_ODR_HIGH)
-```
-
-Normally, the GPIO name is stored exactly as specified by the macro:
-`PMIC_FORCE_RESET_ODL`. However, when `CONFIG_COMMON_GPIO_SHORTNAMES` is
-defined, then the GPIO name is shortened to only include port and pin number:
-`A2`.
-
-This option is currently only supported by the STM32 chip and it is not
-supported by zephyr-ec builds.
-
-Note that there are some [FAFT tests][5] that rely on the GPIO name. If you
-enable this option, you may also need to change firmware testing configuration
-[file][6].
-
-[1]:./zephyr_build.md#Working-outside-the-chroot
-[2]:https://github.com/zephyrproject-rtos/zephyr/blob/main/subsys/shell/Kconfig
-[3]:https://docs.zephyrproject.org/latest/guides/optimizations/tools.html
-[4]:https://github.com/zephyrproject-rtos/zephyr/issues/2112
-[5]:https://chromium.googlesource.com/chromiumos/third_party/autotest/+/069cb4b0/server/site_tests/firmware_ECUsbPorts/firmware_ECUsbPorts.py#81
-[6]:https://chromium.googlesource.com/chromiumos/platform/fw-testing-configs/+/e2e9547e/volteer.json#26