build.py: Fix NoneType error in get_config_with_defaults()

The `config.get()` method will return `None` if a key does not contain a
config. This will cause the `config.update()` method to fail. To fix
this, add an additional check before updating the config, similar to
what is done in the `load_board_config()` method.

This bug has not caused any problems now, as all of the current keys
contain non-empty configs. However, there will be such keys introduced
recently in the following CLs. Therefore, it is important to fix the bug
beforehand.

BUG=none
BRANCH=brya
TEST=BOARD=brya make

Change-Id: Ia7b12575030eb3a8c1e6b469bfa7d664a938a2de
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/bmpblk/+/4537235
Tested-by: Hsuan Ting Chen <roccochen@chromium.org>
Commit-Queue: Hsuan Ting Chen <roccochen@chromium.org>
Reviewed-by: Ting Shen <phoenixshen@chromium.org>
Auto-Submit: Hsuan Ting Chen <roccochen@chromium.org>
1 file changed
tree: 274dda7560655e7d6917124567f7bd43be6f385e
  1. sprite/
  2. strings/
  3. .gitignore
  4. .pylintrc
  5. archive_images.py
  6. boards.yaml
  7. build.py
  8. DIR_METADATA
  9. format.yaml
  10. Makefile
  11. OWNERS
  12. PRESUBMIT.cfg
  13. pyproject.toml
  14. README.md
  15. unblocked_terms.txt
  16. update_xtb.py
README.md

bmpblk: Bitmap sources for firmware UI

Note: Because the bitmaps are stored in RO firmware, back-porting any new bitmaps to already shipped devices is not possible.

Building bitmaps

To build images for board $BOARD with default locales, do:

(chroot) cd ~/trunk/src/platform/bmpblk
(chroot) BOARD="$BOARD" make

To override the locale list defined in boards.yaml (for instance, to build with only English locale to speed up testing flow), pass LOCALES=<locale-list> as an environment variable. For example,

(chroot) LOCALES="en ja es" BOARD="$BOARD" make

The default output folder is ./build/$BOARD. To override output folder, specify OUTPUT=<path_to_output> as an environment variable.

Adding a new target board

Add an entry for the new board in boards.yaml. See the description at the top of boards.yaml. For example, add the following for board link:

link:
  screen: [1920, 1080]
  dpi: 112
  # List of locales to include.
  locales: [en, es-419, pt-BR, fr, es, it, de, nl, da, 'no', sv, ko, he]
  # Right-to-left locales.
  rtl: [he]

Note: The locale no will be interpreted as boolean False in YAML, so we need to quote it as 'no'.

If your configuration is exactly the same as existing ones, add your new board into the existing entry. For example:

asurada,link:
  screen:   [1920, 1080]
  dpi: 112  # DO NOT COPY-PASTE -- follow instructions at top of file.

Bitmaps in firmware image

After emerging chromeos-bmpblk, bitmaps will be stored in the following files:

  1. vbgfx.bin: archive of generic (locale-independent) bitmaps
  2. locale_${LOCALE}.bin: archive of bitmaps for locale ${LOCALE}
  3. font.bin: archive of glyph bitmaps

These archive files for Chromium OS firmware will be created using the archive command from coreboot utils (src/third_party/coreboot/util/archive). These files will end up being stored in the FMAP region COREBOOT in the image.

To show these files in an image $IMAGE, run:

cbfstool $IMAGE print -r COREBOOT

To extract an archive $NAME from an image as $FILE, run:

cbfstool $IMAGE extract -r COREBOOT -n $NAME -f $FILE

Also see the firmware UI troubleshooting doc for bitmap-related issues.