Pagine

Translate

venerdì 12 agosto 2011

HowTo - Compilazione Kernel Real Time - Parte 3

Compilazione del Kernel:
Per prima cosa effettuaiamo una pulizia del pacchetto rimuovendo residui di precedenti compilazioni.

sudo make-kpkg clean

ora incrociamo le dita, accendiamo un cero alla madonna e lanciamo la compilazione con il comando:

CONCURRENCY_LEVEL=1 fakeroot make-kpkg --append-to-version -CustomRT --initrd kernel_image kernel_headers modules_image

Il parametro 1 nel comando CONCURRENCY_LEVEL indica che abbiamo 1 processore, se ne avessimo 2 o 4 possiamo impostare questo valore a 2 o 4 e dare più potenza di calcolo alla compilazione.
Se ci fossero problemi con il comando fakeroot è possibile sostituirlo con sudo, o in alternativa installare Fakeroot con il comando sudo apt-get install fakeroot*.

La compilazione dura circa un ora, se durante la compilazione doveste ricevere un messaggio di errore del tipo:

echo “The UTS Release version in include/linux/version.h”; echo ” \”\” “; echo “does not match current version:”; echo ” \”2.6.33-CustomRT\” “; echo “Please correct this.”; exit 2 The UTS Release version in include/linux/version.h does not match current version: “2.6.33-CustomRt” Please correct this. make[1]: *** [debian/stamp/install/linux-image-2.6.33-rc1-amd64] Error 2

allora vi trovate di fronte al bug 498747, che impedisce la compilazione del kernel a causa di alcuni errori nel path degli script. Ci sono due modi per risolvere, il primo è scaricare la patch kpkg-2.6.33.patch, oppure utilizzare il medoto più vecchio del mondo, fare le modifiche manualmente.
Visto che amo tanto fare le cose da me, vi illustro il procedimento per fare le modifiche manualmente:

Andare nella directory ~/linux-2.6.33.2/debian/ruleset/misc aprire il file version_vars.mk con sudo gedit version_vars.mk, e rimuovere la riga:

UTS_RELEASE_HEADER=$(call doit,if [ -f include/linux/utsrelease.h ]; then \

e sostituirla con:

UTS_RELEASE_HEADER=$(call doit,if [ -f include/generated/utsrelease.h ]; then \

echo include/generated/utsrelease.h; \

elif [ -f include/linux/utsrelease.h ]; then \

echo include/linux/utsrelease.h; \

else \

echo include/linux/version.h ; \

quindi andare nella directory ~/linux-2.6.33.2/debian/ruleset/targets aprire il file common.mk con sudo gedit common.mk, e rimuovere la riga:

grep LINUX_COMPILER include/linux/compile.h | \

Sostituendola con:

grep LINUX_COMPILER include/generated/compile.h | \

sed -e 's/.*LINUX_COMPILER "//' -e 's/"$$//' >> debian/buildinfo

ifneq ($(strip $(shell test -f version.Debian && cat version.Debian)),)

echo kernel source package used: >> debian/buildinfo


Salvare entrambi i files e rilanciare la procedura di compilazione:

CONCURRENCY_LEVEL=1 fakeroot make-kpkg --append-to-version -CustomRT --initrd kernel_image kernel_headers modules_image

oppure

sudo make-kpkg --append-to-version -CustomRT --initrd kernel_image kernel_headers modules_image

Abbiamo finito, nel prossimo tutorial (parte 4) parleremo di come installarlo.

Enjoy
Antonio