Asus Chromebook C201

Intro
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. I'll be slowly documenting my steps on 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, especially if you're going to be compiling things :>
 * 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

 * 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://notabug.org/cafe/chai
 * Bluetooth - Bluetooth works, but if you load the module at any time, it will crash both itself and wireless if you attempt to suspend. More to come...
 * 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

Starting out
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 config file to include your

I also highly recommend you backup your ChromeOS partition (mmcblk0), however you can easily restore ChromeOS if you mess up. You can create one through desktop Chrome or download the files manually to write to a USB drive.

Once you're booted into your minimal enviroment and have obtained an internet connection via either wifi or an ethernet dongle, obtain vboot-utils 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 the kernel on your flash drive 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
Requirments: Clone the RockMyy repo:
 * crossdev, armv7a-hardfloat-linux-gnueabi target
 * vboot-utils

Download the following gist:

https://gist.github.com/anonymous/317d574515d22e0384f74e4275a40aeb

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

Save 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 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 doensn'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.

If you'd like to reassign your function keys to their purpose, you can do this by editing /usr/share/X11/xkb/symbols/pc.

Here, 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:

Google tools
TODO: vboot-tools, u-boot-utils, crossystem, mosys

Web browser
Midori and Firefox 45 both work fine here, with the +jit flag enabled. This is important, as both browsers will act up or segfault without it.

To get Firefox to compile, this patch was required.

Other quirks
lm_sensors 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:

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 creating their scripts!