As all recent Chromebooks, the boot process for coral boards is based on Coreboot and Depthcharge.

In order to make Chromebooks usable in a LAVA lab, Depthcharge needs to be modified to include some additional features such as TFTP support, the ability to pass a ramdisk parameter to x86_64 kernels and enabling the command line interface. We keep these changes for every Chromebook board in this repo, each branch adds the appropriate changes to a particular board starting on a specific base version.

Chrome OS firmwares contain some binary blobs that we can’t build from scratch, so a way to generate a firmware with a modified version of Depthcharge is to take a release firmware binary from Google and replacing the payload with a custom modified Depthcharge binary built from the branch above. More info in the documentation of the firmware-tools repo.

Chromebook bootup in a LAVA setup

Chromebooks used in a LAVA environment will boot a Linux kernel through TFTP. In order to do this, LAVA will access the Depthcharge CLI through a serial terminal and enter the appropriate commands there. Assuming the Chromebook has a network link to a DHCP and TFTP server, a Linux kernel can be booted like this:

(depthcharge): tftpboot dhcp bzImage args initrd.cpio.gz

The first line configures the network interface in Depthcharge using DHCP and the second one boots a Linux kernel. This assumes that the TFTP server is serving the kernel binary (bzImage), the initrd (initrd.cpio.gz) and a plain text file containing the kernel command line arguments (args), which will be board-specific.