Installing Linux on Pixelbook
Oct 1, 2019
[Huy Le]
7 minute read
WIKI LAYOUT

Understanding Linux #

Kernel - Low level drivers that interacts with hardware

Firmware Stuff #

*Firmware Write Protect Firmware is stored on a special SPI flash chip and has a special register that sets the device to read-only. This change be changed by special hardware and software measures.

The write protection of these chips are dependent on grounding a WP pin on the flash chip.

Specific to chromebook models after 2017+ (CR50 models), the state of the WP pin is controlled by the CR50 with close-case debugging (CCD). CCD requires a special USB-C SuzyQable.

So we want to be able to control the WP with CR50 on our Pixelbook - Google doc about it here

Firmware updates #

Questions #

  • UEFI - Unified Extensible Firmware Interface?
    • What it is to SeaBIOS?

ChromeOS

Flashing new Firmware #

For details on how to do this, go here… - Github Instructions

  • Open up the CCD, this require the PB to be in Developer Mode
  • gsctool -a --ccd_open
    • will open up the CCD and allow us to use the cable

Understand Implementation #

SuzyQables is a one-direction USB-A to USB-C cable that allow us to do CCD (close case debugging) More details here

Getting ChromiumOS Kernel #

This will allow us to get the screen backlight to work, touchpad, other stuff to work…

ChromeOS has it’s own kernel, and it has been compiled for ChromeOS. If we want to use the kernel created by Google, we need to access ChromiumOS source and compile it ourselves.

*Compilation of Kernel Source - .config folder controls hundreds of options; which drivers and functionality to include, etc. - modify this to ’tweak’ ChromeOS kernel for our Linux

Installation Notes on Pixelbook #

Issues to Note on Manjaro #

*Current version of ChromeOS Kernel - release-R78-12499.B-chromeos-4.4 - the eve-kernel-branch is outdated - release-R75-12105.B-chromeos-4.4

*pacman stuff that you want for PB (ac) # pacman -S base-devel # Everyone wants this package (ac) # pacman -S sudo # This one too (ac) # pacman -S xorg-server xorg-xinit xorg-utils xorg-xserver-utils # Install Xorg (ac) # pacman -S xf86-video-intel # The Chromebook has an Intel graphic card (ac) # pacman -S xf86-input-synaptics # There is a touchpad

*SUCCESS STORY!? manjaro forum

BRIGHTNESS WORK WITHOUT MODIFICATIONS!!! #

xrandr -q | grep connected xrandr --output eDP1 --brightness 0.5 THIS IS ONLY a software modification - https://askubuntu.com/questions/149054/how-to-change-lcd-brightness-from-command-line-or-via-script - The actual hardware problem is that the PWM that is used to control the backlight is disconnected - the pixelbook only use the native Display port configuration data (DPCP) to controller the backlight - enabling compat.linuxkpi.i915_enable_dpcd_backlight“1”= in /boot/loader.conf; - NOT for arch. the above instruction is for freeBSD - addd options i915 enable_dpcd_backlight=1 in /etc/modprobe.d/i915.conf

  • the panel reports that it supports both DPCD backlight and a direct PWM line (which is true);
  • Google/Quanta/whoever did not connect the PWM line;
  • (the panel is not aware of that);
  • the i915 driver prefers the PWM line when it’s reported as available.

read a little more about intel here intel i915

did the patch to kernel addd options i915 enable_dpcd_backlight=1 in /etc/modprobe.d/i915.conf

resources #

https://unrelenting.technology/articles/FreeBSD-and-custom-firmware-on-the-Google-Pixelbook

Kernel Stuff #

touchpad stuff #

  • xorg-server-dev = =xorg-server-devel for arch

  • installed xf86-input-cmt

  • Inverted scrolling

    • Option "Natural Scrolling" "1" in /usr/share/X11/xorg.conf.d/*touchpad
    • run xinput --list, xinput disable IDHERE, xinput enable IDHERE
  • touchpad jumping with libinput

  • dont want to use wayland, use xf86-input-libinput

    • also install xorg-xinput for setting

    • with this we can use device quirks to change the pressure sensitivity of the touchpad - at the end /etc/libinput/local-overrides.quirks

                [Touchpad pressure override]
                MatchUdevType=touchpad
                MatchName=*ACPI0C50:00 18D1:5028
                AttrPressureRange=5:3
      

Sound stuff #

Bootloader Stuff #

  • Updating bootloader
  • used manjaro-chroot -a to get the disk to be mounted and run at root
  • NOTE you will get “Boot failed. EFI USB device” if the mouse is plugged in
-   Notes to go back to
    -   inxi -Fxxz will show us the sytem configurations
    -   use `manjaro setting manager` to change kernel

-   Loading modules into kernel
    -   Using [Modprobe](https://wiki.archlinux.org/index.php/Kernel%5Fmodule#Using%5Ffiles%5Fin%5F/etc/modprobe.d/)

-   kernel can be recompiled with arch packaging
    -   [Arch build system for the Arch Kernel](https://wiki.archlinux.org/index.php/Kernel/Arch%5FBuild%5FSystem)
    -   using
        [Quilt to select and maintain patches](http://www.shakthimaan.com/downloads/glv/quilt-tutorial/quilt-doc.pdf)

OTHER ways?? #

Fixing Audio #

  • install audio manually following the ansible script
    • all the libraries for audio is most likely needed, looked at Fedora packages that is

possible new solution https://github.com/yusefnapora/pixelbook-linux/issues/60

Software to install on Manjaro #

To modify after backlight, mouse and sounds are working #

FLASHING Other Issues #

These are issues others ran into while flashing their Pixelbook

  • SuzyQ cable USB-C is NOT reversible, that is does not communicate the same when flipped 180 degrees

    • CR50 Firmware too old for CCD, Fix here
  • If cannot back up stock firmware, do it manually - sudo flashrom -r ~/Downloads/stock-firmware-pixelbook.rom

    • Storage media such has SD card, USB-A drive, might not all work. If it doesn’t work, try a different medium.
  • When trying to recover ChromeOS back to Pixelbook, USB might not be detected -> reboot multiple times, and try again

  • Using yusefnapora/pixelbook-linux method on Github might come across error with missing rsync and directories - manually install rsync, and manually create directories

    • sudo mkdir /etc/libinput/
    • install rsync
  • After installing if the screen rotate uncontrollably. get to the terminal, sudo apt-get remove iio-sensor-proxy disables package that talks to the sensor

  • If stuck on 2.4Ghz wifi, sudo iw reg set US - allows 5Ghz band to run

  • If touchpad does not work, try uninstall/remove sudo apt-get remove --purge xserver-xorg-input-synaptics and reinstall sudo apt-get install xserver-xorg-input-synaptics


Other Resources #

*Tools for the Job - chrx installs Linux onto Chromebook for dual boot, Read more here - Linux support for Pixelbook i7 - https://github.com/EmbeddedAndroid/linux-eve - Hacking the ChromeOS Kernel for Pixelbook - https://github.com/megabytefisher/eve-linux-hacks - including how to compile new kernels - Mr.Chromebox Firmware Utility Script - https://mrchromebox.tech/#fwscript

*Reddit posts - Pixelbook with dual boot