Gabriele97's Blog

creare un kernel per linux

la Sezione 10.4 per scoprire come ottenere i file appropriati.

Dopo di che, usate l’utilità “rpm” (oppure “tar“) per installare i file “kernel source” e “headers”. Per esempio, per installare i file RPM del kernel 2.0.36-3:

rpm -Uvh kernel-source-2.0.36-3.i386.rpm kernel-headers-2.0.36-3.i386.rpm
rpm -Uvh kernel-ibcs-2.0.36-3.i386.rpm

se Linux è su un notebook, probabilmente installerete anche il file “kernel-pcmcia-cs-2.0.36-3.i386.rpm” che contiene caratteristiche per la gestione dell’alimentazione.

Dopo aver installato i file del kernel, dovreste trovare l’albero del sorgente del kernel nella directory “/usr/src/linux/“.

Il passo seguente è quello di scaricare ogni driver addizionale (se applicabile) e installarli nel nuovo albero del sorgente del kernel. Per esempio, per avere il supporto del controller Mylex DAC960 per hardware RAID, dovrò scaricare il driver dal sito http://www.dandelion.com/. Sfortunatamente, tale driver viene spesso fornito come tarball e quindi dovrete usare l’utilità “tar“. Per esempio.

cd /usr/src/
tar zxvpf DAC960-2.0.0-Beta4.tar.gz

Dovete leggere la documentazioni fornita con il driver. Per esempio, il driver DAC960 comprende un file “README” che fornisce istruzioni su dove mettere i nuovi file scaricati e come applicare la patch al kernel:

mv README.DAC960 DAC960.[ch] /usr/src/linux/drivers/block
patch -p0 < DAC960.patch

Poi, assicuratevi che i link simbolici del vostro sistema siano coerenti con il nuovo albero del kernel. In realtà, ciò deve essere fatto una sola volta, quindi quanto segue deve essere fatto solo se non avete mai compilato prima un kernel personalizzato.

mail:/usr/src# cd /usr/include
mail:/usr/include# rm -rf asm linux scsi
mail:/usr/include# ln -s /usr/src/linux/include/asm-i386 asm
mail:/usr/include# ln -s /usr/src/linux/include/linux linux
mail:/usr/include# ln -s /usr/src/linux/include/scsi scsi

Nota Quanto visto sopra non è più necessario per le versioni di kernel 2.2.x o superiori.

Il passo successivo è configurare le impostazioni del kernel. Questa è la parte più importante. Se disabilitate le impostazioni sbagliate, potreste non avere più il supporto per alcune caratteristiche o per l’hardware di cui avete bisogno. Comunque, se attivate le impostazioni sbagliati, aumenterete le dimensioni del kernel e sprecherete la preziosa memoria del vostro sistema (probabilmente è meglio sbagliare su quest’ultimo punto che non sul primo).

Il miglior modo per compilare correttamente il kernel è sapere di quali caratteristiche avrete bisogno, e quale hardware avete nel vostro sistema. Dopo che avrete sperimentato un po’ di volte la personalizzazione del kernel, questo processo diventerà “banale” e non vi intimorirà più!

Digitate quanto segue per iniziare il processo di configurazione:

mail:/usr/include# cd /usr/src/linux
mail:/usr/src/linux# make mrproper
mail:/usr/src/linux# make menuconfig

Potete digitare “make xconfig” invece di “make menuconfig” se avete in esecuzione il sistema X Window; si veda il Capitolo 5 per informazioni su come far funzionare X.

Per configurare il vostro kernel, passate attraverso le varie configurazioni e selezionate (attivate) quelli di cui avete bisogno, e deselezionate (disattivate) quelli inutili. Potete scegliere tra l’avere un determinato supporto integrato nel kernel, o averlo come modulo che viene caricato e scaricato dal Kernel a seconda dei bisogni. (Se compilate qualche caratteristica di cui avete bisogno al momento del boot del sistema (come un driver SCSI), come modulo, avrete bisogno di creare una immagine ram disk o il vostro sistema non si avvierà. Questo viene fatto con il comando “mkinitrd“; questa procedura viene descritta più avanti nel documento.

Quando passate tra le varie configurazioni, potete selezionare <Help> per sapere a cosa serve una determinata opzione.

Dopo aver configurato il vostro kernel, digitate quanto segue per compilarlo:

mail:/usr/src/linux# make dep ; make clean
mail:/usr/src/linux# make bzImage
mail:/usr/src/linux# make modules

Se state ricompilando lo stesso kernel che avevate prima (2.0.36-3 nell’esempio), probabilmente vorrete spostare i moduli esistenti in una directory di backup; ecco il comando:

mail:/usr/src/linux# mv /lib/modules/2.0.36-3 /lib/modules/2.0.36-3-backup

Adesso, digitate questo comando per installare i nuovi moduli:

mail:/usr/src/linux# make modules_install

Adesso bisogna copiare il kernel nella directory “/boot/” e usare LILO per aggiornare il boot record in modo che il nuovo kernel venga riconosciuto. I comandi che seguono effettueranno una copia di backup del kernel esistente, copieranno il kernel nuovo e poi aggiorneranno il boot record di LILO:

mail:/usr/src/linux# cd /boot
mail:/boot# cp vmlinuz vmlinuz.OLD
mail:/boot# cp /usr/src/linux/arch/i386/boot/bzImage vmlinuz-2.0.36
mail:/boot# /sbin/lilo

Infine, dovrete editare il file “/etc/lilo.conf” e assicurarvi che “image” punti al nuovo kernel. Dovrete aggiungere anche una sezioni che punti al backup del kernel, chiamato, ad esempio, “OldLinux”. Ecco un esempio:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz
	label=Linux
	root=/dev/hdb1
	read-only
image=/boot/vmlinuz.OLD
	label=OldLinux
        read-only

Aggiungendo le informazioni sul kernel di backup, in caso il nuovo kernel non dovesse avviarsi regolarmente (può darsi che un dispositivo non sia stato riconosciuto, oppure un demone non si avvia come dovrebbe), potete semplicemente digitare “OldLinux” per avviare il vecchio kernel e scoprire il problema.

Nota Come detto prima se avete compilato una caratteristica in modo che venga avviata come modulo, dovrete creare una immagine ram disk iniziale per fare il boot del vostro sistema. Non dimenticate di compilare il kernel con il supporto per questa immagine iniziale.

La procedura per creare e usare un immagine ram disk iniziale è la seguente:

  • Aggiungete al file “/etc/lilo.conf” una riga per fare il boot dell’imagine RAMdisk inizale:

    image=/boot/vmlinuz
            label=Linux
            root=/dev/hdb1
            initrd=/boot/initrd-2.2.4-4.img
            read-only

  • Il dispositivo loopback deve essere caricato prima che voi possiate usare il comando mkinitrd. Assicuratevi che il modulo del dispositivo loopback sia caricato:

    /sbin/insmod loop

    Se ottenete un messaggio di errore circa l’impossibilità di caricare il modulo loopback, potreste aver bisogno di specificare il percorso completo del modulo per il kernel corrente che il vostro sistema sta ancora facendo girare, per esempio “/lib/modules/2.0.35/loop“.)

  • Usate il comando “mkinitrd” per creare l’immagine:

    /sbin/mkinitrd /boot/initrd-2.0.36-3.img 2.0.36-3

  • Eseguite “/sbin/lilo” per aggiornare il vostro boot loader.

A questo punto, spegnete il sistema e fate il boot del nuovo kernel!

mail:/boot# /sbin/shutdown -r now

Se il kernel si rifiuta di partire completamente, non fatevi prendere dal panico! Utilizzate il boot disk che avete creato durante il processo di installazione di Linux. Se non avete copie di questo disco, dovreste riuscire a crearne uno dal CD di Red Hat. Inserite il dischetto nel drive e fate un reboot. Quando si veda il prompt, digitate:

mount root=/dev/hda1

Il comando sopra presuppone che la vostra partizione “/” (root) si trovi su /dev/hda1.

Linux dovrebbe avviarsi normalmente (sebbene finche usate il kernel del boot disk, non tutti i servizi o i dispositivi possono funzionare correttamente), e potrete recuperare il vostro vecchio kernel e reinstallare le informazioni del boot loader LILO (cioè “mv /vmlinuz.old /vmlinuz ; /sbin/lilo“), quindi spegnere e riavviare. Potete in un secondo tempo provare a ricompilare il kernel con differenti opzioni e riprovare a farlo funzionare.

Lascia un commento »

Al momento, non c'è nessun commento.

RSS feed for comments on this post. TrackBack URI

Lascia un commento

Blog su WordPress.com.