Skip to content

Toshiba Chromebook 2 - Swanky

Es una de las mejores chromebooks de la historia, lo único malo es que Google nunca habilitó la Play Store para este modelo (suertuda la gente que compró el modelo en 2015).

Install Chrome OS

La extensión de recovery oficial "no anda en linux". Pero hay una forma oficial muy sencilla de re-instalar chrome en una chromebook.

Ver: https://support.google.com/chromebook/answer/1080595?hl=en#zippy=%2Cuse-a-linux-computer

  1. On the Linux computer, download the Recovery Tool: https://dl.google.com/dl/edgedl/chromeos/recovery/linux_recovery.sh
  2. Change the script permissions to allow execution with the following command: $ sudo chmod 755 linux_recovery.sh
  3. Run the script with root privileges with the following command: $ sudo bash linux_recovery.sh
  4. Follow the on-screen instructions to create recovery media.
  5. To continue to recover your Chromebook, follow the steps above: https://support.google.com/chromebook/answer/1080595#traditional

Pasar SWANKY al script (imagen numero 340).

  If you know the Model string displayed at the recovery screen,
  type some or all of it; otherwise just press Enter: SWANKY

Una vez que esté listo el recovery USB, hay que bootear la chromebook en modo recovery sosteniendo "Esc + Refresh" y sin soltar, apretar power una vez.

El pendrive de 4GB que use no le gustó, pero probé de nuevo usando una tarjeta SD y esa si la reconoció, e hizo todo el recovery automáticamente.

Desde Chrome OS, se puede formatear el SD/pendrive después de usarlo, usando la "recovery utility". Tiene un menú desplegable para eso, aparece al apretar el simbolito de settings (el engranaje).

Tweaks

Habilitar "developer mode", para tener acceso al crosh shell con "Ctrl + Alt + t".

Instalar crouton, que sirve para instalar cosas de Linux en "chroots": https://github.com/dnschneid/crouton

El readme principal tiene ejemplos resumidos, y hay una wiki: https://github.com/dnschneid/crouton/wiki

Yo usé Debian:

# Debian con xorg por default (porque está antes en la lista) y xiwi habilitado.
sudo crouton -r bookworm -t x11,xorg,xiwi,audio,cli-extra,core

# Start chroot
startcli

# Install packages
sudo apt update
sudo apt install bash-completion

Comandos utiles:

# Lista de chroots
sudo edit-chroot -a
# Borrar un chroot
sudo delete-chroot xenial
# Iniciar un chroot
sudo startcli
sudo startxfce4 -n xenial
sudo startxiwi xterm

De todas las distros que probé, la unica que funciono bien fue xenial.

Unbrick

En algun momento la "rompí" y no la pude recuperar sin herramientas especiales:

  • Raspberry Pi
  • Pinza SOIC de 8 pines

La pinza sirve para conectar la interfaz SPI del Raspberry PI a un chip en el motherboard de la laptop: el "BIOS".

20200516-111026.png

Seguí esta guía en general.

Seguí esta guía para complementar la otra al flashear el stock BIOS.

Con algunas diferencias menores, que aparecen a continuación.

Toshiba CB2 BIOS Chip

winbond 25064FWSIG 1445

Datasheet: https://www.winbond.com/resource-files/w25q64fw_revd_032513.pdf

Extract ROM image from ChromeOS recovery image

Usar:

El script no encuentra esta chromebook salvo por su codename "SWANKY"

  There are up to 258 recovery images to choose from:

  76 - Toshiba Chromebook 2 (2015 Edition)
    channel:  stable-channel
    pattern:   ^GANDOF .*
  115 - Toshiba Chromebook
    channel:  stable-channel
    pattern:   ^LEON .*
  211 - Toshiba Chromebook 2
    channel:  stable-channel
    pattern:   ^SWANKY .*

Recuerdo que Swanky era mi chromebook :_ así que me mandé a usar el código 211.

Bajar y extraer esto:

  wget https://dl.google.com/dl/edgedl/chromeos/recovery/chromeos_12739.111.0_swanky_recovery_stable-channel_mp-v3.bin.zip

Instalar herramientas para extraer el archivo "bin":

  sudo pacman -S multipath-tools sharutils

Lo siguiente monta un montón de particiones "loop" y extrae el ROM del BIOS que necesitamos:

  sudo kpartx -a chromeos_12739.111.0_swanky_recovery_stable-channel_mp-v3.bin

  sudo mount -o ro /dev/mapper/loop0p3 /mnt

  mkdir shellball

  /mnt/usr/sbin/chromeos-firmwareupdate --sb_extract shellball

  sudo umount /mnt

