En este artículo vamos a explicar los pasos necesarios para compilar un kernel para ARM desde Amd64, el objetivo final es compilar el kernel de nuestra Raspberrypi sin tener que esperar una eternidad. Para llevar a cabo nuestra empresa necesitaremos el siguiente software
- Fuentes del kernel
- Cross-toolchain para ARM
- Compilador ARM
Bajamos las fuentes del kernel
Nota: Estas fuentes NO son las vanilla ya que estas no tienen los drivers para el hw de la Raspberrypi y tendríamos que parchearlas
Nos bajamos el cross-toolchain para ARM:
vi /etc/make.conf
PORTDIR_OVERLAY="/usr/local/portage/overlay/"
crossdev -S -v -t arm-unknown-linux-gnueabi
Nos bajamos el compilador ARM:
NOTA: Está compilado para 32bits, así que debemos tener habilitado el soporte de emulación en el kernel:
Executable file formats / Emulations --->
[*] IA32 Emulation
<*> IA32 a.out support
[*] x32 ABI for 64-bit mode
revdep-rebuild
export CCPREFIX=/usr/src/rpi_kernel/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-
cd linux
make mrproper
Sacamos la config base de la Rasp:
Nos llevamos la config al server donde compilaremos:
Configuramos el kernel:
make ARCH=arm CROSS_COMPILE=${CCPREFIX} menuconfig
Compilamos:
Compilamos módulos:
Instalamos los módulos:
mkdir
export MODULES_TEMP=
make ARCH=arm CROSS_COMPILE=${CCPREFIX} INSTALL_MOD_PATH=${MODULES_TEMP} modules_install
cd ~
tar czvf modules.tar.gz modules
Copiamos la imagen y los módulos a la Rasp:
scp /usr/src/rpi_kernel/linux/arch/arm/boot/Image IP_RASP:/root/
Instalamos la imagen y los módulos:
rm -rf modules 2>/dev/null
tar xvzf modules.tar.gz
cp -r /root/modules/lib/modules/* /lib/modules/
cp /boot/kernel.img /boot/kernel.img.ori
cp /root/Image /boot/kernel.img
Hay ocasiones en que el cambio de kernel requiere el cambio del firmware ya que hay cambios considerables:
git clone git://github.com/raspberrypi/firmware.git
cp firmware/boot/bootcode.bin firmware/boot/fixup.dat firmware/boot/start.elf /boot/
También copiaremos las librerias VC, pero debemos saber si copiar las hard o las soft:
rm -rf /opt/vc/ 2>/dev/null
Para Hard:
Para Soft:
Para los mas perecesos dejo aquí mi config y una imagen ya compilada.
NOTA: Esta imagen no tiene soporte para módulos por lo tanto la parte de instalación de módulos nos la podemos saltar, además está pensada para actuar como server o FW, se han eliminado los drivers de audio, tarjetas inalámbricas y demás pijerias, en cambio se ha metido todo lo relacionado con cifrado, iptables y protocolos de red ;)