Chromebook layer compatible with OpenEmbedded/Yocto Project
Chromebooks are widely used nowadays, providing quality hardware mostly used for lightweight workloads.
While ChromeOS provides many interesting capabilities, it simply does not match a Linux Operating System when it comes to be used as a dev environment, it also does not mean a product on "chromebook HW" cannot be based on pure Linux either.
This layer allows you to build a Linux distribution for Chromebook devices using the OpenEmbedded Infrastructure.
Please see the corresponding sections below for details.
Table of Contents
I. What is this layer for?
This layer allows users to build a customized Linux Distribution for Chromebook devices.
The layer contains:
- X86 based Chromebooks
- ARM64 based Chromebooks
- Pixelbook (Chromebook EVE) * A specific tune for Skylake devices is added since the tune coming from meta-intel uses a very old TUNE at this point (Nehalem).
- Images work properly with Linux-Yocto, Linux-Chromium and Linux-Intel, and are updated to their latest version (to the day this was written).
To change the default setting adding the following to your local.conf should suffice, e.g.:
PREFERRED_PROVIDER_virtual/kernel = "linux-chromium" PREFERRED_VERSION_linux-chromium = "4.19.%"
- chromebook-image-minimal: Console image with network, VPN and firmware update capabilities
- chromebook-image-xfce: A full image, capable to boot using a graphics environment (XFCE), by definition it contains more cmdline utilities, network utilities, and it meant to be used mostly as a dev environment, it also contains python, vim and obviously the CHROMIUM web browser.
Chromebook Specific Recipes:
- Seabios (MrChromeBox Fork)
- MrChromeBox Firmware Utility Scripts
Which can be used to update the firmware of chromebook devices and such.
- An extra user is used on both images (chronospoky)
- Keymaps: a keymap is provided both for console en X11 to be used on Chromebooks
- xkeyboard-config already provides a chromebook model, but cant be used without X11
- A chromebook keymap is provided to be used on the console without X11
- A pixelbook-eve keymap model is added to the xkeyboard-config to allow thep pixelbook keyboard to work properly, since its keyboard is a little different than most chromebooks.
- Touchpad: libinput is used for both the touchpad and touchscreen devices, a few customizations are added both for Chromebooks in general and the Pixelbook
OE-core (meta) meta-poky meta-intel meta-oe meta-python meta-networking
For a full GUI image using xfce and featuring the chromium browser, the following layers are also required:
meta-multimedia meta-gnome meta-xfce meta-browser meta-clang
1.- Clone the required repositories
$ git clone https://git.yoctoproject.org/git/poky -b zeus $ cd poky $ git clone https://git.yoctoproject.org/git/meta-intel -b zeus $ git clone https://git.openembedded.org/meta-openembedded -b zeus $ git clone https://github.com/aehs29/meta-chromebook.git -b zeus
2.- Add layers to your bblayers.conf:
$ source oe-init-build-env $ bitbake-layers add-layer ../meta-intel $ bitbake-layers add-layer ../meta-openembedded/meta-oe $ bitbake-layers add-layer ../meta-openembedded/meta-python $ bitbake-layers add-layer ../meta-openembedded/meta-networking $ bitbake-layers add-layer ../meta-openembedded/meta-chromebook
3.- Add the required variables to your local.conf
$ echo "MACHINE = \"eve-chromebook\"" >> ./conf/local.conf
4.- Build an image
$ bitbake chromebook-image-minimal
5.- Flash the image to a storage device
$ dd if=tmp/deploy/images/eve-chromebook/chromebook-image-minimal-eve-chromebook.wic of=/dev/<your-dev>
Boot from USB (it is assumed the BIOS has been flashed to allow legacy boot), for more information on upgrading Coreboot or SeaBIOS please see: https://mrchromebox.tech/#chromeos
Seabios can be built from source as well from this layer and installed via an RPM, which will install it on /usr/share/firmware/ and the necessary tools to flash it are also provided (flashrom).
6.- Login as chronospoky (Reference to the chronos user used by Chromebooks running Chrome/Chromium OS)
Poky (Yocto Project Reference Distro) 3.0 eve-chromebook /dev/ttyS0 eve-chromebook login: chronospoky
Mix it up
To use a different kernel:
$ echo "PREFERRED_PROVIDER_virtual/kernel = \"linux-chromium\"" >> ./conf/local.conf
$ echo "PREFERRED_PROVIDER_virtual/kernel = \"linux-intel\"" >> ./conf/local.conf
To use a different MACHINE:
$ echo "MACHINE = \"x86-chromebook\"" >> ./conf/local.conf
To build a full GUI Linux Image which includes XFCE and Chromium (Repeat step 1 and 2 to add extra required layers: meta-clang, meta-browser, meta-xfce, etc. see II. Layer Dependencies.):
$ bitbake chromebook-image-xfce
$ dd if=tmp/deploy/images/eve-chromebook/chromebook-image-xfce-eve-chromebook.wic of=/dev/<your-dev>
IV. Submitting Patches
Please submit any patches against the meta-chromebook layer to the github repo https://github.com/aehs29/meta-chromebook and cc: the maintainer: aehs29 at gmail