Recently I spent about a day installing Fedora 22 + jhbuild on a Chromebook and left it unplugged overnight. The next day I turned it on with a flat battery, grabbed the charger, and the coreboot bios would not let me do the usual ctrl+L boot-to-SeaBIOS trick. I had to download the ChromeOS image to an SD card, reflash the ChromeOS image and thet left me without any of my Fedora workstation I’d so lovingly created the day before. This turned a $1500 laptop with a gorgeous screen into a liability that I couldn’t take anywhere for fear of losing all my work, again. The need to do CTRL+L every time I rebooted was just crazy.
I didn’t give up that easily; I need to test various bits of GNOME on a proper HiDPI screen and having a loan machine sitting in a bag wasn’t going to help anyone. So I reflashed the BIOS, and now have a machine that boots straight into Fedora 22 without any of the other Chrome stuff getting in the way.
Reflashing a BIOS on a Chromebook Pixel isn’t for the feignt of heart, but this is the list of materials you’ll need:
- Set of watchmakers screwdrivers
- Thin plastic shim (optional)
- At least 1Gb USB flash drive
- An original Chromebook Pixel
- A BIOS from here for the Pixel
- A great big dollop of courage
This does involve deleting the entire contents of your Pixel, so back anything up you care about before you start, unless it’s hosted online. I’m also not going to help you if you brick your machine, cateat emptor and all that. So, lets get cracking:
- Boot chromebook into Recovery Mode (escape+refresh at startup) then do Control+D, then Enter, wait for ~5 mins while the Pixel reflashes itself
- Power down the machine, remove AC power
- Remove the rubber pads from the underside of the Pixel, remove all 4 screws
- Gently remove the adhesive from around the edges, and use the smallest shim or screwdriver you have to release the 4 metal catches from the front and sides. You can leave the glue on the rear as this will form a hinge you can use. Hint: The tabs have to be released inwards, although do be aware there are 4 nice lithium batteries that might kinda explode if you slip and stab them hard with a screwdriver.
- Remove the BIOS write protect screw AND the copper washer that sits between the USB drives and the power connector. Put it somewhere safe.
- Gently close the bottom panel, but not enough for the clips to pop in. Turn over the machine and boot it.
- Do enough of the registration so you can logon. Then logout.
- Do the CTRL+ALT+[->] (really F2) trick to get to a proper shell and login as the chromos user (no password required). If you try to do it while logged in via the GUI it will not work.
- On a different computer, format the USB drive as EXT4 and copy the squashfs.img, vmlinuz and initrd.img files there from your nearest Fedora mirror.
- Also copy the correct firmware file from johnlewis.ie
- Unmount the USB drive and remove
- Insert the USB drive in the Pixel and mount it to /mnt
- Make a backup of the firmware using
/usr/sbin/flashrom -r /mnt/backup.rom
- Flash the new firmware using
/usr/sbin/flashrom -w /mnt/the_name_of_firmware.rom
- IMPORTANT: If there are any warnings or errors you should reflash with the backup; if you reboot now you’ll have a $1500 brick. If you want to go back to the backup copy just use
/usr/sbin/flashrom -w /mnt/backup.rom, but lets just assume it went well for now.
/sbin/shutdown -hnow, then remove power again
- Re-open the bottom panel, which should be a lot easier this time, and re-insert the BIOS write washer and screw, but don’t over-tighten.
- Close the bottom panel and insert the clips carefully
- Insert the 4 screws and tighten carefully, then convince the sticky feet to get back into the holes. You can use a small screwdriver to convince them a little more.
Power the machine back on and it will automatically boot to the BIOS. Woo! But not done yet.
- It will by default boot into JELTKA which is “just enough Linux to kexec another”.
- When it looks like it’s hung, enter “root” then enter and it’ll log into a root prompt.
- Mount the USB drive into /mnt again
- Do something like
kexec -l /mnt/vmlinuz --initrd=/mnt/initrd.img --append=stage2=hd:/dev/sdb1:/squashfs.img
- Wait for the Fedora installer to start, then configure a network mirror where you can download packages. You’ll have to set up Wifi before you can download package lists.
This was all done from memory, so feel free to comment if you try it and I’ll fix things up as needed.