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.
Arrancando Linux en la tablet por A cuadros está licenciado bajo una Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.
Excelente , muy buen trabajo, yo trabajo con Ubuntu, sera posible crear la SD Ubuntu?, Cordial Saludo
En principio no deberías tener problemas. Simplemente reemplaza la imagen de debian.
no puedo compilar, me quedo en el
make CROSS_COMPILE=arm-linux-gnueabi- a13-olinuxino
y si voy al makefile para pasarme esa linea del error me sale luego
xubuntu@xubuntu:~/Descargas/u-boot-sunxi$ make CROSS_COMPILE=arm-linux-gnueabi- a13-olinuxino
make: *** No hay ninguna regla para construir el objetivo «a13-olinuxino». Alto.
Es posible que hayan cambiado la lista de dispositivos o el nombre de ellos. Si tienes autocompletado, prueba a teclear make y dale dos veces al tabulador (como un doble click) a ver qué opciones te da.
hola gracias por compartir este tutorial es muy interesante
ahora mi interés esta en que como es posible que la tablet al encender lograr bootee primero la microSD ya que mi tablet china erre en algo MAL y ya no tengo acceso por usb ni al recovery android, pero si podria iniciar un pequeño linux desde una sd esta claro que podria reflotar la estructura que corrompi en la flash y asi lograr luego conseguir por fin meterle el firmware correcto y revivirla.
¿es posible hacer bootear en el estado que quedo mi tablet un pequeño sistema linux desde la sd como si fuera un livecd?
estare mas que atento esperando la respuesta
Hola. Perdona el retraso.
Depende de la tablet. La mía lo permite, pero en realidad no parece una opción muy común.