Esta página describe el proceso para combinar U-Boot, El kernel Linux y otros componentes para crear una tarjeta SD con Linux desde cero, la base para un nueva piratería.
Esta página solo es adecuada para dispositivos basados en allwinner A10,A13,A10s,A20 y a33.
Construimos una distribución completa, creamos U-Boot, kernel y un puñado de herramientas, y luego creamos un sistema de archivos raíz “rootfs” con para obtener un sistema útil. Dependiendo del tamaño de rootfs, es posible que desee utilizar una tarjeta SD de 2 GB o superior. El formateo y la partición de la tarjeta SD se describe más adelante.
El toolchain es un conjunto de binarios, bibliotecas de sistemas y herramientas que le permiten construir (en nuestro caso, compilación cruzada) u-boot y kernel para una plataforma de destino. Esto, en cierta medida, deberá coincidir con el rootfs objetivo.
Ubuntu/debian
sudo apt-get install -y gcc-arm-linux-gnueabihf build-essential
Necesitará tambien otras herramientas que no forman parte de toolchain:
sudo apt-get install -y build-essential git debootstrap u-boot-tools device-tree-compiler
U-Boot es el gestor de arranque comúnmente utilizado en nuestros SoC allwinner. Entre otros, proporciona la infraestructura básica para abrir una placa hasta un punto donde puede cargar un kernel de Linux y comenzar a arrancar su sistema operativo.
Para clonar el repositorio necesitas la herramienta “git” puedes instalarla usando:..
sudo apt-get install git
La ultima versión del repositorio de u-boot se encuentra en git:git.denx.de/u-boot.git se descargaría con git clone git:git.denx.de/u-boot.git
No obstante por razones de estabilidad recomiendo una versión menos moderna pero mas estable:
U-boot 2017.11 Compatible con ubuntu trusty
U-boot 2018.05 Ultima versión estable, requiere Gcc 6
para descargar y descomprimir la versión mas estable y compatible (u-boot 2017) en terminal sería así:
wget ftp://ftp.denx.de/pub/u-boot/u-boot-2017.11.tar.bz2
tar -xjvf u-boot-2017.11.tar.bz2
Una vez descomprimimos u-boot tendremos el siguiente directorio:
ls u-boot-2017.11/configs
Aquí tendremos disponibles miles de configuraciones para el u-boot, si queremos iniciar una tablet de formato q8 con cpu a13 deberíamos usar la plantilla q8_a13_tablet_defconfig
para cargar la plantilla en la configuración del u-boot sería de la siguiente manera:
sudo make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- q8_a13_tablet_defconfig
con esto hemos cargado una plantilla para este modelo de tablet, ahora estamos listos para compilar.
Una vez que tenemos el código fuente preparado para la compilación podemos compilar simplemente con esta orden:
cd u-boot-2017.11
sudo make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
si queremos entrar al menú gráfico de configuración de compilación del u-boot necesitamos las siguientes dependencias:
sudo apt-get install -y libssl-dev libusb-1.0-0-dev bin86 libqt4-dev libncurses5 libncurses5-dev qt4-dev-tools swig libpython-dev libqt4-dev libusb-dev zlib1g-dev pkg-config libgtk2.0-dev libglib2.0-dev libglade2-dev
Una vez hayamos compilado el u-boot, en el directorio raíz tendremos, entre otros, el siguente archivo:
u-boot-sunxi-with-spl.bin
Para ejecutar u-boot y sobre el Linux tenemos que instalar este u-boot en los primeros sectores de la tarjeta micro SD, para ello, asumiendo que tienes una tarjeta micro SD y que tu sistema la ha montado como /dev/sdb (puede ser /dev/mmcblk):
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8
Ahora ejecuta el comando sync
para que los buses se actualicen,apaga completamente la tablet pulsando poweroff 10 segundos, extrae la micro SD del ordenador, inserta en tu tablet y enciende, los dispositivos allwinner tienen la directiva al arrancar de buscar un sistema coherente el la micro Sd, si no hay un sistema coherente pasa a preguntar a la memoria interna.
Vamos a diferenciar 2 tipos de kernel, legacy y mainline:
Legacy
a10,a13,a13s,a20,a23
Mainline
A33,A83t,A64
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.17.2.tar.xz
tar -Jxf linux-4.17.2.tar.xz
Cuando nos referimos a legacy es un kernel que tiene soporte extendido, ya que la comunidad sunxi a mejorado y a dado compatibilidad a estos dispositivos con este kernel.
Mainline es simplemente el ultimo kernel disponible, con las mejoras de seguridad y dispositivos que eso conlleva.
Para configurar el kernel mainline deberíamos usar un deconfig genérico sunxi, luego nos encargaremos de configurar mas apropiadamente:
make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sunxi_defconfig
Cuidado esta plantilla es muy básica y será necesario que la configures si quieres tener compatibilidad con wifi, táctil y demás, para configurar adecuadamente
Una vez hemos cargamos esta plantilla podemos pasar a configurar el kernel con el menú de selección, éste menú puede usarse de 3 maneras, nos centramos en xconfig que requiere las librerias siguientes:
sudo apt-get install libqt4-dev libncurses5 libncurses5-dev qt4-dev-tools
ahora pasamos a la configuración del kernel:
sudo make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xconfig
Esta parte requiere de ciertos conocimientos o experiencia sobre la configuración necesaria que requiere tu dispositivo, hay literalmente miles de dispositivos y muchas combinaciones posibles
Una vez configurado el kernel nos disponemos a compilarlo:
sudo make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
Que compilamos aquí?
zImage Kernel
modules Módulos
dtbs Arboles de dispositivos
Ahora el siguiente paso es crear los módulos en una carpeta llamada output en la raíz del código fuente del kernel:
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output make modules modules_install
Ahora tenemos el kernel, los módulos y el árbol de dispositivos compilado y listo para ser copiado a sistema de archivos raíz que vamos a usar en el dispositivo destino, estos son la ubicación de los archivos y donde tienen que ir ubicado:
arch/arm/boot/zImage ——> /boot
arch/arm/boot/dts/*.dtb —>/boot
output/lib—————–>/lib