This is the homepage/documentation for chromeos-config which provides access to the model configuration for Chrome OS.
See the design doc for information about the design. This is accessible from the public page too (‘Unified Builds’).
See CrosConfig for the class to use to access configuration strings on a target. See cros_config_host.py for access to the config on a host or during a build.
There are two CLIs built for Chrome OS configuration access, cros_config for use on the target, and cros_config_host for use on the host/during building. See the --help for each tool respectively for help on usage.
As Chrome OS firmware continues to evolve, this document is intended to provide guidance for developers on best practices for managing build targets for a given project.
There are currently 6 firmware build targets that may be applicable to any given project.
coreboot_target_name
for boxster projectscoreboot
for model.yaml
based projectsThis is applicable to every project.
depthcharge_target_name
for boxster projectsdepthcharge
for model.yaml
based projectsIf depthcharge is required to use FW_CONFIG
to probe for peripherals that depthcharge uses (such as storage, audio, etc.), then each coreboot build target will require a matching depthcharge target. There are two approaches to this:
board.c
file such that most setup code is shared and the defconfig
board file and a ${VARIANT}.c
setup file provide the differences.board.c
setup file If FW_CONFIG
is not used by the program, then a single build target may be appropriate for an entire program.bmpblk_target_name
for boxster projectsbmpblk
for model.yaml
based projectsThis project used to typically be built once per-program, but given the desire more flexibility (e.g., matching firmware screen resolution to native device resolution), many programs are supporting building this on a pre-project basis.
libpayload_target_name
for boxster projectslibpayload
for model.yaml
projectsThis project is typically built to support one target per-program. The Kconfig options and the linker do a fine job of removing unused code from the resulting binary.
Only 1 of the 2 is used for each program
ChromiumOS EC
This is the custom RTOS used by previous generations of Chrome OS devices.
Zephyr Google recently joined Zephyr OS, therefore the EC team is rapidly moving towards using it as the primary EC choice for new platforms. This should become the default choice beginning with programs where lead devices ship after 2H '22.
config.star
file (including the public and private parts).NB. Projects which share a coreboot target must also share all other firmware build targets (including EC).
libcros_config will emit a lot of debugging log messages if you set the CROS_CONFIG_DEBUG environment variable to a non-empty value before calling into the library.
Chrome OS config is schema validated YAML. New projects define their configuration via Starlark code generating protocol buffer outputs. These outputs are translated back into the config schema compatible YAML format by the cros_config_proto_converter.py. This allows the tooling described above to be compatible with the new approach. These configurations are generated by and stored in configuration projects that can be found in src/project/${program}/${project}
locations of your chromiumos checkout. These config files are installed by chromeos-config-bsp ebuilds. Profiles within the overlay allow builds to target a specific project. For more details on the new approach see the documentation at ChromeOS Project Configuration. Some of the following details, such as YAML source location and YAML templating, do not apply to the new approach.
The following components make up the YAML based chromeos-config support:
The YAML source is designed for human maintainability. It allows for easy config sharing across many different devices (via anchors).
For background on YAML, see: Learn YAML in 10 minutes
The source is generally located at:
ls src/overlay-${BOARD}/chromeos-base/chromeos-config-bsp/files/model.yaml
Beyond the normal features of YAML, there are a few custom features supported that allow for even better re-use and expressiveness in the YAML config.
Templating - Templating allows config to be shared by letting callers reference variables in the config, which are then evaluated on a per device/sku/product basis.
The basic syntax is:
some-element: "{{some-template-variable}}"
Valid template variables are any YAML elements that are currently in scope. When generating config, scope is evaluated in the following order:
This order allows shared anchors to define default variables that are then optionally overridden by either the device or product scope.
Local Variables - These are variables that are only used for templating and are dropped in the final JSON output. Variables starting with ‘$’ are considered local and are ignored after template evaluation. The basic syntax is:
config: $some-local-variable: "some-value" some-element: "{{$some-local-variable}}"
This supports the following:
File Imports - File imports allow common snippets of YAML to be shared across multiple different implementations. File importing works the same as if the YAML files were cat'd together and then evaluated. File importing is recursive also, so it will support importing files that import other files. Import paths must be relative to the file that specifies the import.
imports: - "some_common_import_file.yaml" - "../common/some_other_common_import_file.yaml"
The following provides a simple example of a config using both core YAML features and the custom features described above.
common_config: &common_config name: "{{$device-name}}" brand-code: "{{$brand-code}}" identity: platform-name: "SomePlatform" smbios-name-match: "SomePlatform" sku-id: "{{$sku-id}}" firmware-signing: key-id: "{{$key-id}}" signature-id: "{{name}}" chromeos: devices: - $device-name: "SomeDevice" products: - $brand-code: "YYYY" $key-id: "SOME-KEY-ID" skus: - $sku-id: 0 config: <<: *common_config wallpaper: "some-wallpaper" - $sku-id: 1 config: *common_config
When this YAML is evaluated, it will fully expand out as the following:
chromeos: models: - name: "SomeDevice" brand-code: "YYYY" identity: platform-name: "SomePlatform" smbios-name-match: "SomePlatform" sku-id: 0 firmware-signing: key-id: "SOME-KEY-ID" signature-id: "SomeDevice" wallpaper: "some-wallpaper" - name: "SomeDevice" brand-code: "YYYY" identity: platform-name: "SomePlatform" smbios-name-match: "SomePlatform" sku-id: 1 firmware-signing: key-id: "SOME-KEY-ID" signature-id: "SomeDevice"
There are various cases where it makes sense to manage YAML config across multiple different repos in separate YAML files.
E.g.
This is supported through cros_config_schema tool and is invoked as part of the chromeos-config ebuild.
Using normal portage ebuilds/config, users can install as many YAML files as they wish to be merged together into: /usr/share/chromeos-config/yaml
E.g.
These files are then merged together based on their lexicographic name order.
Merging of YAML files applies the following characteristics:
Order is important. If two files supply the same config, the last file wins.
Identity is important. Config is merged based on ONE OF the following:
For a detailed example of how merging works, see the following test files:
Before the config gets used on the device, it's translated to a flattened filesystem view of the configuration, and stored as a SquashFS image. This keeps the runtime code on the device very simple.
First, the configuration is flattened using the following algorithm:
After this, the configuration is stored in a SquashFS, with paths representing directories, and properties representing files.
/ ├── identity.bin # "Table of contents" to efficiently lookup device identity. └── v1 └── chromeos └── configs ├── 0 │ ├── ... │ ├── power │ │ └── ... │ ├── wallpaper │ └── ... ├── 1 │ ├── ... │ ├── power │ │ └── ... │ ├── wallpaper │ └── ... └── ...
This file gets installed at /usr/share/chromeos-config/configfs.img
, and is used internally by the cros_configfs
tool.
When modifying a model.yaml
file there are few steps that need to be taken to manifest the change in a board target. Since the actual work to combine and process the YAML files is done in the chromeos-config
ebuild, it needs to be remerged after the input YAML has been modified.
Start cros-workon
on the ebuild where your source model.yaml
lives:
(chroot) $ cros-workon-${BOARD} start chromeos-base/chromeos-config-bsp
Note: If you have access to the private overlays for a board, you‘ll notice there’s an additional package containing private configuration data, chromeos-base/chromeos-config-bsp-private
. To cros-workon
this package:
(chroot) $ cros-workon-${BOARD} start chromeos-base/chromeos-config-bsp-private
After making your changes, emerge all affected ebuilds and the chromeos-config
ebuild:
(chroot) $ emerge-${BOARD} chromeos-config-bsp chromeos-config
Alternatively, if you made changes in the private package:
(chroot) $ emerge-${BOARD} chromeos-config-bsp chromeos-config-bsp-private chromeos-config
The config is evaluated against a http://json-schema.org/ schema located at: chromeos-config/cros_config_host/cros_config_schema.yaml
NOTE: The schema is managed in YAML because it's easier to edit than JSON.
Only the transformed JSON is actually evaluated against the schema. Authors can do whatever makes sense in the YAML (from a sharing perspective) as long as it generates compliant JSON that passes the schema validation.
The schema documentation is auto-generated (and put into this README.md file) via: python -m cros_config_host.generate_schema_doc -o README.md
The schema definition is below:
In the tables below,
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
arc | arc | False | False | |||
audio | audio | False | False | |||
auto-night-light | boolean | False | False | Whether the auto-night-light feature is enabled on the device, which sets the schedule for Night light automatically to sunset-to-sunrise. | ||
bluetooth | bluetooth | False | False | |||
brand-code | string | False | False | Brand code of the model (also called RLZ code). | ||
camera | camera | False | False | |||
cros-healthd | cros-healthd | False | False | Contains properties used by cros_healthd for model-specific telemetry. Each property represents a category of information and contains boolean properties that indicate whether a device supports a particular telemetry item. See cros_healthd_probe.mojom for descriptions of each property. | ||
cross-device | cross-device | False | False | Contains properties to configure cross-device features between ChromeOS devices and other devices, such as Instant Tethering and Smart Lock. | ||
demo-mode | demo-mode | False | False | Properties related to the ChromeOS Demo Mode, defining the user experience when the device is used in retail. | ||
detachable-base | detachable-base | False | False | Contains the configuration for the hammerd which is used to update the detachable base firmware. | ||
fingerprint | fingerprint | False | False | Contains details about the model's fingerprint implementation. | ||
firmware | firmware | False | False | |||
firmware-signing | firmware-signing | False | True | |||
hardware-properties | hardware-properties | False | False | Contains boolean flags or enums for hardware properties of this board, for example if it's convertible, has a touchscreen, has a camera, etc. This information is used to auto-generate C code that is consumed by the EC build process in order to do run-time configuration. If a value is defined within a config file, but not for a specific model, that value will be assumed to be false for that model. If a value is an enum and is not specified for a specific model, it will default to “none”. All properties must be booleans or enums. If non-boolean properties are desired, the generation code in cros_config_schema.py must be updated to support them. | ||
hwid-override | string | [A-Z0-9]+(-[A-Z]{4})?( [0-9A-F]+(-[0-9A-F]+)*)? ([A-Z2-7]{4}(-[A-Z2-7]{4})*|[A-Z2-7][2-9][A-Z2-7](-[A-Z2-7][2-9][A-Z2-7])*) | False | False | Override the HWID reported by crossystem. This property should only be used for devices supporting non-ChromeOS firmware, where we don't have the ability to set the HWID in GBB. | |
identity | identity | False | False | Defines attributes that are used by cros_config to detect the identity of the platform and which corresponding config should be used. This tuple must either contain x86 properties only or ARM properties only. | ||
keyboard | keyboard | False | False | Contains details about the model's keyboard. | ||
modem | modem | False | False | |||
name | string | ^[_a-zA-Z0-9]{3,} | True | False | Google code name for the given model. While it is OK to use this string for human-display purposes (such as in a debug log or help dialog), or for a searchable-key in metrics collection, it is not recommended to use this property for creating model-specific behaviors. In this case, add a property to the schema which describes your behavior and use that instead. | |
nnpalm | nnpalm | False | False | |||
oem-id | string | [0-9]+ | False | False | Some projects store SKU ID, OEM ID and Board Revision in an EEPROM and only SKU ID can be updated in the factory and RMA flow but others should be pre-flashed in the chip level. In this case, we would like to validate whether oem-id here from the updated SKU ID matches the one in the EEPROM so we can prevent this device from being updated to another OEM's devices. | |
power | power | False | False | Defines settings that control power management functions. This mostly defines power_manager preferences, but there are a few other power related settings included. For details about each power_manager preference, see - src/platform2/power_manager/common/power_constants.h/cc For examples on setting these properties (including multiline examples), see the power config example in libcros_config/test.yaml | ||
proximity-sensor | proximity-sensor | False | False | Defines the proximity sensor settings for devices such as /dev/proximity-wifi and /dev/proximity-wifi-lte typically used for SAR. | ||
regulatory-label | string | False | False | Base name of the directory containing the regulatory label files to show on this device. | ||
scheduler-tune | scheduler-tune | False | False | ChromeOS scheduler's tunable values. | ||
test-label | string | False | False | Test alias (model) label that will be applied in Autotest and reported for test results. | ||
thermal | thermal | False | False | |||
touch | touch | False | False | |||
ui | ui | False | False | |||
wallpaper | string | False | False | Base filename of the default wallpaper to show on this device. | ||
wifi | wifi | False | False | Sets limits on maximum WiFi transmit power for tablet and non-tablet device configurations. This config must contain properties for ath10k wifi driver, rtw88 wifi driver, mtk driver, or intel driver. Note that configs for the intel driver are delivered as encoded wifi sar hex files. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
build-properties | build-properties | True | False | |||
hardware-features | hardware-features | False | False | Defines hardware_features.xml file provided to ARC during initialization. | ||
media-profiles | media-profiles | False | False | Defines media_profiles.xml file provided to ARC during initialization. | ||
scale | integer | False | False | The screen density value in dpi that will be used for ARC apps. This value should be from the list of DPIs in android cdd. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
device | string | True | False | Device name to report in ‘ro.product.device’. This is often ‘{product}_cheets’ but it can be something else if desired. | ||
first-api-level | string | False | False | The first Android API level that this model shipped with. Deprecated since M94 (b/187778952). | ||
marketing-name | string | False | False | Name of this model as it is called in the market, reported in ‘ro.product.model’. This often starts with ‘{oem}’. | ||
metrics-tag | string | True | False | Tag to use to track metrics for this model. The tag can be shared across many devices if desired, but this will result in larger granularity for metrics reporting. Ideally the metrics system should support collation of metrics with different tags into groups, but if this is not supported, this tag can be used to achieve the same end. This is reported in ‘ro.product.metrics.tag’. | ||
oem | string | False | False | Original Equipment Manufacturer for this model. This generally means the OEM name printed on the device. | ||
pai-regions | string | (^([a-zA-Z0-9\.\-]+,)*[a-zA-Z0-9\.\-]+$)|(^\*$) | False | False | (Optional) Comma-separated allow list of region codes that can be appended to ‘ro.oem.key1’ for the purpose of targeting Play Auto Install applications by region. The value(s) should match the values that would be returned by cros_region_data region_code for the relevant region(s). If the device's region code is not in the allow list, or if there is no allow list, ‘ro.oem.key1’ will not include the region code. The allow list can also be a single ‘*’ character to indicate that the region code should always be appended. | |
product | string | True | False | Product name to report in ‘ro.product.name’. This may be the device name, or it can be something else, to allow several devices to be grouped into one product. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
build-path | string | True | True | Source of the file relative to the build system. | ||
system-path | string | True | False | Installation path for the file on the system image. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
build-path | string | True | True | Source of the file relative to the build system. | ||
system-path | string | True | False | Installation path for the file on the system image. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
main | main | True | False |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
cras-config-dir | string | True | False | Subdirectory for model-specific configuration. | ||
disable-profile | string | False | False | Optional --disable_profile parameter for CRAS deamon. | ||
files | array - files | False | True | |||
sound-card-init-conf | string | False | False | Optional model specific config filename for sound_card_init. | ||
ucm-suffix | string | False | False | Optional UCM suffix used to determine model specific config. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
destination | string | False | True | Installation path for the file on the system image. | ||
source | string | False | True | Source of the file relative to the build system. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
flags | flags | False | False |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
enable-suspend-management | boolean | False | False | Enable powerd suspend management callbacks. | ||
reset-on-resume | boolean | False | False | Expect bluetooth chip to have reset on resume. | ||
stop-on-suspend | boolean | False | False | Stop the bluetooth adapter on suspend and start it on resume. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
clock | string | False | False | Specified the camera clock on the model. | ||
config-file | config-file | False | False | Defines the camera configuration file. | ||
count | integer | False | False | Specified the number of cameras on the model. | ||
devices | array - devices | False | False | |||
legacy-usb | boolean | False | False | Indicates if the device has legacy usb cameras. | ||
zsl-lookback | integer | False | False | Specifies the duration to look back for Zero-Shutter Lag (ZSL) in milliseconds. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
build-path | string | True | True | Source of the file relative to the build system. | ||
system-path | string | True | False | Installation path for the file on the system image. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
facing | string | True | False | Direction the camera faces relative to device screen. | ||
flags | flags | True | False | Bit flags representing camera capabilities of this device. A camera module can be mounted on this slot only if all the flags match. | ||
has-privacy-switch | boolean | False | False | The camera has a privacy switch that can disable the output when enabled. | ||
ids | array - string | False | False | An identifier string of camera module. For USB cameras this must be 4-digit hexadecimal VID and PID separated by a colon, e.g. 0123:abcd. For MIPI cameras it depends on vendor software usage. | ||
interface | string | True | False | The interface type of the camera device. | ||
orientation | integer | True | False | Clockwise angle through which the output image needs to be rotated to be upright on the device screen in its native orientation. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
support-1080p | boolean | True | False | Supports 1920x1080 resolution. | ||
support-autofocus | boolean | True | False | Supports auto-focus. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
battery | battery | False | False | |||
cached-vpd | cached-vpd | False | False |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
has-smart-battery-info | boolean | False | False |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
has-sku-number | boolean | False | False |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
instant-tethering | instant-tethering | False | False | Contains properties to configure the Instant Tethering cross-device feature. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
disable-instant-tethering | boolean | False | False | Disables the Instant Tethering feature. false by default |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
highlights-extension-id | string | False | False | The Chrome extension ID of the highlights app used during demo mode. | ||
screensaver-extension-id | string | False | False | The Chrome extension ID of the attract loop played during demo mode. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
ec-image-name | string | False | False | The target EC binary name which is placed under /lib/firmware. | ||
files | array - files | False | True | |||
product-id | integer | False | False | The Product ID of the detachable base. This value can be queried by command ‘lsusb’. By taking this as an example: Bus 001 Device 032: ID 18d1:503c Google Inc. the product-id is 20540(=0x503c). | ||
touch-image-name | string | False | False | The touchpad binary name which is placed under /lib/firmware. This is only needed if the detachable base contains touchpad. | ||
usb-path | string | False | False | Searches and finds the idVendor and idProduct under sysfs /sys/bus/usb/devices/* which matches the vendor-id and product-id. By taking this as an example: ‘/sys/bus/usb/devices/1-1.1’ The usb-path is ‘1-1.1’. | ||
vendor-id | integer | False | False | The Vendor ID of the detachable base. This value can be queried by command ‘lsusb’. By taking this as an example: Bus 001 Device 032: ID 18d1:503c Google Inc. the vendor-id is 6353(=0x18d1). |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
destination | string | False | True | Installation path for the file on the system image. | ||
source | string | False | True | Source of the file relative to the build system ${FILESDIR} | ||
symlink | string | False | True | Symlink file that will be installed pointing to the destination. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
board | string | False | False | Specifies the fingerprint board in use. | ||
fingerprint-sensor-type | string | False | False | Type of FP sensor. Currently describes whether FP is overlapped on the power button or not. | ||
ro-version | string | False | True | RO version for the fingerprint firmware for the FPMCU specified by the “board” property. If not specified, the default RO version for the FPMCU is used. | ||
sensor-location | string | False | False | Specifies the location of the fingerprint sensor. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
bcs-overlay | string | False | True | BCS overlay path used to determine BCS file path for binary firmware downloads. | ||
build-targets | build-targets | False | True | |||
ec-ro-image | string | False | True | Name of the file located in BCS under the respective bcs-overlay. | ||
firmware-config | integer | False | False | The firmware config bitmap to be flashed to the CBI. This field is used in the factory. | ||
image-name | string | False | False | The name of the firmware image used by the firmware updater. Typically the device name, but can differ when a device may have two or more different firmware images. | ||
key-id | string | False | True | Key ID from the signer key set that is used to sign the given firmware image. | ||
main-ro-image | string | False | True | Name of the file located in BCS under the respective bcs-overlay. | ||
main-rw-image | string | False | True | Name of the file located in BCS under the respective bcs-overlay. | ||
name | string | False | True | This is a human-recognizable name used to refer to the firmware. It will be used when generating the shellball via firmware packer. Mainly, this is only for compatibility testing with device tree (since DT allowed firmwares to be named). | ||
no-firmware | boolean | False | True | Does nothing and pending removal. Do not set. (Bug) | ||
pd-ro-image | string | False | True | Name of the file located in BCS under the respective bcs-overlay. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
base | string | False | True | Build target of the base EC firmware for a detachable device, that will be considered dirty when building/testing | ||
bmpblk | string | False | True | Build target that will be considered dirty when building/testing locally. | ||
coreboot | string | False | True | Build target that will be considered dirty when building/testing locally. | ||
depthcharge | string | False | True | Build target that will be considered dirty when building/testing locally. | ||
ec | string | False | True | Build target that will be considered dirty when building/testing locally. | ||
ec_extras | array - string | False | True | Extra EC build targets to build within chromeos-ec. | ||
gsc | string | False | True | Build target that will be considered dirty when building/testing locally. | ||
ish | string | False | True | Build target that will be considered dirty when building/testing locally. | ||
libpayload | string | False | True | Build target that will be considered dirty when building/testing locally. | ||
u-boot | string | False | True | Build target that will be considered dirty when building/testing locally. | ||
zephyr-ec | string | False | True | Specifies the list of Zephyr-based firmware targets to build. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
key-id | string | True | True | Key ID from the signer key set that is used to sign the given firmware image. | ||
sig-id-in-customization-id | boolean | False | True | Indicates that this model cannot be decoded by the mapping table. Instead the model is stored in the VPD (Vital Product Data) region in the customization_id property. This allows us to determine the model to use in the factory during the finalization stage. Note that if the VPD is wiped then the model will be lost. This may mean that the device will revert back to a generic model, or may not work. It is not possible in general to test whether the model in the VPD is correct at run-time. We simply assume that it is. The advantage of using this property is that no hardware changes are needed to change one model into another. For example we can create 20 different whitelabel boards, all with the same hardware, just by changing the customization_id that is written into SPI flash. | ||
signature-id | string | True | True | ID used to generate keys/keyblocks in the firmware signing output. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
display-type | string | False | False | Denotes the type of display this device contains. | ||
form-factor | string | False | False | Denotes the form factor of the device. | ||
has-backlight | boolean | False | False | Does the device have a backlight. | ||
has-base-accelerometer | boolean | False | False | Is there an accelerometer in the base of the device. | ||
has-base-gyroscope | boolean | False | False | Is there a gyroscope in the base of the device. | ||
has-base-light-sensor | boolean | False | False | Is there a light sensor in the base of the device. | ||
has-base-magnetometer | boolean | False | False | Is there a magnetometer in the base of the device. | ||
has-lid-accelerometer | boolean | False | False | Is there an accelerometer in the lid of the device. | ||
has-lid-gyroscope | boolean | False | False | Is there a gyroscope in the lid of the device. | ||
has-lid-light-sensor | boolean | False | False | Is there a light sensor in the lid of the device. | ||
has-lid-magnetometer | boolean | False | False | Is there a magnetometer in the lid of the device. | ||
has-touchscreen | boolean | False | False | Does the device have a touchscreen. | ||
is-lid-convertible | boolean | False | False | Can the lid be rotated 360 degrees. | ||
psu-type | string | False | False | Type of PSU the device has: - battery: the device has a battery intended for primary use - AC_primary: the device has a battery, but it is not intended for primary use - AC_only: the device has no battery - no_power: the device does not receive power in any direct manner (e.g., it is virtualized) | ||
stylus-category | string | False | False | Denotes the category of stylus this device contains. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
customization-id | string | False | x86 | False | ‘customization_id’ value set in the VPD for non-unibuild Zergs and Whitelabels. Deprecated for use in new products since 2017/07/26. | |
platform-name | string | False | x86 | False | Defines the name of the mosys platform used. Mosys is the only software which is allowed to used this value. | |
sku-id | integer | False | x86 | False | SKU/Board strapping pins configured during board manufacturing. Leaving this value unset will cause the config to match any SKU ID. Minimum value: -0x1. Maximum value: 0x7fffffff. | |
smbios-name-match | string | False | x86 | False | [x86] Firmware name built into the firmware and reflected back out in the SMBIOS tables. Leaving this value unset will cause the config to match any SMBIOS product name. | |
whitelabel-tag | string | False | x86 | False | ‘whitelabel_tag’ value set in the VPD, to add Whitelabel branding over an unbranded base model. | |
customization-id | string | False | ARM | False | ‘customization_id’ value set in the VPD for non-unibuild Zergs and Whitelabels. Deprecated for use in new products since 2017/07/26. | |
device-tree-compatible-match | string | False | ARM | False | [ARM] String pattern (partial) that is matched against the contents of /proc/device-tree/compatible on ARM devices. | |
platform-name | string | False | ARM | False | Defines the name of the mosys platform used. Mosys is the only software which is allowed to used this value. | |
sku-id | integer | False | ARM | False | SKU/Board strapping pins configured during board manufacturing. Leaving this value unset will cause the config to match any SKU ID. Minimum value: -0x1. Maximum value: 0x7fffffff. | |
whitelabel-tag | string | False | ARM | False | ‘whitelabel_tag’ value set in the VPD, to add Whitelabel branding over an unbranded base model. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
backlight | boolean | False | False | Specifies the existence of backlight. | ||
numpad | boolean | False | False | Specifies the existence of numpad. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
attach-apn-required | boolean | False | False | Try to explicitly setup an attach APN when registering to the LTE network. | ||
firmware-variant | string | False | False | Variant of the modem firmware to be used. This value is read by modemfwd to match against the variant field of a firmware entry in a firmware manifest. In most cases, we simply use the model name as the value. | ||
wedge-reboot-delay-ms | string | [0-9]+ | False | False | Delay in milliseconds after which we pulse the modem reset GPIO if it hasn't appeared on the USB bus. This value is used by modemfwd and defaults to 5 minutes if not defined. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
radius-polynomial | string | False | False | Optional - empty by default. | ||
touch-compatible | boolean | False | False | Optional - false by default but should be true for compatible devices. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
config-file | config-file | True | False |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
build-path | string | True | True | Source of the file relative to the build system. | ||
system-path | string | True | False | Installation path for the file on the system image. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
lte | lte | False | False | |||
wifi | wifi | False | False | |||
wifi-lte | wifi-lte | False | False |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
channel | string | ^[a-zA-Z0-9_]+$ | False | False | Proximity sensor channel. | |
hardwaregain | string | ^[0-9.]+$ | False | False | Proximity sensor hardware gain. | |
sampling-frequency | string | ^[0-9.]+$ | False | False | Proximity sensor sampling frequency. | |
thresh-falling | string | ^[0-9.]+$ | False | False | Proximity sensor falling threshold. | |
thresh-falling-hysteresis | string | ^[0-9.]+$ | False | False | Proximity sensor falling hysteresis. | |
thresh-falling-period | string | ^[0-9.]+$ | False | False | Proximity sensor falling threshold period (debounce). | |
thresh-rising | string | ^[0-9.]+$ | False | False | Proximity sensor rising threshold. | |
thresh-rising-hysteresis | string | ^[0-9.]+$ | False | False | Proximity sensor rising hysteresis. | |
thresh-rising-period | string | ^[0-9.]+$ | False | False | Proximity sensor rising threshold period (debounce). |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
channel | string | ^[a-zA-Z0-9_]+$ | False | False | Proximity sensor channel. | |
hardwaregain | string | ^[0-9.]+$ | False | False | Proximity sensor hardware gain. | |
sampling-frequency | string | ^[0-9.]+$ | False | False | Proximity sensor sampling frequency. | |
thresh-falling | string | ^[0-9.]+$ | False | False | Proximity sensor falling threshold. | |
thresh-falling-hysteresis | string | ^[0-9.]+$ | False | False | Proximity sensor falling hysteresis. | |
thresh-falling-period | string | ^[0-9.]+$ | False | False | Proximity sensor falling threshold period (debounce). | |
thresh-rising | string | ^[0-9.]+$ | False | False | Proximity sensor rising threshold. | |
thresh-rising-hysteresis | string | ^[0-9.]+$ | False | False | Proximity sensor rising hysteresis. | |
thresh-rising-period | string | ^[0-9.]+$ | False | False | Proximity sensor rising threshold period (debounce). |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
channel | string | ^[a-zA-Z0-9_]+$ | False | False | Proximity sensor channel. | |
hardwaregain | string | ^[0-9.]+$ | False | False | Proximity sensor hardware gain. | |
sampling-frequency | string | ^[0-9.]+$ | False | False | Proximity sensor sampling frequency. | |
thresh-falling | string | ^[0-9.]+$ | False | False | Proximity sensor falling threshold. | |
thresh-falling-hysteresis | string | ^[0-9.]+$ | False | False | Proximity sensor falling hysteresis. | |
thresh-falling-period | string | ^[0-9.]+$ | False | False | Proximity sensor falling threshold period (debounce). | |
thresh-rising | string | ^[0-9.]+$ | False | False | Proximity sensor rising threshold. | |
thresh-rising-hysteresis | string | ^[0-9.]+$ | False | False | Proximity sensor rising hysteresis. | |
thresh-rising-period | string | ^[0-9.]+$ | False | False | Proximity sensor rising threshold period (debounce). |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
boost-urgent | integer | False | False | (Optional) Scheduler's boost value(%) for urgent tasks. When an urgent thread is created, chrome applies this value to scheduler attribute. Tasks with higher boost value are more likely to have higher operating power point even when the system is low utilized. Minimum value: 0x0. Maximum value: 0x64. | ||
cpuset-nonurgent | string | ^[0-9]+(-[0-9]+|(,[0-9]+)+)$ | False | False | (Optional) non-urgent task are only allowed to use given CPUs. | |
input-boost | integer | False | False | (Optional) chromium kernel has a cpu-boost feature, which boosts CPUs for a short duration when user intraction is detected from input devices. This value specifies how much CPUs will be boosted. Minimum value: 0x0. Maximum value: 0x64. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
dptf-dv | string | False | False | System image path to the .dv file containing DPTF (Dynamic Platform and Thermal Framework) settings. | ||
files | array - files | True | True |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
destination | string | False | True | Installation path for the file on the system image. | ||
source | string | False | True | Source of the file relative to the build system. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
files | array - files | False | True |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
destination | string | False | True | Installation path for the file on the system image. | ||
source | string | False | True | Source of the file relative to the build system ${FILESDIR} | ||
symlink | string | False | True | Symlink file that will be installed pointing to the destination. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
apps | apps | False | False | |||
extra-ash-flags | array - string | False | True | Switches passed to the Ash window manager and system UI. Each entry should be a string of the form --=, or -- for boolean switches. If this property is not set, flags will be determined by other cros_config properties. Serialized to a null byte separated string when written to configfs.img | ||
handwriting-recognition-web-platform-api | boolean | False | False | Whether the handwriting recognition web platform API is supported. | ||
help-content-id | string | False | False | Identifier passed to the Showoff app to identify any device-specific help content to be displayed. | ||
power-button | power-button | False | False | |||
side-volume-button | side-volume-button | False | False | Defines the position of the side volume button. region indicates whether the button is at the side of the “screen” or “keyboard” of the device. side indicates which edge the button is anchored to while the device in landscape primary screen orientation. It can be “left”, “right”, “top”, “bottom”. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
extra-web-apps-dir | string | False | True | Subdirectory of external web apps directory (/usr/share/google-chrome/extensions/web_apps) containing additional apps which should be installed on the device. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
edge | string | False | False | |||
position | string | False | False |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
region | string | False | False | |||
side | string | False | False |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
non-tablet-mode-power-table-ath10k | non-tablet-mode-power-table-ath10k | False | ath10k | False | [ath10k] WiFi power chain for use with QCA ath10k drivers. Limits in units of 0.25 dBm. 5g band power limit applies to all 5g bands. | |
tablet-mode-power-table-ath10k | tablet-mode-power-table-ath10k | False | ath10k | False | [ath10k] WiFi power chain for use with QCA ath10k drivers. Limits in units of 0.25 dBm. 5g band power limit applies to all 5g bands. | |
geo-offsets-eu | geo-offsets-eu | False | rtw | False | Offsets which are applied to WiFi power limits depending on the current regulatory domain. Offsets in units of 0.125 dBm. The sum of a geo offset and any power limit to which it applies cannot exceed 255. When the current regulatory domain is unknown or has yet to be determined, the base transmit power limits are used without any geo offsets applied. ‘geo-offsets-fcc’ is used for regulatory domains which follow FCC guidelines, ‘geo-offsets-eu’ is used for regulatory domains which follow ETSI guidelines, and ‘geo-offsets-rest-of-world’ is used for regulatory domains which don't follow FCC or ETSI guidelines. | |
geo-offsets-fcc | geo-offsets-fcc | False | rtw | False | Offsets which are applied to WiFi power limits depending on the current regulatory domain. Offsets in units of 0.125 dBm. The sum of a geo offset and any power limit to which it applies cannot exceed 255. When the current regulatory domain is unknown or has yet to be determined, the base transmit power limits are used without any geo offsets applied. ‘geo-offsets-fcc’ is used for regulatory domains which follow FCC guidelines, ‘geo-offsets-eu’ is used for regulatory domains which follow ETSI guidelines, and ‘geo-offsets-rest-of-world’ is used for regulatory domains which don't follow FCC or ETSI guidelines. | |
geo-offsets-rest-of-world | geo-offsets-rest-of-world | False | rtw | False | Offsets which are applied to WiFi power limits depending on the current regulatory domain. Offsets in units of 0.125 dBm. The sum of a geo offset and any power limit to which it applies cannot exceed 255. When the current regulatory domain is unknown or has yet to be determined, the base transmit power limits are used without any geo offsets applied. ‘geo-offsets-fcc’ is used for regulatory domains which follow FCC guidelines, ‘geo-offsets-eu’ is used for regulatory domains which follow ETSI guidelines, and ‘geo-offsets-rest-of-world’ is used for regulatory domains which don't follow FCC or ETSI guidelines. | |
non-tablet-mode-power-table-rtw | non-tablet-mode-power-table-rtw | False | rtw | False | [rtw] WiFi power chain for use with Realtek rtw88 drivers. Limits in units of 0.125 dBm. 5g band 2 (channels 5.35G-5.47G) power limit is not supported. | |
tablet-mode-power-table-rtw | tablet-mode-power-table-rtw | False | rtw | False | [rtw] WiFi power chain for use with Realtek rtw88 drivers. Limits in units of 0.125 dBm. 5g band 2 (channels 5.35G-5.47G) power limit is not supported. | |
eu-power-table-mtk | eu-power-table-mtk | False | mtk | False | [mtk] WiFi power chain of regulatory domain for use with MediaTek mt7921 driver. Limits in units of 0.25 dBm, Offset in units of 0.25 dBm | |
fcc-power-table-mtk | fcc-power-table-mtk | False | mtk | False | [mtk] WiFi power chain of regulatory domain for use with MediaTek mt7921 driver. Limits in units of 0.25 dBm, Offset in units of 0.25 dBm | |
non-tablet-mode-power-table-mtk | non-tablet-mode-power-table-mtk | False | mtk | False | [mtk] WiFi power chain for use with MediaTek mt7921 driver. Limits in units of 0.25 dBm. | |
rest-of-world-power-table-mtk | rest-of-world-power-table-mtk | False | mtk | False | [mtk] WiFi power chain of regulatory domain for use with MediaTek mt7921 driver. Limits in units of 0.25 dBm, Offset in units of 0.25 dBm | |
tablet-mode-power-table-mtk | tablet-mode-power-table-mtk | False | mtk | False | [mtk] WiFi power chain for use with MediaTek mt7921 driver. Limits in units of 0.25 dBm. | |
sar-file | sar-file | False | GROUP(3) | False |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
limit-2g | integer | False | False | 2G band power limit (0.25dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g | integer | False | False | 5G band power limit (0.25dBm) Minimum value: 0x0. Maximum value: 0xff. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
limit-2g | integer | False | False | 2G band power limit (0.25dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g | integer | False | False | 5G band power limit (0.25dBm) Minimum value: 0x0. Maximum value: 0xff. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
offset-2g | integer | False | False | Value to be added to the 2.4GHz WiFi band. (0.125 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
offset-5g | integer | False | False | Value to be added to all 5GHz WiFi bands. (0.125 dBm) Minimum value: 0x0. Maximum value: 0xff. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
offset-2g | integer | False | False | Value to be added to the 2.4GHz WiFi band. (0.125 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
offset-5g | integer | False | False | Value to be added to all 5GHz WiFi bands. (0.125 dBm) Minimum value: 0x0. Maximum value: 0xff. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
offset-2g | integer | False | False | Value to be added to the 2.4GHz WiFi band. (0.125 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
offset-5g | integer | False | False | Value to be added to all 5GHz WiFi bands. (0.125 dBm) Minimum value: 0x0. Maximum value: 0xff. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
limit-2g | integer | False | False | 2G band power limit: All 2G band channels. (0.125 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g-1 | integer | False | False | 5G band 1 power limit: 5.15G-5.35G channels. (0.125 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g-3 | integer | False | False | 5G band 3 power limit: 5.47G-5.725G channels. (0.125 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g-4 | integer | False | False | 5G band 4 power limit: 5.725G-5.95G channels. (0.125 dBm) Minimum value: 0x0. Maximum value: 0xff. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
limit-2g | integer | False | False | 2G band power limit: All 2G band channels. (0.125 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g-1 | integer | False | False | 5G band 1 power limit: 5.15G-5.35G channels. (0.125 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g-3 | integer | False | False | 5G band 3 power limit: 5.47G-5.725G channels. (0.125 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g-4 | integer | False | False | 5G band 4 power limit: 5.725G-5.95G channels. (0.125 dBm) Minimum value: 0x0. Maximum value: 0xff. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
limit-2g | integer | False | False | 2G band geo power limit. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g | integer | False | False | 5G band geo power limit. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
offset-2g | integer | False | False | Value to be added to the 2.4GHz WiFi band. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
offset-5g | integer | False | False | Value to be added to all 5GHz WiFi bands. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
limit-2g | integer | False | False | 2G band geo power limit. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g | integer | False | False | 5G band geo power limit. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
offset-2g | integer | False | False | Value to be added to the 2.4GHz WiFi band. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
offset-5g | integer | False | False | Value to be added to all 5GHz WiFi bands. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
limit-2g | integer | False | False | 2G band power limit. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g-1 | integer | False | False | 5G band 1 power limit: 5.15G-5.35G frequency. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g-2 | integer | False | False | 5G band 2 power limit: 5.35G-5.47G frequency. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g-3 | integer | False | False | 5G band 3 power limit: 5.47G-5.725G frequency. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g-4 | integer | False | False | 5G band 4 power limit: 5.725G-5.95G frequency. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
limit-2g | integer | False | False | 2G band geo power limit. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g | integer | False | False | 5G band geo power limit. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
offset-2g | integer | False | False | Value to be added to the 2.4GHz WiFi band. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
offset-5g | integer | False | False | Value to be added to all 5GHz WiFi bands. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
limit-2g | integer | False | False | 2G band power limit. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g-1 | integer | False | False | 5G band 1 power limit: 5.15G-5.35G frequency. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g-2 | integer | False | False | 5G band 2 power limit: 5.35G-5.47G frequency. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g-3 | integer | False | False | 5G band 3 power limit: 5.47G-5.725G frequency. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. | ||
limit-5g-4 | integer | False | False | 5G band 4 power limit: 5.725G-5.95G frequency. (0.25 dBm) Minimum value: 0x0. Maximum value: 0xff. |
Attribute | Type | RegEx | Required | Oneof Group | Build-only | Description |
---|---|---|---|---|---|---|
build-path | string | True | True | Source of the file relative to the build system. | ||
system-path | string | True | False | Installation path for the file on the system image. |
At bootup, cros_configfs
is executed to mount /usr/share/chromeos-config/configfs.img
at /run/chromeos-config/private
. The table of contents is scanned to match the device's identity to a matching configuration, and the corresponding directory then gets mounted (via a bind mount) to /run/chromeos-config/v1
.
Identity matching is done by comparing properties which come from /identity
to the corresponding values from firmware. If properties are left unspecified in /identity
, they will match any value from firmware, or even a missing value.
The first config with a matching identity is selected.
The files in the table below, exposed from firmware by the kernel, are used to compare the values from firmware. Strings are compared case-insensitive.
Property (from /identity ) | x86 file | ARM file |
---|---|---|
smbios-name-match | /sys/class/dmi/id/product_name | N/A |
device-tree-compatible-match | N/A | /proc/device-tree/compatible |
sku-id | /sys/class/dmi/id/product_sku | /proc/device-tree/firmware/coreboot/sku-id |
customization-id | /sys/firmware/vpd/ro/customization_id | /sys/firmware/vpd/ro/customization_id |
whitelabel-tag | /sys/firmware/vpd/ro/whitelabel_tag | /sys/firmware/vpd/ro/whitelabel_tag |
All files are parsed as strings, except where mentioned below:
/proc/device-tree/compatible
: This file contains a list of null-terminated strings. If any of the strings in the list match device-tree-compatible-match
, it is considered to be a match.
/sys/class/dmi/id/product_sku
: This file is parsed as scanf("sku%u", &sku_id)
.
/proc/device-tree/firmware/coreboot/sku-id
: 4 bytes, parsed as a 32-bit network-endian integer.
The configuration can be read by any language or library simply by reading the corresponding file to the property. For example, to read /ui/power-button:edge
from the configuration, you can simply read the contents of /run/chromeos-config/v1/ui/power-button/edge
.
There is also the cros_config
command line tool, which can cat
these files for you, or libcros_config
, which provides C++ bindings used widely across platform2
to read these files.
Before starting, cros_workon
the following:
(chroot) $ cros_workon --host start chromeos-config-host (chroot) $ cros_workon --board=BOARD start chromeos-config-bsp chromeos-config
To introduce a new property, first add its definition to the schema:
chromeos-config/cros_config_host/cros_config_schema.yaml
Then update the README.md
automatically via (unit tests will check this):
(chroot) $ python -m cros_config_host.generate_schema_doc -o README.md
To install the updated schema, run:
(chroot) $ FEATURES=test sudo -E emerge chromeos-config-host
To use the new property, update your respective YAML source file. e.g. overlay-${BOARD}-private/chromeos-base/chromeos-config-bsp/files/model.yaml
To install the changes, run:
(chroot) $ emerge-${BOARD} chromeos-config-bsp chromeos-config
At this point the updated config is located at:
/build/${BOARD}/usr/share/chromeos-config/yaml/config.yaml
To query your new item run the test command in the chroot:
(chroot) $ cros_config_host -c /build/${BOARD}/usr/share/chromeos-config/yaml/config.yaml -m <MODEL> get </path/to/property> <property name>
For instance:
(chroot) $ cros_config_host -c /build/coral/usr/share/chromeos-config/yaml /config.yaml -m robo360 get /firmware key-id (chroot) $ cros_config_host -c /build/coral/usr/share/chromeos-config/yaml /config.yaml list-models
To test configuration changes on actual devices use the platform.CrosConfig
Tast test. This will run cros_config
tests for unibuilds and mosys for all devices. See HOWTO.