Actualizado: Hoy me puse a intentar meter Linux en la tablet de la que hablé en la anterior entrada. Y lo he conseguido, he aquí la prueba:
Dado que esta tablet está equipada con un Allwinner A13, necesitamos un kernel y un cargador adecuados. Lo interesante de este chip es que no hace falta tocar la flash interna, sino que basta con ponerlos en una tarjeta SD, y arrancará desde ésta directamente. Y si luego queremos volver al sistema original, basta con retirar la tarjeta y reiniciar.
El núcleo y el cargador los podemos obtener del repositorio GIT linux-sunxi, orientado precisamente hacia este tipo de SoCs. Las instrucciones básicas para compilar y generar todo las saqué de la página de Olimex, y las he adaptado a este modelo.
Supondré que tienes una distribución basada en Debian. Lo primero que hay que hacer es instalar los paquetes de compilación cruzada y otras bibliotecas necesarias:
sudo apt-get install gcc-4.7-arm-linux-gnueabi gcc-4.7-arm-linux-gnueabi-base gcc-arm-linux-gnueabi libncurses5-dev uboot-mkimage build-essential git libusb-dev libusb-1.0-0-dev
Ahora bajamos el u-boot modificado con:
git clone -b sunxi https://github.com/linux-sunxi/u-boot-sunxi
Entramos en el directorio u-boot-sunxi y compilamos el código:
cd u-boot-sunxi make CROSS_COMPILE=arm-linux-gnueabi- a13-olinuxino ls -l u-boot.bin spl/sunxi-spl.bin cd ..
Ahora que tenemos compilado el cargador, vamos con el núcleo. Nos lo bajamos desde el repositorio, preparamos una configuración base y entramos en modo configuración:
git clone -b sunxi-3.0 https://github.com/linux-sunxi/linux-sunxi cd linux-sunxi make ARCH=arm a13_defconfig make ARCH=arm menuconfig
Entre las opciones que he tocado están las siguientes:
- General Setup
- POSIX message queues -> Y
- System Type
- Emulate SWP/SWPB instructions -> N
- Device Drivers
- Network Device Support
- Ethernet (10 or 100Mbit) -> N
- Character Devices
- Non-standard serial port support -> N
- Serial drivers
- 8250/16550 and compatible serial support -> N
- Console Display driver support
- Map the console to the primary display device -> Y
- Bootup logo -> Y
- Network Device Support
- Security Options
- Enable the securityfs filesystem -> N
Una vez configurado, procedemos a compilar el núcleo:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=out modules make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=out modules_install
Ahora llega el momento de generar la tarjeta SD con el sistema básico. Para ello, primero necesitamos dividirla en, al menos, dos particiones, una en formato VFAT (donde irá el núcleo) y otra en formato EXT2/3/4 con el sistema en sí. Así que arrancamos fdisk y empezamos. Es importante que la primera partición empiece, al menos, en el sector 2048, para dejar sitio para el arranque.
Una vez formateadas ambas particiones, descargamos un sistema Debian base, lo descomprimimos en la partición EXT2/3/4 (que supondremos que está montada en /media/particion2) y copiamos los módulos (asumiendo, también, que la versión de núcleo que tenemos es la 3.0.76):
wget http://rcn-ee.net/deb/rootfs/wheezy/debian-7.1-console-armhf-2013-07-22.tar.xz tar xvf debian-7.1-console-armhf-2013-07-22.tar.xz sudo tar -C /media/particion2 -xvf debian-7.1-console-armhf-2013-07-22/armhf-rootfs-debian-wheezy.tar cd ../linux-sunxi sudo cp -a linux-allwinner/out/lib/modules/3.0.76/ /media/particion2/lib/modules/
Es importante descomprimirlo como root para que conserve los nombres de usuario correctos.
Ahora bajamos los ficheros de definición de placas y las utilidades, y las compilamos:
git clone https://github.com/linux-sunxi/sunxi-boards git clone https://github.com/linux-sunxi/sunxi-tools cd sunxi-tools make
Ahora vamos a generar el fichero script.bin, necesario para configurar el núcleo durante el arranque. Para ello utilizaremos las utilidades que acabamos de compilar y el fichero de configuración a13_mid.fex, situado en el repo sunxi-boards, por ser el más parecido a nuestra tablet:
./fex2bin ../sunxi-boards/sys_config/a13/a13_mid.fex script.bin
El siguiente paso consiste en copiar el fichero uImage y script.bin en la partición VFAT de nuestra tarjeta SD:
cp script.bin /media/particion1 cd ../linux-sunxi cp arch/arm/boot/uImage /media/particion1
Por último sólo queda instalar u-Boot en la tarjeta, para lo cual hacemos (asumiendo que la tarjeta está en /dev/sdX):
cd ../u-boot-sunxi sudo dd if=spl/sunxi-spl.bin of=/dev/sdX bs=1024 seek=8 sudo dd if=u-boot.bin of=/dev/sdX bs=1024 seek=32
Y con esto ya está. Sólo queda meter la tarjeta SD en la tablet, encenderla, y conectar un teclado USB.
El próximo paso será intentar activar la WiFi, algo que me está dando bastantes quebraderos de cabeza.