Recientemente me decanté por la compra de un Raspberry Pi Zero W para iniciar un proyecto que comentaré en parte en este blog.
Para el desarrollo, me surge la necesidad de tener habilitado ciertas funcionalidades en el kernel que por defecto viene deshabilitado. Estos son los pasos que sigo para compilar el kernel en el mismo dispositivo con el sistema por defecto, es decir, Raspbian (Stretch):
En mi caso ejecuto los siguientes comandos como usuario root para evitar problemas de privilegios.
-
-
-
-
- Instalar las dependencias:
apt-get install -y git bc libncurses5-dev
- Descargar el código fuente:
cd ~ git clone --depth=1 https://github.com/raspberrypi/linux
- Configurar el kernel y menuconfig:
cd linux KERNEL=kernel make bcmrpi_defconfig make menuconfig
En este punto tenemos que seleccionar los módulos / funcionalidades que vamos a necesitar para añadir a la compilación.
Una vez realizada la selección, guardar los cambios con el botón < Save > y salir con < Exit >. (En mi caso seleccioné CMAC Support de la Cryptographic API)
- Ahora que tenemos configurado los aspectos de la compilación, podemos ejecutarla:
make -j4 zImage modules dtbs make modules_install
Este es un proceso largo, puede tardar entre cinco o seis horas en total.
¡ojo! Llegados a este punto, es muy recomendable realizar una copia de seguridad de los archivos que se van a reemplazar a continuación o realizar directamente un backup de la tarjeta SD, pues se van a sustituir los archivos pertenecientes al kernel original por el recién compilado.
- Reemplazar los archivos en /boot, y reiniciar:
#Copiar los archivos cp arch/arm/boot/dts/*.dtb /boot/ cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/ cp arch/arm/boot/dts/overlays/README /boot/overlays/ cp arch/arm/boot/zImage /boot/$KERNEL.img #Reiniciar reboot
- Tras el reinicio, comprobamos que está cargando correctamente el nuevo kernel:
uname -a
Nos tiene que aparecer la fecha de nuestra compilación
- Instalar las dependencias:
-
-
-
!Listo! Ya tenemos nuestro nuevo kernel recién compilado funcionando.