[coreboot] Questions on building a Coreboot ROM for the Dell Chromebook 11
Marcos Scriven
marcos at scriven.org
Fri May 8 21:38:56 CEST 2015
I have a Dell Chromebook 11 (Google codename 'Wolf') which I'd like to
install a custom coreboot ROM on. Although John Lewis provides ROMs here
https://johnlewis.ie/custom-chromebook-firmware/rom-download/, I'd rather
not use them for a few reasons:
1) It's replacing one 'closed' ROM with another, in the sense it's from a
3rd party with no public repo or build scripts. Although it's possible to
extract the coreboot config used to build them, it's not possible to
reproduce and modify the payloads.
2) I don't need his closed 'Jeltka' payload.
3) I'd like to experiment with other payloads, custom splash screens etc.
4) I wouldn't learn anything, and I'm interested!
With that in mind, this guide here looked ideal (although there's no date
on it):
https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/upstream-coreboot-on-intel-haswell-chromebook
However, that prompted some questions, which I'm hoping someone here might
be able to help with. (I did ask in the #chromimum-os IRC channel, but they
suggested Google coreboot developers would be more likely to help here).
1) What blobs do I use?
Although the guide sensibly says to backup the existing bios with 'flashrom
-r', it also says to extract a bios.bin from
/usr/sbin/chromeos-firwmwareupdate (I've posted details of both at the
end). From the latter, it goes on to get you to extract four blobs:
- SPI Descriptor
- Management Engine
- MRC
- VBIOS
The first discrepancy is that the guide says the 'Management Engine
firmware' is only in the latter, but I was able to use ifdtool on both
images to extract the same set of three files. The
flashregion_0_flashdescriptor.bin files were identical, though the other
two were different despite being the same size.
The other thing is there's no reason given as to why one would use the MRC
and VBIOS blobs from the extract, rather than the backup. Curiously, they
are slightly different sizes (again details below). Looking at the config
it seems the extracted bios image was built with from a Google coreboot
fork four months older than the one backed up from the machine.
2) Which mainboard do I use for the Dell Chromebook 11?
Assuming I have the correct four proprietary blobs, the next thing is
choosing the right mainboard. The guide I link to mentions suggests
'Falco', but I don't see how, without knowing the target, such a suggestion
could be meaningful?
Looking here
https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices
Falco appears to be unique to the HP Chromebook 14. The mainboard codename
for my Chromebook is 'Wolf', and that's not in coreboot upstream.
Comparing 'src/mainboard/google' in Google's fork, and coreboot upstream:
http://review.coreboot.org/gitweb?p=coreboot.git;a=tree;f=src/mainboard/google;h=60045af24d9760f7a52555a5ef6ef3fdc77676b7;hb=HEAD
https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-wolf-4389.24.B/src/mainboard/google/
It seems there is at least some attempt to merge upstream, and yet wolf
isn't there. Is there a particular reason some mainboards are missing? Did
Google stop doing so for some reason?
I also note the Google keep the coreboot config source controlled:
https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-wolf-4389.24.B/configs/config.wolf
Thanks
Marcos
--- Some further ROM details ---
bios extracted with 'flashrom -r' from my Dell Chromebook 11:
chromebook11.rom: 8192 kB, bootblocksize 3144, romsize 8388608, offset
0x700000
alignment: 64 bytes, architecture: x86
Name Offset Type Size
cmos_layout.bin 0x700000 cmos_layout 1164
pci8086,0406.rom 0x7004c0 optionrom 65536
cpu_microcode_blob.bin 0x710500 microcode 41024
config 0x71a5c0 raw 5536
fallback/vboot 0x71bbc0 stage 15083
(empty) 0x71f700 null 2136
fallback/romstage 0x71ff80 stage 42497
fallback/coreboot_ram 0x72a600 stage 91450
fallback/payload 0x740b80 payload 54898
u-boot.dtb 0x74e240 mrc_cache 7919
(empty) 0x750180 null 327192
mrc.bin 0x79ffc0 spd 190180
(empty) 0x7ce700 null 120984
spd.bin 0x7ebfc0 spd 1536
(empty) 0x7ec600 null 77144
Extracting config shows "# This image was built using git revision
52034fc1537d4a38e792e700cbc8e9dd1fc36a9c", which is a commit hash from
Google's fork:
commit cef55018e4e936af9a758675353e332df4d9d1a6
Author: David Wu <David_Wu at quantatw.com>
Date: Tue Apr 29 12:59:04 2014 -0700
bios extracted from the chromeos-firwmwareupdate utility (which on my
machine is a 7.7M binary built on 27th Apr this year):
bios.bin: 8192 kB, bootblocksize 3144, romsize 8388608, offset 0x700000
alignment: 64 bytes, architecture: x86
Name Offset Type Size
cmos_layout.bin 0x700000 cmos_layout 1164
pci8086,0406.rom 0x7004c0 optionrom 65536
cpu_microcode_blob.bin 0x710500 microcode 43072
config 0x71adc0 raw 5536
fallback/vboot 0x71c3c0 stage 15083
(empty) 0x71ff00 null 88
fallback/romstage 0x71ff80 stage 42497
fallback/coreboot_ram 0x72a600 stage 91491
fallback/payload 0x740bc0 payload 54898
u-boot.dtb 0x74e280 mrc_cache 7919
(empty) 0x7501c0 null 327128
mrc.bin 0x79ffc0 spd 191020
(empty) 0x7cea40 null 120152
spd.bin 0x7ebfc0 spd 1536
(empty) 0x7ec600 null 77144
Extracting config shows "# This image was built using git revision
52034fc1537d4a38e792e700cbc8e9dd1fc36a9c", which is also a commit hash from
Google's fork, but older:
commit 52034fc1537d4a38e792e700cbc8e9dd1fc36a9c
Author: Marc Jones <marc.jones at se-eng.com>
Date: Thu Dec 12 13:13:30 2013 -0700
Differences in SPI/ME from backed up ROM and the one extracted from
firmwareupdate tool:
marcosscriven at ubuntuvm:~/coreboot/util/ifdtool$ ls -altr frombackup/
total 8200
-rw-r--r-- 1 marcosscriven marcosscriven 6291456 May 8 19:20
flashregion_1_bios.bin
-rw-r--r-- 1 marcosscriven marcosscriven 4096 May 8 19:20
flashregion_0_flashdescriptor.bin
-rw-r--r-- 1 marcosscriven marcosscriven 2093056 May 8 19:20
flashregion_2_intel_me.bin
drwxrwxr-x 2 marcosscriven marcosscriven 4096 May 8 19:20 .
drwxrwxr-x 4 marcosscriven marcosscriven 4096 May 8 19:21 ..
marcosscriven at ubuntuvm:~/coreboot/util/ifdtool$ ls -altr fromextract/
total 8200
-rw-r--r-- 1 marcosscriven marcosscriven 6291456 May 8 19:20
flashregion_1_bios.bin
-rw-r--r-- 1 marcosscriven marcosscriven 4096 May 8 19:20
flashregion_0_flashdescriptor.bin
-rw-r--r-- 1 marcosscriven marcosscriven 2093056 May 8 19:20
flashregion_2_intel_me.bin
drwxrwxr-x 4 marcosscriven marcosscriven 4096 May 8 19:21 ..
drwxrwxr-x 2 marcosscriven marcosscriven 4096 May 8 19:21 .
marcosscriven at ubuntuvm:~/coreboot/util/ifdtool$ diff frombackup/
fromextract/
Binary files frombackup/flashregion_1_bios.bin and
fromextract/flashregion_1_bios.bin differ
Binary files frombackup/flashregion_2_intel_me.bin and
fromextract/flashregion_2_intel_me.bin differ
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20150508/3ec06af0/attachment-0001.html>
More information about the coreboot
mailing list