Chromebook (Anywhere)
This device type is still in the In Progress Phase. All information on this page is subject to change. Do not follow any instructions unless you know what you’re doing.
Chromebooks were an obvious target for Ultramarine Anywhere, despite being mostly standard hardware, they have custom EC and strange firmware.
Chromebook support in Ultramarine Linux is provided in partnership with the Chrultrabook Project.
x86
All x86 Chromebooks that use Depthcharge are supported by Ultramarine Chromebook Edition.
How it Works
Ultramarine Chromebook Edition uses a special bootloader called Submarine to load the kernel.
Under the hood, Submarine is an incredibly minimal Linux OS based on u-root, it’s only really usable for debug and booting a full distribution. Once Submarine is loaded, we use LinuxBoot to boot a full copy of Ultramarine (and hopefully more distros in the future).
Now for the big question, how do we do this without modifying the firmware? We take advantage of the way Depthcharge (the ChromeOS firmware) works. We store Submarine in a 16MiB partition on disk, this is normally used by ChromeOS to store a full ChromeOS Kernel and initramfs. Depthcharge doesn’t actually check if the contents of the partition are a valid kernel, it just checks for a GPT Header and runs whatever code is found in the partition, in our case, Submarine.
By default, Depthcharge will only boot code with Google’s signing keys, we get around this by enabling the built-in ChromeOS developer mode.
To summarise, we boot a tiny Linux distribution (Submarine) and use it to launch Ultramarine’s vmlinuz and initramfs using kexec.
Userland Changes
Devices in Ultramarine Anywhere try to stick very closely to the standard Ultramarine userland, sometimes we have to deviate from this to make the experience better.
Audio Support
We use WeirdTreeThing’s audio script to make audio work properly.
Default Partitions
On Chromebooks, we use F2FS (in lieu of Btrfs) and disable swap to extend the life of the eMMC storage found in many Chromebooks. We also create one 16MiB partition containing Submarine at the start of the disk instead of /boot/EFI
.
Keyboard Mapping
We use keyd to map keys on Chromebooks.
Feature Matrix
Feature | Functionality | Notes |
---|---|---|
Booting | Working | With Submarine or UEFI |
WiFi | Working | |
Ethernet | Working | |
Bluetooth | Working | |
Display | Working | |
Graphics | Working | |
Storage | Working | |
USB | Working | |
SD | Working | |
Ports | Working | |
Power | Working | |
Touch | Working | |
Pen | Partial | USI and Wacom Pens work, others may not |
Audio | Partial | May require additional setup. Some Chromebooks may not work due to controller issues |
Keyboard | Working | Some models may have issues on older kernels |
Touchpad | Working | |
Webcam | Working | |
Lid Switch | Partial | Some models may have issues |
Tablet Mode | Partial | Same reason as lid switch |
Unsupported Devices
Device | Reason |
---|---|
Mario | Firmware Limitations |
Alex | Firmware Limitations |
ZGB | Firmware Limitations |
Stumpy | Boot Partition Size Limitation (This can be Corebooted) |
Lumpy | Boot Partition Size Limitation (This can be Corebooted) |
Parrot | Boot Partition Size Limitation (This can be Corebooted) |
Butterfly | Boot Partition Size Limitation (This can be Corebooted) |
Link | Boot Partition Size Limitation (This can be Corebooted) |
Stout | Boot Partition Size Limitation (This can be Corebooted) |
These are among the first few generations of Chromebooks, and either use an unsupported proprietary firmware, or have firmware limitations which prevents booting a partition large enough to fit submarine (newer Chromebooks have larger size limitations).
Installation
Prebuilt images with userland tweaks will be available in the near future
Manual Installation - NOT RECOMMENDED
This method is NOT RECOMMENDED. Only do this if you know what you’re doing and need to test. We are not responsible for brickage, thermonuclear war, the death of a pet, etc.
This guide assumes you have Developer Mode and USB Booting Enabled
- Flash an Ultramarine Raw Image to a USB Drive
- Delete the first partition on the disk
- Create a 16MB ext4 partition
- Flash the submarine.kpart file to the partition
- Set the partition flags with cgpt
cgpt add -i <partition number> -t kernel -P 15 -T 1 -S 1 /dev/sdX
- Boot the image on the Chromebook
You’re now inside a minimal Ultramarine system, from here you can install a desktop (also NetworkManager-wifi
) and use Ultramarine from the external disk. If you’d like to install, you’ll need to install and configure Anaconda. Our Kickstarts can be found on Github.
- On the internal disk, create a 16MiB ext4 partition BEFORE the standard partitions
- Install Ultramarine normally
- After the installation is complete, flash the submarine.kpart file to the 16MiB partition you created
- Set the partition flags with cgpt
cgpt add -i <partition number> -t kernel -P 15 -T 1 -S 1 /dev/sdX
- Done!
ARM
ARM Chromebooks are in heavy development. If you’d like to help test, check out the ARM Beta Program.