¡Esta es una revisión vieja del documento!
El kernel de linux, se han escrito cientos de libros sobre el tema, kernel significa núcleo, en este caso es el controlador de procesos, accesos a memoria, usuarios, permisos, seguridad y de todas las capacidades del sistema operativo.
El kernel se ubica normalmente en la carpeta /boot del sistema, puede aparecer con distintos formatos de archivo por cuestiones de memoria y eficiencia el kernel se puede comprimir en diferentes formatos que pasan a descomprimirse en memoria RAM una vez se inicia el sistema, estos son algunos ejemplos:
vmlinuz
uImage
zImage
Dependiendo de la configuración este archivo de núcleo varia entre 3 a 15 mb
Todo empieza por descargarse un kernel, ciertamente existen cientos de repositorios y comunidades que modifican o , simplemente compilan de una determinada manera el kernel, vamos a elegir el oficial la rama oficial del kernel, estas fuentes se ubican en kernel.org. en el terminal podermos descargar la ultima versión oficial (4.19) con este comando:
sudo wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.tar.xz
Esto nos descarga el código fuente de linux comprimido en un archivo llamado linux-4.19.tar.xz
Descomprimimos con:
sudo tar -Jxf linux-4.19.tar.xz
Entramos a la carpeta:
cd linux-4.19
y ya estamos en la carpeta del código fuente del núcleo de linux, ahora empezamos la configuración.
los siguientes comandos determinan absolutamente todo en referente al kernel, normalmente no sale a la primera y tienes que recompilar cambios a posteriori, ten paciencia, es la mejor habilidad para conseguir realizar estos procesos.
Las configuraciones del kernel se quedan en ficheros .config donde están todas las opciones del kernel pre configurado para algunas arquitecturas y modelos, en caso de sunxi (allwinner) tenemos una plantilla que se denomina sunxi_defconfig
y que la invocaríamos de esta manera:
make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sunxi_defconfig
Si todo va bien tiene que paraecer un mensaje como este:
#
#configuration written to .config
#
Ya hemos preparado las fuentes kernel para compilar con las opciones de sunxi preconfiguradas en la plantilla, pero, estas opciones nunca están configuradas para hacer funcionar el hardware de una tablet concreta.
Ahora vamos a configurar correctamente el kernel para una tablet tipo allwinner a33:
Hardware objetivo
Allwinner a33
1Gb DDR3
Pantalla 7 pulgadas 1024×600
Táctil silead gsl1680
Wi-Fi Realtek 8723au
Sonido
Acelerometro mi3rda (se que suena a broma)
Cámaras
una vez que estamos dentro de la carpeta de linux-4.19 y hemos cargado la plantilla base de sunxi vamos a iniciar el menú gráfico para poder configurar partes esenciales del kernel
Con el comando:
sudo make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xconfig
Se nos abre menú de configuración de kernel:
Ahora en este menú os voy a dar unas indicaciones para compilar un kernel para un dispositivo allwinner a33, hay cosas que se comparten con otros SoC, pero otras no, cuando seleccionas una opción del kernel si este es un modulo al darle un click se pasa a estado modulo ·
y cuando le das otro click pasa a estado modulo instalado dentro del kernel con un check v
para buscar en el menú solo pulsar Ctrl+f
y buscar lo que os indico:
Ctrl+f y teclear neon y marcar Support for NEON in kernel mode
Ctrl+f y teclear Ctrl+f sun8 y marcar como modulo Allwinner SUN8I audio codec