Debian auf Android-Tablet

Vortrag auf den CLT 2015

von Klaus Kruse

Über mich

Idee

Debian auf einem (alternden) Android Tablet installieren:

Ohne dass dies passiert:

Die verwendeten Logos sind Eigentum der jeweiligen Projekte, siehe Urheberrechtshinweise

Ausgangspunkt

  • Android ist schon ein normales Linux: Kernel bootet, hängt Root-FS ein, führt Init aus...
  • Statt dem Android-Dateisystem hängt man ein eigenes z.B. von der SD-Karte ein → Win
  • Hardware: Motorola Xoom Tablet (2x1Ghz, 1GB Ram, Wifi+3G)

Challenge Accepted

Flashlayout

  • Xoom hat einen Flashspeicher mit einer GPT-Partitionstabelle
  • Vorhandene Partitionen:
    • Boot
    • Recovery
    • System
    • Und weitere mit Firmware-NSA-Foobar

Für meinen Ansatz nur Boot-Partition interessant

Backups

  • Boot in das Recovery: Nandroid-Backup aller Partitionen
  • Mindestens: Boot-Partition
  • Hilfsreiche Vorlage vom laufenden System:
/proc/config.gz # Kernelkonfiguration

Bootloader: unlocked

Voraussetzung für die nachfolgenden Schritte

								
$fastboot oem unlock
...
(bootloader) To continue, follow instructions on the device's display...
								
							

Wer es nicht kann/will: Alternativen

Toolchain

  • Architektur des Build-Systems meistens x86/x86-64 != Zielarchitektur
  • Build-Umgebung (Compiler etc.) muss dies abbilden (Cross-Compile)
  • Die meisten Distributionen führen entsprechende Pakete
  • Statisch gelinkte Toolchains (Endianess und Architektur beachten!) führt das Linaro-Projekt

Build-Umgebung vorbereiten

Beispiel mit Linaro
							
vagrant init -m nfq/wheezy && vagrant ssh
wget Paket -O- http://yaturl.net/d17 | unxz
export PATH=~/gcc-linaro-arm-*/bin:$PATH
alias makearm="make -j2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- \
CFLAGS="-mfloat-abi=softfp" CXXFLAGS="-mfloat-abi=softfp""
							
						
Smile

Weil einfach einfach besser ist

Kernel-Sourcen

  • vom Hersteller (Danke GPL!)
  • (meistens) neuer und aktueller: Custom Rom-Szene
  • Beste Quelle: xda-developers

Oldschool

							
git clone https://github.com/TeamEOS/kernel_moto_wingray.git
cd kernel_moto_wingray
makearm help
> [...]
> stingray_defconfig       - Build for stingray
makearm stingray_defconfig
makearm menuconfig
 							
						

Kernelkonfiguration

  • ANDROID_PARANOID_NETWORK=n
  • ANDROID_LOW_MEMORY_KILLER=n
  • CONFIG_BCMDHD_FW_PATH=<Pfad>
  • CONFIG_BCMDHD_NVRAM_PATH=<Pfad>

Wenn man zufrieden ist: makearm

Mit etwas Glück kompiliert es beim ersten Anlauf...

Debian System erzeugen

Debootstrap to the rescue!

					
apt-get install binfmt-support qemu qemu-user-static debootstrap
mkdir xoom_debian
debootstrap --foreign --arch=armel wheezy ./xoom-debian
cp /usr/bin/qemu-arm-static xoom_debian/usr/bin
chroot xoom_debian /debootstrap/debootstrap --second-stage
chroot xoom_debian dpkg --configure --pending
						
					

Initrd generieren

						
cd kernel_moto_wingray
makearm INSTALL_MOD_PATH=../xoom_debian modules_install
cp System.map ../xoom_debian/boot/
cp arch/arm/boot/zImage ../xoom_debian/boot
chroot ../xoom_debian /bin/bash
apt-get install initramfs-tools
mkinitramfs -o /boot/initrd.img.gz $(ls /lib/modules)
						
					

Bisher geschafft:

  • Kernel
  • Initrd
  • Debian Grundsystem

Obama face not bad

Angriff

Vorher SD-Karte partitionieren und Dateisystem erstellen

					
fastboot -c "root=/dev/mmcblk0p2" flash:raw boot zImage initrd.img.gz
	creating boot image...
	creating boot image - 6316032 bytes
	sending 'boot' (6168 KB)...
	OKAY [  0.906s]
	writing 'boot'...
	OKAY [  1.801s]
	finished. total time: 2.707s
fastboot reboot
	rebooting...
	finished. total time: 0.564s
					
				

Ergebnis

Win!

Feel Like a Sir

Xorg

Handgestrickte Xorg.conf wegen Touchscreen nötig

						
[...]
Section "InputDevice"
Identifier "Touchscreen"
Driver "multitouch"
Option "Device" "/dev/input/event6"
[...]
						
					

evdev-Treiber funktionierte nicht - so nur relative Bewegung → Mauszeiger

KDE

Etwas langsam, funktioniert in den Grundzügen

Gnome Shell

Etwas schöner auf dem Tablet, aber noch kein Knaller

Matchbox

Viel besserer erster Eindruck, leider keine Weiterentwicklung mehr

Bugs und Probleme

  • Maus/Touchscreen
  • Display und fbcon-Kernelmodul (→ fbcon=map:1)
  • Generelle Unterstützung der WMs und DEs für Touchscreens
Are you fucking kidding me

Im Jahr 2015

Alternativen

Wenn man nicht an die Boot-Partition will oder oder oder...

Trotzdem immer vorher Backups machen

Hilfreiche Links

Ende

  • Fazit: Noch Bastelarbeit notwendig, aber Grundsystem fertig
  • Will ich noch machen: Kernel und Dateisystem als armhf
  • Fragen?

Danke für eure Aufmerksamkeit

Urheberrechtshinweise