En la carpeta shellball tiene que haber varios archivos. Uno de ellos es bios.bin y es la ROM que queremos flashear al BIOS chip de la chromebook.

Para terminar de desmontar todas las cosas (raras) que se montaron, están los comandos de la guía que seguí:

  sudo dmsetup remove /dev/mapper/loop0p[0-9][0-9]
  sudo dmsetup remove /dev/mapper/loop0p[0-9]
  sudo losetup -d /dev/loop0

PROBLEMA

El ejemplo de la guía es para una chromebook Acer:

  172 - Acer Chromebook 11 (C720, C720P)
    channel:  stable-channel
    pattern:   ^PEPPY .*

Usa "PEPPY A2A-A2E-A5W" como hwid.

En internet dicen que no importa cual sea siempre que sea válido. Así que uso SWANKY E5A-E3P-A47 como sugieren:

El comando queda:

  ./gbb_utility --set --hwid="SWANKY E5A-E3P-A47" bios.bin bios.bin.new

Lástima que "gbb_utility" no está en la carpeta y no lo puedo encontrar.

Seguí adelante igual usando "bios.bin" y por suerte no fue indispensable cambiar las flags del ROM para poder recuperar ChromeOS. Aunque durante el boot algunos mensajes aparecen al respecto.

Preparar Raspberry Pi 4 SPI

Enable SPI with raspi-config

If you are using a terminal, you will need to:

  1. Run sudo raspi-config. 1. Use the down arrow to select 5 Interfacing Options 1. Arrow down to P4 SPI. 1. Select yes when it asks you to enable SPI, 1. Also select yes if it asks about automatically loading the kernel module. 1. Use the right arrow to select the button. 1. Select yes when it asks to reboot.

Test:

  ls /dev/*spi*

Expect:

  /dev/spidev0.0  /dev/spidev0.1

Los pines del SPI deben coincidir con los del chip del BIOS.

SPI en Rpi 4: https://learn.sparkfun.com/tutorials/raspberry-pi-spi-and-i2c-tutorial/all

Instalar flashrom

Ya estaba instalado en mi RPi 4, pero era una versión vieja y tuve que compilar flashrom 1.2 desde la fuente.

El flasrom que tenía el RPi4 era viejo, así que lo compilé desde la fuente y ahí anduvo.

  sudo apt-get update
  sudo apt-get install pciutils libftdi-dev libusb-dev libpci-dev libusb-1.0
  mkdir flashrom
  cd flashrom/
  wget https://download.flashrom.org/releases/flashrom-v1.2.tar.bz2
  tar -xvf flashrom-v1.2.tar.bz2
  cd flashrom-v1.2/
  make

No lo instalé con sudo make install. En cambio, más adelante ejecuté el binario que se compiló directamente desde la carpeta donde estaba.

Identificar el BIOS chip

Lo miré con una lupa, el modelo es "w25q64fw".

Ver w25q64fw_revd_032513.pdf y pinout_SOIC.svg en el zip: unbrick_resources_toshibacb2.tar.gz

Datasheet: https://www.winbond.com/resource-files/w25q64fw_revd_032513.pdf

Correspondencia de pines:


Chip pin number Chip pin name Pi4 Pin Pi4 Pin name


1 /CS 24 CE0 2 DO 21 MISO 3 /WP 17 3V3 Power 4 GND 25 GND 5 DI 19 MOSI 6 CLK 23 SCLK 7 /HOLD /RESET 17 3V3 Power 8 VCC 17 3V3 Power


So, in summary:

  • We need to connect Pin 17 to VCC, HOLD and WP. * Pin 19 to DI * Pin 21 to DO * Pin 23 to SCK, which is named CLK on the manufacturer's spec * Pin 24 to /CS * And Pin 25 to GND

Conectar todo

20200516-110815.png

Verifiqué que todo estuviera bien conectado como 3 veces; les recomiendo hacer lo mismo.

ROM read & backup

  sudo ./flashrom/flashrom-v1.2/flashrom -p linux_spi:dev=/dev/spidev0.0 -r bad_flash.rom
    flashrom v1.2 on Linux 4.19.97-v7l+ (armv7l)
    flashrom is free software, get the source code at https://flashrom.org
    Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
    Using default 2000kHz clock. Use 'spispeed' parameter to override.
    Found Winbond flash chip "W25Q64.W" (8192 kB, SPI) on linux_spi.
    Reading flash... done.

ROM flash

  sudo ./flashrom/flashrom-v1.2/flashrom -p linux_spi:dev=/dev/spidev0.0 -w shellball/bios.bin

esperar un rato y listo! debería dar un mensaje de todo bien al terminar la verificación.

Instalar un Linux

  1. Habilitar el developer mode

  2. Ctrl+Alt+T

    shell sudo su - crossystem # Imprimir opciones actuales crossystem dev_boot_legacy=1 # Configurar legacy boot, estaba en 0 por defecto

  3. Reiniciar

Después de eso no me quedó claro que estuviera entrando a SeaBIOS con Ctrl+L al encender la PC.

Así que seguí el tuto para configurar las flags (cosa que antes no había podido hacer).

flashrom --wp-disable
flashrom -r bios.bin  # backupear el BIOS porsia
/usr/share/vboot/bin/set_gbb_flags.sh 0x489
flashrom --wp-enable

Reiniciar.

Esta vez, la chromebook inició haciendo un doble beep solita. Algo que antes no hacía. Lamentablemente no puedo entrar al boot menu apretando ESC, quizás SeaBIOS no esté instalado realmente.

Vamos con esta: https://wiki.archlinux.org/index.php/Chrome_OS_devices/Custom_firmware#Flashing_with_MrChromebox.27s_Firmware_Utility_Script

Desde una chrosh/shell:

  cd
  curl -LO https://mrchromebox.tech/firmware-util.sh
  sudo bash firmware-util.sh

Seleccionar opción 1 (RW_LEGACY). Las opciones se explican un poco acá: https://mrchromebox.tech/#firmware

Ahora si: conectar el pendrive, reiniciar, apretar ESC al inicio aparecen las opciones de booteo.

Gallium OS

Gallium OS para la Toshiba CB2 requiere un firmware update (instrucciones arriba).

Bajar el Baytrail para mi SWANKY de https://galliumos.org/download

Armar un live USB con esa iso, conectar el pendrive, reiniciar, apretar ESC y bootear desde el pendrive. Instalar GalliumOS siguiendo las instrucciones.

Todo funciona!

Function keys

R-Alt + [0-9|-|+]

Google Chrome PPA

wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - 
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
sudo apt-get update
sudo apt-get install google-chrome-stable

Flatpak

Instalación:

sudo apt-get install flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

Spotify:

flatpak install flathub com.spotify.Client
flatpak run com.spotify.Client
cp /var/lib/flatpak/exports/share/applications/com.spotify.Client.desktop .local/share/applications/

Arch

Problemas: no tiene audio, parece ser un tema del kernel y no lo pude arreglar :/

Elegí Arch porque tengo arch en la laptop. Me gusta la idea de tener un mirror local de paquetes en la LAN, para actualizar más rápido. Además, me sirve de sistema backup para poder arreglar cosas cuando yo rompa algo.

https://wiki.archlinux.org/index.php/Chrome_OS_devices#Chrome_OS_devices

Armar un pendrive con ArchLinux: https://wiki.archlinux.org/index.php/USB_flash_installation_media

  sudo dd bs=4M if=archlinux-2020.04.01-x86_64.iso of=/dev/sda status=progress oflag=sync

Conectar el pendrive, reiniciar, apretar ESC al inicio, seleccionar el pendrive como opción de booteo e instalar Arch Linux!.

Notas

lsblk muestra un dispositivo mmcblk0 de 14.7G con varias particiones, y hay otros dos de 4M cada una que no voy a tocar (mmcblk0boot0 y mmcblk0boot1).

Seguir:

  fdisk -l /dev/mmcblk0
  gdisk /dev/mmcblk0

Borrar todas las particiones y crear:

  • una particion importante para GRUB de tamaño +1M y tipo ef02
  • una para / que deje libre algo de espacio al final, siguiendo el tip.

Continuar con la instalación estándar...

Problemas

Audio entrecortado

Hay algun problema en la reproducción del audio. A veces se soluciona reiniciando pulseaudio con pulseaudio -k, pero cuando abro el "Volume Control" de XFCE se vuelve a romper o deja de andar, y las teclas de volumen dejan de funcionar también.

Cuando las teclas de sonido no funcionan, puedo cambiar el volumen a través de alsamixer.

20200518-074355.png

Posibles soluciones:

Hardware upgrade

La placa WiFi es esta: https://ark.intel.com/content/www/us/en/ark/products/75439/intel-dual-band-wireless-ac-7260.html

No estoy seguro de que se pueda meter otra cosa en ese slot que es HMC o bien M.2 2230.

Algunas personas modificaron esta o la versión 2015: