Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

Compilación kernel Raspberrypi diferente arquitectura


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.

 

Bajamos las fuentes del kernel

Nota: Estas fuentes no son las vanilla ya que estas no tienen los drivers para el hw de la rasp y tendríamos que parchearlas

 

mkdir /usr/src/rpi_kernel
cd /usr/src/rpi_kernel
git clone https://github.com/raspberrypi/linux.git


Nos bajamos el cross-toolchain para ARM:

emerge -av sys-devel/crossdev

vi /etc/make.conf
PORTDIR_OVERLAY="/usr/local/portage/overlay/"

mkdir -p PORTDIR_OVERLAY="e --deep --with-bdeps=y @worldusr/local/portage/overlay/
crossdev -S -v -t arm-unknown-linux-gnueabi

 

Nos bajamos el compilador ARM:

git clone git://github.com/raspberrypi/tools.git

 

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     

 

emerge emul-linux-x86-baselibs
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:

zcat /proc/config.gz > /root/punto_config

 

Nos llevamos la config al server donde compilaremos:

scp /root/punto_config [email protected]:/usr/src/rpi_kernel/linux/.config

 

Configuramos el kernel:

make ARCH=arm CROSS_COMPILE=${CCPREFIX} oldconfig --> Si hay opciones que no están en nuestra config nos preguntará ;)
make ARCH=arm CROSS_COMPILE=${CCPREFIX} menuconfig

 

Compilamos:

make -j2 ARCH=arm CROSS_COMPILE=${CCPREFIX}

 

Compilamos módulos:

make -j2 ARCH=arm CROSS_COMPILE=${CCPREFIX} modules

 

Instalamos los módulos:

rm -rf ~/modules 2>/dev/null
mkdir ~/modules
export MODULES_TEMP=~/modules
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 /root/modules.tar.gz IP_RASP:/root/
scp /usr/src/rpi_kernel/linux/arch/arm/boot/Image IP_RASP:/root/

 

Instalamos la imagen y los módulos:

ssh IP_RASP
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:

emerge -av dev-vcs/git
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:

${CCPREFIX}gcc -v 2>&1 | grep har
rm -rf /opt/vc/ 2>/dev/null

 

Para Hard:

cp -r firmware/hardfp/opt/vc/ /opt/

 

Para Soft:

cp -r firmware/opt/vc/ /opt/

 

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 ;)


Autor: Kr0m -- 03/01/2014 00:01:08