Asus Chromebook C201

While there's a fair bit of documentation on how others have installed Devuan/Arch on this computer, there's very little information in the Gentoo realm on the Asus C201/C100P, other devices with an RK3288 SoC, or ARM Chromebooks in general. This is how I managed to get Gentoo working on the C201. I went the Libreboot route, but that's up to you.

Specs
I highly recommend the 4gb variant.
 * Internal name: veyron/speedy
 * SoC: Rockchip RK3288
 * CPU: Quad-core ARM Cortex-A17 @ 1.8 GHz
 * GPU: Mali T764
 * Audio: Rockchip I2S
 * 11.6" screen @ 1366x768
 * Ram: 2 or 4gb

What works
On ChromeOS 3.14 or patched 4.12+:
 * Suspend/resume
 * Wireless (on newer kernels, with patch)
 * X w/ randr (HDMI assumed to work, not tested)
 * ACPI events (lid, buttons, charger)
 * Audio
 * Touchpad
 * Everything else!

What doesn't

 * No GPU hardware acceleration. Apparently you can get OpenGLES/EGL working with the Mali T764, but I had no such luck (nor did I try very hard - I don't particularly need this, support in X/various compositors is minimal, and the blobs are closed source). Future progress in this area likely to come from https://gitlab.freedesktop.org/panfrost
 * Bluetooth - Bluetooth works, but if you load the module at any time, it will crash both itself and wireless if you attempt to suspend. The current fix is to blacklist the module.
 * Wireless without blobs - brcmfmac requires non-free firmware here.

Considerations

 * You'll likely want a USB ethernet dongle until you get Gentoo running. Ensure the module is included with your kernel or built-in if you're using the Devsus script to create a bootable USB.
 * This laptop is speedy for its size, but still takes a long time to emerge larger packages. I made heavy use of distcc and crossdev's armv7a-hardfloat-linux-gnueabi target.
 * There is only 16GB of internal storage space available. I use an SD card for my /home and a decent USB flash drive to compile larger packages on (firefox/libreoffice).
 * You can decide on using either the ChromeOS kernel (linux 3.14) or mainline with patches. Despite a large majority claiming you will lose functionality on newer kernels, this was not the case for me; in fact, it fixed several issues from harmless warning messages in logs to X locking up entirely.
 * I recommend adding the arm_support overlay.
 * I also highly recommend you backup your ChromeOS partition (mmcblk0), however you can easily restore ChromeOS if you mess up. You can create a restore USB medium through desktop Chrome or download the files manually to write to a USB drive.

Preparation
First, you must enable developer mode, unsigned boot and booting from external mediums. Look here for more information.

This laptop uses a depthcharge payload to boot, thus standard minimal ISOs will not work here. I recommend creating a Devsus image and writing it to a flash drive to use for your installation medium. If you do so, modify the kernel config file to include modules for either brcmfmac SDIO or your USB wifi/ethernet dongle.

Once you're booted into your minimal environment and have obtained an internet connection via either wifi or an ethernet dongle, obtain from whatever distro you're on. We will now wipe ChromeOS and setup a partition for our kernel, and leave the rest for root.

Partition the rest of the free space how you wish with gdisk. Put your root filesystem directly after the kernel partition.

If you plan to use the kernel on your USB drive, simply dd it to the internal storage and copy all modules from it:

Optionally, you can copy the firmware blobs you backed up earlier to lib/firmware on your internal storage root.

Base installation
At this point, you should follow generic stage3 install steps. Mount your root filesystem wherever and setup stage3/Portage:

Proceed to chroot and emerge world and whatever else.

4.13+ kernel configuration
Requirements:


 * (if you are building on another machine) crossdev with the armv7a-hardfloat-linux-gnueabi target
 * (if you are building on another machine) crossdev with the armv7a-hardfloat-linux-gnueabi target
 * (if you are building on another machine) crossdev with the armv7a-hardfloat-linux-gnueabi target

Clone the RockMyy repo:

Download the following gist:

https://gist.github.com/anonymous/d0ce3911c933562154ca2e3f5fe602c5

Save 0007-brcmfmac-wififix.patch to patches/kernel/v4.13

Save c201_kerngen.sh & kernel.its to.

Save config-latest to ./config/v4.13/

Create a file named cmdline in the current directory.

Put the following in it, replace rootfstype:

The CPU governor defaults to conservative. If you want ondemand, or other modules, set MAKE_CONFIG=menuconfig to enter menuconfig.

Otherwise:

If all goes well, this will put the kernel as ./kernel and the modules in ./modules

You can now scp/copy this file and folder to the C201. Once you've done this, or if you're compiling on the C201, install them:

You can use this kernel with the Devsus USB as well.

ACPI
This handles alternating between speaker and headphone jack when one is plugged in, as well as lid suspend when the charger is unplugged. You can add power button support if you wish, though keep in mind the device will simply turn on again when you close the lid.

ALSA/Pulse quirks
Add the following if you use Pulseaudio:

See InstallingDebianOn/Asus/C201#Audio for further information. VEYRON-I2S shipped with alsa, so it's unlikely you'll need to add Google's UCM files.

I have not tested HDMI. It appeared under 3.14 as RockchipHDMI, but is missing under 4.13. Possibly a kernel config or UCM issue.

Keybinds
xbacklight doesn't work, however, a backlight device exists. You can use this in tandem with xbindkeys as a replacement for xbacklight:

Provide the delta for the backlight as an argument, positive or negative.

This file is read-only by default, so you may want to add to the local service:

If you'd like to reassign your function keys for another purpose, you can do so by editing the /usr/share/X11/xkb/symbols/pc file.

In the following example, I've remapped the search key (LWIN) to Caps and set some of the function keys to much-needed movement keys. I also remapped my power button to the Delete key:

Restart X for these changes to take effect.

You may need to remove old files in /var/lib/xkb:

Touchpad
Ensure the evdev and synaptics INPUT_DEVICES are set in make.conf.

Put 50-synaptics.conf in /etc/X11/xorg.conf.d

Google tools
You likely have installed at this point. This package contains utilities for Chromebooks, such as cgpt or crossystem, which is used to control firmware flags (USB boot, default boot device, etc). If you wish for this to work, mosys is also needed. You can acquire ebuilds for this here: https://github.com/doughdemon/felix-overlay

Other quirks
does not work here. You can query /sys/devices/virtual/thermal/thermal_zoneX/temp to get temperatures.

This will average the two CPU sensors up and output in a sane format:

does not display the correct discharge time. This can be obtained through upower:

If the bluetooth module loads and the system is suspended, both the bluetooth and wireless driver will stop working. A temporary fix is to blacklist the btsdio module:

Resources

 * https://notabug.org/dimkr/devsus
 * https://github.com/Miouyouyou/RockMyy
 * http://www.synkhronix.com/journal/gentoo-chromebook
 * https://wiki.debian.org/InstallingDebianOn/Asus/C201
 * Archlinuxarm, Rockchip git

Thanks to Miouyouyou and dimkr for their projects!