This project is a configuration of NixOS that renders it bootable on a Samsung Chromebook Plus in the form of a image that can be dumped to a microSD card and booted directly. The majority of the effort was accomplished by the Arch Linux ARM project, which builds an appropriate kernel, which was imported directly.
Weekend hobby project. Works for me.
nix-build release.nix -A sdImage
Or try ./simple-build.sh
.
- Place device in Developer Mode
- Dump image to SD card.
- Insert into Chromebook.
- Boot with Ctrl-U.
Use the standard nixos-generate-config command to generate the
hardware and filesystem configuration file. In the main configuration
file (configuration.nix
), include the two modules from this
repository's modules/
directory, which adds in the kernel package,
and the depthcharge bootloader integration. In you main
configuration.nix, specify your desired kernel. For example:
{ config, lib, pkgs, ... }:
{
include = [
./kevin-nix/modules
];
boot.kernelPackages = pkgs.linuxPackages_gru_4_4;
boot.loader.depthcharge.enable = true;
boot.loader.depthcharge.partition = "/dev/disk/by-partlabel/kernel";
}
The boot process scans the media for a partition designated as a kernel, using attributes stored in GPT.
This kernel partition (kpart) is a Flattened Image Tree (fit) image including the kernel, a set of dtbs, the initrd, and the kernel command line.
The depthcharge module will will produce a kernel partition (kpart
)
file as part of the toplevel system, and on switch will write its
contents to the kernel partition.
The kernel partition is not a GC root. If you remove old versions of your system profile, you may render your environment unbootable.
$(nix-build --no-out-link -E 'import <nixpkgs> { overlays = [ (import ./packages) ]; }' -A vboot_reference)/bin/cgpt show $(readlink -f ./result/sd-image/*.img)
start size part contents
0 1 PMBR
1 1 Pri GPT header
2 32 Pri GPT table
2048 131072 1 Label: "kernel"
Type: ChromeOS kernel
UUID: 534078AF-3BB4-EC43-B6C7-828FB9A788C6
Attr: priority=10 tries=5 successful=1
133120 4393031 2 Label: "NIX_SD"
Type: B921B045-1DF0-41C3-AF44-4C6F280D3FAE
UUID: 0340EA1D-C827-8048-B631-0C60D4478796
4526151 32 Sec GPT table
4526183 1 Sec GPT header
Notice the additional metadata for the kernel partition Attr: priority=10 tries=5 successful=1
.
Tested against nixpkgs f607771d0f5.
-
Make a fit image containing uboot, which can then use the standard extlinux-based boot flow.
-
Use a vanilla kernel. It is expected that 4.16 will include support that enables the display without additional patches.
-
Use depthcharge's fallback features to have multiple bootable profiles.
-
Build the open source Mali kernel module from ARM that matches the binary
libmali.so
available from rockchip.
Everything original to this repository is MIT licensed. Packages are naturally covered by their own licences. The linux_gru patches and config files are from archlinuxarm which is covered by the GPLv2.