View this PageEdit this PageUploads to this PageVersions of this PageHomeRecent ChangesSearchHelp Guide

Compilar un un paquete de núcleo (linux-image) para debian: ejemplo de núcleo con soporte para watchdog en placas Geode

Las placas geode las ponemos con una Debian 5.0 "Lenny" i386 (es decir, 32 bits).

Informaciçon necesaria: CONFIG_GEODE_WDT, make-kpkg, Debian kernel handbook: building a custom kernel from debian source

Para compilar para dicho sistema, hay un chroot en uiharu; para entrar en dicho chroot:

En uiharu, como root
cd /src/debian5_i386/
./go.sh.root


Una vez dentro del chroot, necesitamos la configuración de debian para dicho núcleo. Quizás la manera más sencilla es simplemente compilar dicho núcleo en todas sus modalidades y luego coger el .config que nos interesa:
NOTA: si no quieres perder tanto tiempo, seguramente baste con concatenar los ficheros config y config.686 que están en /usr/src/linux-kernel-package/linux-2.6-2.6.26/debian/config/i386/ y así te evitas compilar todo
En el chroot de debian5
cd /usr/src
mkdir linux-kernel-package
cd linux-kernel-package
apt-get source linux-2.6
cd linux-2.6-2.6.26/
dpkg-checkbuilddeps 
apt-get install build-essential debhelper kernel-package python gcc-4.1 python-central xmlto fakeroot
fakeroot debian/rules binary


Una vez que ha terminado de compilar, preparamos y compilamos el núcleo con las modifiacioens que queremos:
En el chroot de debian5
cd /usr/src
apt-get install linux-source-2.6
tar -xvjf linux-source-2.6.26.tar.bz2
cp linux-kernel-package/linux-2.6-2.6.26/debian/build/build_i386_none_686/.config linux-source-2.6.26/
cd linux-source-2.6.26/
make oldconfig
make menuconfig
# Aquí activamos en CPU Subarchitecture lo de Geode LX
# Aquí activamos en Watchdog lo de (M) AMD Geode
# Salvamos y salimos del menuconfig
# QUITAMOS EL 3DNOW (para que la imagen funcione en el qemu de uiharu)
sed -i "s:\(MCYRIXIII .. MK7\) .. MGEODE_LX:\1:g" arch/x86/Kconfig.cpu
# Forzamos que re-use el último timer del CS5536 si no hay ninguno libre
# Ver https://groups.google.com/g/linux.kernel/c/ciEnfbgCric
sed -i "s:\(if )\(.\)\(mfgpt_timers.i..avail\)\(.\):\1\2\3 || i==\2MFGPT_MAX_TIMERS-1\4\4:g" arch/x86/kernel/mfgpt_32.c
# Compilamos
CONCURRENCY_LEVEL=32 make deb-pkg


Y esperamos a que termine de compilar el núcleo

Habrá generado un paquete debian, en nuestro caso está en:

 /usr/src/linux-2.6.26_2.6.26-1_i386.deb

Habrá que instalar dicho paquete en el equipo de destino.


Nota sobre las versiones de los núcleos:
  • En este thread dicen que han conseguido que un geode arranque con debian 8 (núcleo 3.16.0), pero ya no arranca con debian 9 (núcleo 4.9.0).
  • Cogimos la debian 5 porque es la última que tenía soporte i386
  • Resulta que el núcleo 3.16.0 de la debian 8 funciona porque el Geode LX tiene soporte a casi todo lo de i686 (ne me acuerdo de qué le faltaba)
  • El núcleo 4.9.0 de debian 9 debe estar fallando por usar alguna característica opcional del i686 que no tiene el Geode LX.
  • El núcleo que estamos usando en estos momentos es el 2.6.26-2-686 (el de por defecto de Debian 5 i386)