mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-25 17:27:18 +00:00
We should have been using Droid Sans, not Helvetica, and some of the non-Roman locales need special handling to render clearly and correctly. We also get better results if we avoid scaling after rendering the text. Added scripts/newbitmaps/Makefile to regenerate it all, updated the READMEs. Since Hung-Te figured out how to use pango-view to render the UTF-8 reliably, we don't need to keep all the pre-rendered locale images anymore either. This provides the x86 bmpblock for Stumpy PVT. We may need some more tweaking for Lumpy and/or ARM. BUG=chrome-os-partner:6595 TEST=manual Put the new screens into the bios: gbb_utility -s --flags=0 -b bmpblock_x86.bin OLDBIOS NEWBIOS flashrom -w NEWBIOS Then reboot and look at the BIOS screens. The lettering is much clearer. Change-Id: Icb07bc6d131920730f41348c7de9151e42cc9518 Reviewed-on: https://gerrit.chromium.org/gerrit/11007 Tested-by: Bill Richardson <wfrichar@chromium.org> Reviewed-by: Hung-Te Lin <hungte@chromium.org>
157 lines
5.5 KiB
Plaintext
157 lines
5.5 KiB
Plaintext
This directory contains the sources for the new-style BIOS bitmaps, and a
|
|
simple (and ugly) tool to view the configuration file that describes how
|
|
each screen is displayed.
|
|
|
|
Note:
|
|
|
|
Due to continuing improvements and tweaks, there have been several different
|
|
formats used for the BIOS bitmaps.
|
|
|
|
Because the bitmap images and display code is part of the Read-Only BIOS,
|
|
back-porting any new bitmaps to older devices is not possible.
|
|
|
|
|
|
Old-style, unversioned bitmaps. Used in Mario / Cr-48.
|
|
|
|
In the Cr-48 BIOS there are four BIOS screens that may be presented to the
|
|
user. Each contains a graphic, a URL, and some informative text. The screens
|
|
are single bitmap images, hardcoded in read-only BIOS (because they have to
|
|
display even when the R/W BIOS and SSD are both completely erased). They can
|
|
be replaced at manufacturing time, but creating the screens is difficult.
|
|
The format is a compressed EFI firmware volume that is generated when the
|
|
BIOS is compiled. The result is an opaque blob that cannot be viewed or
|
|
edited with linux-based tools.
|
|
|
|
|
|
Version 1.0, new-style bitmaps. Used in Alex / Samsung Series 5.
|
|
|
|
The BIOS continues to display the same basic screens, but it uses a
|
|
different format internally (which we call the bmpblock). Each screen has
|
|
separate bitmaps for the basic graphic, the URL, and the informative text,
|
|
and the screen is displayed by rendering each component in order. This
|
|
allows us to modify and replace any bitmap (most frequently the HWID), using
|
|
standard command-line linux tools such as imagemagick. Compositing each
|
|
screen in this way also means that we can easily provide localized BIOS
|
|
screens or custom messages. The BIOS rotates through the localizations by
|
|
pressing the arrow keys when any screen is displayed.
|
|
|
|
|
|
Version 1.1. Used in ZGB / Acer AC700.
|
|
|
|
This is essentially the same as version 1.0, except that the ASCII HWID
|
|
string can be rendered directly by the BIOS instead of as a bitmap. In the
|
|
screen description, the magic image name "$HWID" (or "$HWID.rtol" for a
|
|
right-justified placement) indicates that the ASCII HWID value should be
|
|
displayed at the given coordinates instead of a bitmap image. This means
|
|
that we only need to generate one bmpblock for all locales, since the ASCII
|
|
HWID string can be changed at the factory using "gbb_utility". The
|
|
last-displayed locale is stored in nvram, so it's sticky across reboots. The
|
|
factory process sets the default locale to the appropriate region.
|
|
|
|
|
|
Version 1.2. Used by any BIOS that uses "vboot_api.h" (ARM, Stumpy, etc.)
|
|
|
|
The "vboot wrapper" is a refactoring of the vboot_reference library to
|
|
isolate our verified boot stuff from the underlying BIOS. Among other
|
|
things, it places the burden of displaying the ASCII HWID value on the
|
|
vboot_reference library, which means the bmpblock must contain a "font" to
|
|
translate the ASCII characters in the HWID into graphical images. The yaml
|
|
file must now specify a font file for the $HWID (and $HWID.rtol, if used)
|
|
image name. For example:
|
|
|
|
bmpblock: 1.2
|
|
images:
|
|
$HWID: font.bin # THIS IS NOW REQUIRED WHEN USING $HWID
|
|
screens:
|
|
scr_0_0:
|
|
- [ 0, 0, $HWID]
|
|
localizations:
|
|
- [ scr_0_0, scr_0_0, scr_0_0, scr_0_0 ]
|
|
locale_index:
|
|
en
|
|
|
|
The old v1.1 bmpblock will be accepted by the vboot wrapper, but a $HWID
|
|
screen without a corresponding font should be silently ignored.
|
|
|
|
|
|
|
|
--------------------------------------------
|
|
Instructions for manually rebuilding things:
|
|
|
|
|
|
We do most of the image manipulation using ImageMagick, which is much easier
|
|
and simpler to do OUTSIDE of the chroot. So the first step is to just build
|
|
vboot_reference outside of the chroot.
|
|
|
|
cd src/platform/vboot_reference
|
|
make
|
|
|
|
You'll probably need to install several additional packages to make this
|
|
work. On Ubuntu you may find you need libtspi-dev, uuid-dev, and
|
|
imagemagick. If you want to use scripts/newbitmaps/bitmap_viewer, you may
|
|
need python-yaml and python-wxgtk2.8.
|
|
|
|
|
|
Once you've built vboot_reference you'll find the executables in
|
|
./build/utility/ (and ./build/cgpt/cgpt, if you want it). Put these
|
|
somewhere in your $PATH.
|
|
|
|
Now you should be able to just run "make" and everything will be
|
|
regenerated:
|
|
|
|
cd scripts/newbitmaps
|
|
make
|
|
|
|
This should generate both x86 and ARM versions of the BIOS bmpblock file,
|
|
although ARM may not be 100% correct just yet.
|
|
|
|
|
|
You can use the gbb_utility to modify your BIOS to contain this new set of
|
|
bitmaps:
|
|
|
|
gbb_utility -s -b PATH/TO/YOUR/bmpblock.bin OLDBIOS.bin NEWBIOS.bin
|
|
|
|
|
|
|
|
You can do that last step on the chromebook device itself, provided that the
|
|
BIOS write-protection is disabled. gbb_utility should be in the rootfs:
|
|
|
|
Become root:
|
|
|
|
sudo bash
|
|
|
|
Copy your new bmpblock over:
|
|
|
|
cd /mnt/stateful_partition
|
|
scp USER@SOMEHOST:/SOMEPATH/bmpblock.bin .
|
|
|
|
Get a copy of the current BIOS:
|
|
|
|
flashrom -p internal:bus=spi -r bios.bin
|
|
|
|
Put the new bmpblock in the copy of the BIOS:
|
|
|
|
gbb_utility -s -b bmpblock.bin bios.bin
|
|
|
|
Reflash the BIOS with the new content
|
|
|
|
flashrom -p internal:bus=spi -w bios.bin
|
|
|
|
Reboot. You should see your new bitmaps appear whenever the BIOS screens
|
|
are displayed. If you have more than one localization, you should be able
|
|
to cycle among them with the arrow keys.
|
|
|
|
|
|
If you want to examine a binary bmpblock that you've pulled from a BIOS
|
|
image, the bmpblk_utility has options to display or unpack the binary.
|
|
|
|
bmpblk_utility bmpblock.bin
|
|
|
|
bmpblk_utility -y bmpblock.bin
|
|
|
|
bmpblk_utility -x -d /SOME/SCRATCH/DIR bmpblock.bin
|
|
|
|
Once you've unpacked it you can use the bitmap_viewer on the unpacked
|
|
config.yaml file to see what it looks like. There's not (yet) a single tool
|
|
that directly displays the raw binary.
|