Skip to content

Latest commit

 

History

History
132 lines (93 loc) · 9.53 KB

chromebook.mdx

File metadata and controls

132 lines (93 loc) · 9.53 KB
title description
Chromebook (Anywhere)
Chromebooks in the Ultramarine Anywhere Initiative

import Alert from "../../../../components/Docs/Alert.astro";

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

  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.