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

FeatureFunctionalityNotes
BootingWorkingWith Submarine or UEFI
WiFiWorking
EthernetWorking
BluetoothWorking
DisplayWorking
GraphicsWorking
StorageWorking
USBWorking
SDWorking
PortsWorking
PowerWorking
TouchWorking
PenPartialUSI and Wacom Pens work, others may not
AudioPartialMay require additional setup. Some Chromebooks may not work due to controller issues
KeyboardWorkingSome models may have issues on older kernels
TouchpadWorking
WebcamWorking
Lid SwitchPartialSome models may have issues
Tablet ModePartialSame reason as lid switch

Unsupported Devices

DeviceReason
MarioFirmware Limitations
AlexFirmware Limitations
ZGBFirmware Limitations
StumpyBoot Partition Size Limitation (This can be Corebooted)
LumpyBoot Partition Size Limitation (This can be Corebooted)
ParrotBoot Partition Size Limitation (This can be Corebooted)
ButterflyBoot Partition Size Limitation (This can be Corebooted)
LinkBoot Partition Size Limitation (This can be Corebooted)
StoutBoot 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

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

  1. Flash an Ultramarine Raw Image to a USB Drive
  2. Delete the first partition on the disk
  3. Create a 16MB ext4 partition
  4. Flash the submarine.kpart file to the partition
  5. Set the partition flags with cgpt
cgpt add -i <partition number> -t kernel -P 15 -T 1 -S 1 /dev/sdX
  1. 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.

  1. On the internal disk, create a 16MiB ext4 partition BEFORE the standard partitions
  2. Install Ultramarine normally
  3. After the installation is complete, flash the submarine.kpart file to the 16MiB partition you created
  4. Set the partition flags with cgpt
cgpt add -i <partition number> -t kernel -P 15 -T 1 -S 1 /dev/sdX
  1. Done!

ARM

ARM Chromebooks are in heavy development. If you’d like to help test, check out the ARM Beta Program.