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
- On the Linux computer, download the Recovery Tool: https://dl.google.com/dl/edgedl/chromeos/recovery/linux_recovery.sh
- Change the script permissions to allow execution with the following command:
$ sudo chmod 755 linux_recovery.sh
- Run the script with root privileges with the following command:
$ sudo bash linux_recovery.sh
- Follow the on-screen instructions to create recovery media.
- 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".
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:
- https://johnlewis.ie/extracting-the-shell-ball-rom-using-a-chromeos-image/
- https://dl.google.com/dl/edgedl/chromeos/recovery/linux_recovery.sh
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:
- https://www.reddit.com/r/chromeos/comments/4atoxi/can_i_restore_my_hwid/
- https://superuser.com/questions/1035433/cant-boot-to-alternate-os-or-live-cd
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:
- 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:
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¶
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¶
-
Habilitar el developer mode
-
Ctrl+Alt+T
shell sudo su - crossystem # Imprimir opciones actuales crossystem dev_boot_legacy=1 # Configurar legacy boot, estaba en 0 por defecto
-
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:
- Guia de instalacion: https://wiki.archlinux.org/index.php/Installation_guide
- Configuración post-instalación: https://wiki.archlinux.org/index.php/Chrome_OS_devices#Post_installation_configuration
fdisk -l /dev/mmcblk0
gdisk /dev/mmcblk0
Borrar todas las particiones y crear:
- una particion importante para GRUB de tamaño
+1M
y tipoef02
- 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
.
Posibles soluciones:
- https://www.google.com/search?q=gallium+os+audio+crackling+choppy
- https://www.reddit.com/r/GalliumOS/comments/cqy22v/audio_goes_choppy_if_i_open_up_volume_control/
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: