Sei sulla pagina 1di 5

Compilare il kernel http://www.mclink.it/personal/MG2508/netbsd/chap-kernel.

html

Il sistema operativo NetBSD: una breve guida all'uso


Indietro Avanti

Capitolo 7. Compilare il kernel


Sommario
7.1. Installare i sorgenti
7.2. Modifiche al layout della tastiera
7.3. Ricompilare il kernel
7.4. Modificare il file di configurazione del kernel
7.5. Configurare il kernel
7.6. Generare le dipendenze e ricompilare
7.7. Se qualcosa è andato male

La maggior parte degli utenti di NetBSD finisce, prima o poi, per compilare un kernel personalizzato. In questo
modo si ottengono vari risultati apprezzabili:

si riducono considerevolmente le dimensioni del kernel (per es. da 2.5 MB a 1 MB) e quindi l'occupazione di
memoria. Sulla versione 1.5 di NetBSD creando un kernel personalizzato si può passare da 4.7 MB a meno di
due MB.

si migliorano le prestazioni.

si ottimizza il sistema.

si risolvono problemi di conflitti/riconoscimenti di periferiche.

si approfondisce la conoscenza del sistema.

si personalizzano alcune opzioni (per esempio il tipo di tastiera, l'offset dell'orologio BIOS, ecc.).

7.1. Installare i sorgenti

Se non avete l'archivio dei sorgenti del sistema operativo, lo potete scaricare dalla stessa fonte da cui avete
ottenuto il sistema installato, per esempio: ftp://ftp.netbsd.org. È importante scaricare i sorgenti corrispondenti
alla versione del sistema installato!

Il programma di installazione (sysinst) non installa i sorgenti del kernel, che devono quindi essere estratti a mano.
L'archivio che li contiene è syssrc.tgz che si trova nella directory source/sets. Il file si scompatta con
# gzip -dc syssrc.tgz | (cd / ; tar xvf -)

Bisogna avere un po' di pazienza perché i file da estrarre sono molti e l'operazione dura parecchi minuti. I sorgenti
vengono estratti nella directory /usr/src/sys; per accedervi si può anche usare il link simbolico /sys. Pertanto i
comandi
# cd /usr/src/sys
# cd /sys

sono equivalenti.

Terminata l'installazione è possibile rimuovere i sorgenti relativi alle architetture che non ci interessano e risparmiare
un po' di spazio su disco (se questo è un problema). Per fare questo bisogna portarsi nella directory /sys/arch ed
eliminare le sottodirectory non necessarie. Per esempio, per il port-i386 è sufficiente conservare la directory i386 Per
altri port può essere necessario conservare più di una directory sorgente in quanto vi possono essere delle

1 di 5 09/02/2007 9.30
Compilare il kernel http://www.mclink.it/personal/MG2508/netbsd/chap-kernel.html

dipendenze.

Tutto è pronto per creare un kernel personalizzato. Compilare un nuovo kernel è tutt'altro che difficile; le operazioni
da eseguire (quattro o cinque in tutto) sono descritte sul sito di NetBSD.

7.2. Modifiche al layout della tastiera


Una volta installati i sorgenti del kernel, prima di ricompilare conviene effettuare una piccola modifica al layout della
tastiera italiana contenuto nel file /sys/dev/pckbc/wskbdmap_mfii.c. Nella disposizione di default mancano
alcuni caratteri utili per i programmatori, in particolare parentesi graffe e tilde. Io utilizzo queste impostazioni
static const keysym_t pckbd_keydesc_it[] = {
...
KC(8), KS_7, KS_slash, KS_braceleft,
KC(9), KS_8, KS_parenleft, KS_bracketleft,
KC(10), KS_9, KS_parenright, KS_bracketright,
KC(11), KS_0, KS_equal, KS_braceright,
KC(12), KS_apostrophe, KS_question, KS_grave,
KC(13), KS_igrave, KS_asciicircum, KS_asciitilde,
KC(26), KS_egrave, KS_eacute, KS_bracketleft, KS_braceleft,
KC(27), KS_plus, KS_asterisk, KS_bracketright,KS_braceright,
...

Con il codice precedente si ottengono queste corrispondenze

Combinazione Carattere
Alt Gr + 7 {
Alt Gr + 8 [
Alt Gr + 9 ]
Alt Gr + 0 }
Alt Gr + ' `
Alt Gr + ì ~
Alt Gr + é [
Alt Gr + + ]
Shift + Alt Gr + è {
Shift + Alt Gr + + }

Driver di console: dalla versione 1.4 NetBSD utilizza il driver multipiattaforma wscons per la gestione
dello schermo e della tastiera. Le versioni precedenti utilizzavano pccons oppure pcvt. Per maggiori
dettagli, vedere il Capitolo 13.

7.3. Ricompilare il kernel


La ricompilazione del kernel è descritta in modo semplice e preciso sul sito di NetBSD e, quindi, consiglio di fare
riferimento a quelle istruzioni. Tuttavia, nel seguito riporto qualche indicazione, giusto per dare un'idea del
procedimento.

Per poter ricompilare il kernel è necessario aver installato il set del compilatore (comp.tgz). La ricompilazione del
kernel consiste dei seguenti passi

Compilazione del kernel

1. Modificare il file di configurazione del kernel

2. Configurare il kernel

2 di 5 09/02/2007 9.30
Compilare il kernel http://www.mclink.it/personal/MG2508/netbsd/chap-kernel.html

3. Generare le dipendenze

4. Ricompilare

5. Installare il nuovo kernel

7.4. Modificare il file di configurazione del kernel


Il file di configurazione del kernel definisce il tipo, il numero e le caratteristiche dei dispositivi che devono essere
supportati dal kernel. Il file si trova nella directory /sys/arch/i386/conf; per creare un file personalizzato
conviene utilizzare come base una delle configurazioni esistenti. Per la maggior parte delle piattaforme la
configurazione GENERIC è un buon punto di partenza; fare riferimento agli esempi presenti nella directory
/sys/arch/<arch>/conf. Molte opzioni sono descritte da commenti nel file di configurazione; molte altre sono
descritte in options(4).
# cd /sys/arch/i386/conf/
# cp GENERIC MYKERNEL
# vi MYKERNEL

Nomi: tradizionalmente i nomi utilizzati per i file di configurazione sono in maiuscolo.

Quando si modifica un file di configurazione del kernel si compiono, in sostanza, due tipi di operazioni:

1. si disabilita il supporto per le periferiche non presenti sul sistema e si abilita il supporto per quelle presenti (per
esempio, chi non ha dispositivi SCSI può disabilitare il supporto per l'interfaccia SCSI nel kernel).

2. si abilita/disabilita il supporto delle caratteristiche supportate dal kernel (per esempio, il supporto per la
compatibilità Linux, ecc.).

3. si ottimizzano i parametri del kernel.

Per disabilitare una linea del file di configurazione bisogna aggingere un carattere "#" all'inizio della linea stessa. Un
buon punto di partenza per determinare cosa si può eliminare è lo studio dell'output del comando dmesg: per ogni
linea del tipo
<XXX> at <YYY>

è necessario che nel file di configurazione siano presenti sia XXX sia YYY. Prima di arrivare a una configurazione
minima è necessaria un po' di sperimentazione; per un sistema desktop, senza periferiche SCSI e schede PCMCIA si
può arrivare a produrre un kernel di dimensioni meno che dimezzate rispetto a quello generico.

Conviene anche dare un'occhiata alle opzioni presenti nel file di configurazione, disabilitando quelle che non
interessano. Ogni opzione è accompagnata da una breve descrizione; molte opzioni sono descritte più
approfonditamente su options(4). Prima di ricompilare conviene sistemare le opzioni per il supporto della tastiera
italiana e per il fuso orario:
options RTC_OFFSET=-60
...
options PCKBD_LAYOUT="KB_IT"

Esiste anche un script Perl che genera automaticamente un file di configurazione ridotto analizzando l'output di
dmesg. Questo script si può installare con la collezione dei package (pkgsrc/sysutils/adjustkernel). Per poterlo
eseguire, naturalmente, è necessario avere installato Perl sul sistema, il che è tutt'altro che difficile: vedere il Capitolo
8. A titolo di anticipazione, un modo semplicissimo di installare Perl consiste nel procurarsi il package precompilato
perl-5.00404.tgz e poi dare il comando:

# pkg_add perl-5.00404.tgz

A questo punto Perl è installato, configurato e pronto per lavorare: più facile di così...

Lo script si esegue con:

3 di 5 09/02/2007 9.30
Compilare il kernel http://www.mclink.it/personal/MG2508/netbsd/chap-kernel.html

# cd /sys/arch/i386/conf
# perl adjustkernel GENERIC > MYKERNEL

Personalmente, ho usato una sola volta questo script e ha dato ottimi risultati. Si faccia attenzione però al fatto che lo
script configura le righe relative ai dispositivi, non quelle delle opzioni.

7.5. Configurare il kernel


Dopo aver modificato a piacere il file di configurazione del kernel (che supporremo si chiami MYKERNEL), dare il
comando
# config MYKERNEL

Se MYKERNEL non contiene errori il programma creerà i file necessari per poter compilare il kernel. In caso contrario
si deve tornare al punto precedente e sistemare gli errori. Il programma config analizza il file di configurazione
indicato come parametro e crea i file necessari per la compilazione, abilitando i dispositivi richiesti.

7.6. Generare le dipendenze e ricompilare


Portarsi nella directory creata da config nel passo precedente, dare il comando make depend e, infine, il comando
make.
# cd ../compile/MYKERNEL
# make depend
# make

In compilazione si possono verificare degli errori, nel qual caso la compilazione stessa si arresta. Se ciò avviene
significa che il file di configurazione non è stato modificato correttamente e bisogna controllarlo e ripetere il
procedimento. Un esempio tipico è il seguente: l'opzione B, che richiede l'opzione A, è attiva; l'opzione A, però, è
commentata.

Una compilazione completa può durare da pochi minuti a molte ore, a seconda dell'hardware utilizzato. La tabella
seguente contiene alcuni esempi:

CPU RAM (MB) Tempo appross.


486 DX2 50 20 1 ora
P166 96 15 minuti
PIII 128 5 minuti
68030/25 8 4 ore

Al termine della compilazione nella directory corrente sarà stato creato il file netbsd. L'ultimo passo da compiere è la
copia del nuovo kernel in / (previo salvataggio del kernel precedente, mi raccomando).
# mv /netbsd /netbsd.old
# mv netbsd /

Come già detto, personalizzando il kernel se ne possono ridurre le dimensioni in modo considerevole. Per esempio, al
termine delle precedenti operazioni si ha:
-rwxr-xr-x 1 root wheel 1342567 Nov 13 16:47 /netbsd
-rwxr-xr-x 1 root wheel 3111739 Sep 27 01:20 /netbsd.old

A questo punto non rimane che riavviare il sistema con un bel reboot.

7.7. Se qualcosa è andato male


4 di 5 09/02/2007 9.30
Compilare il kernel http://www.mclink.it/personal/MG2508/netbsd/chap-kernel.html

È sempre possibile che al riavvio qualcosa non vada come sperato; al limite il nuovo kernel potrebbe non riuscire
nemmeno a avviarsi. In questo caso non bisogna disperare; basta ripristinare il precedente kernel, che avevamo
provvidenzialmente salvato, in modalità mono utente in questo modo:

Riavviare la macchina

Premere la barra spazio quando compare il prompt del boot durante il conto alla rovescia di 5 secondi
boot:

Dare il comando
> boot netbsd.old -s

Dare i seguenti comandi


fsck /
mount /
mv netbsd.old netbsd
exit

Indietro Partenza Avanti


Stampa I package

5 di 5 09/02/2007 9.30