8.3.1. Installazione del kernel
La compilazione del kernel comprende alcuni passi: configurazione,
compilazione e installazione. Consultare il file README nella directory sorgente del kernel per un
metodo alternativo al modo in cui il libro configura il kernel.
Prepararsi per la compilazione lanciando il seguente comando:
make mrproper
Questo comando assicura che l'albero di compilazione del kernel sia
pulito. Il team del kernel raccomanda che questo comando venga
eseguito prima di qualunque compilazione del kernel. Non si
dovrebbe contare sul fatto che l'albero di compilazione sia pulito
dopo la scompattazione.
Ci si deve inoltre assicurare che il kernel non tenti di passare
eventi hotplug allo userspace finché questo non specifichi che è
pronto:
sed -i 's@/sbin/hotplug@/bin/true@' kernel/kmod.c
Se, nel Sezione 7.6,
“Configurazione della console Linux”, si è deciso
di voler compilare la keymap nel kernel, dare il seguente comando:
loadkeys -m /usr/share/kbd/keymaps/[percorso della keymap] > \
drivers/char/defkeymap.c
Per esempio, se si ha una tastiera olandese si dovrebbe usare
/usr/share/kbd/keymaps/i386/qwerty/nl.map.gz.
Configurare il kernel attraverso un'interfaccia a menu:
make menuconfig
make oldconfig potrebbe essere
più appropriato in alcune situazioni. Vedere il file README per maggiori informazioni.
Nota
Durante la configurazione del kernel, ci si assicuri di
abilitare l'opzione “Support for
hot-pluggable devices” dal menu
“General Setup”. Questo
permette agli eventi hotplug usati da udev di popolare la directory /dev con i nodi di dispositivo.
Se si desidera è possibile saltare la configurazione del kernel
semplicemente copiando il file di configurazione, .config, dal sistema host (se disponibile) nella
cartella scompattata linux-2.6.8.1. In
ogni caso non si raccomanda questa soluzione. E' molto meglio
esplorare tutti i menu di configurazione e creare la propria
configurazione da zero.
Per il supporto alla memoria condivisa POSIX, assicurarsi che
l'opzione “Virtual memory file system
support” sia attiva. Tale opzione è presente nel menu
“File systems” ed è
solitamente attiva per default.
Gli script di avvio di LFS partono dal presupposto che
“Support for Host-side USB”
e “USB device filesystem”
siano entrambi compilati direttamente nel kernel o che nessuno dei
due lo sia. Gli script di avvio non funzioneranno correttamente se
c'è un modulo (usbcore.ko).
Nota
NPTL richiede che il kernel sia compilato con GCC 3.x, in
questo caso 3.4.1. La compilazione con 2.95.x può causare
fallimenti nella suite di test delle glibc, perciò non si
raccomanda di compilare il kernel con gcc 2.95.x.
Compilare il kernel e i moduli:
make
Se si intende utilizzare i moduli del kernel, è necessario un file
/etc/modules.conf. Le informazione
riguardanti i moduli e la configurazione del kernel in generale
possono essere trovati nella documentazione del kernel, che si
trova nella directory linux-2.6.8.1/Documentation. La pagina man di
modules.conf può essere di
ulteriore interesse.
Fare molta attenzione quando si legge altra documentazione perché
di solito si applica solo a kernel della serie 2.4.x. A quanto ne
sappiamo, la configurazione specifica per Hotplug e Udev non è
documentata da nessuna parte. Il problema è che Udev crea un nodo
di dispositivo solo se Hotplug o uno script utente inserisce il
modulo corrispondente nel kernel e non tutti i moduli sono
rilevabili da Hotplug. Si noti che dichiarazioni come la seguente
nel file /etc/modprobe.conf non
funzionano con Udev:
alias char-major-XXX un-modulo
Tenuto conto di tutte queste complicazioni con Hotplug, Udev e i
moduli, raccomandiamo caldamente di partire con un kernel
completamente non modulare, specialmente se questa è la prima volta
che si usa Udev.
Installare i moduli, se il kernel ne fa uso:
make modules_install
Se ci sono molti moduli e poco spazio disco è possibile eseguire lo
stripping e la compressione di tali moduli. Per la maggior parte
degli utenti non ne vale la pena, ma se il sistema ha veramente
poco spazio vedere
http://www.linux-mips.org/archives/linux-mips/2002-04/msg00031.html.
Terminata la compilazione del kernel è finita sono richiesti altri
passi per completare l'installazione. Alcuni file devono essere
copiati nella directory /boot.
La path dell'immagine del kernel può variare in funzione della
piattaforma che si sta utilizzando. Lanciare il seguente comando
per installare il kernel:
cp arch/i386/boot/bzImage /boot/lfskernel-2.6.8.1
System.map è un file dei simboli per il
kernel. Esso mappa i punti di ingresso di ogni funzione dell'API
(Application Programming Interface) del kernel, oltre agli
indirizzi delle strutture dati del kernel. Lanciare il seguente
comando per installare questo file:
cp System.map /boot/System.map-2.6.8.1
Il file di configurazione del kernel .config prodotto con il precedente passo
make menuconfig contiene tutte
le selezioni di configurazione per il kernel che è appena stato
compilato. Sarebbe una buona idea mantenere questo file per usi
futuri:
cp .config /boot/config-2.6.8.1
E' importante notare che i file presenti nella directory sorgente
del kernel non sono di proprietà di root. Ogni qualvolta si scompatta un
pacchetto come utente root
(come abbiamo fatto in chroot), i file finiscono per avere gli ID
di utente e gruppo del computer in cui sono stati compressi. Questo
non è solitamente un problema per gli altri pacchetti poiché i
sorgenti vengono eliminati dopo l'installazione. Ma i file sorgenti
di Linux vengono spesso mantenuti per lungo tempo, perciò esiste
che la possibilità che l'utente che ha lo stesso ID dell'utente
"compressore" possa avere i diritti di accesso in scrittura ai
sorgenti del kernel.
Se è necessario mantenere i sorgenti del kernel, è consigliabile
eseguire chown -R 0:0 nella
directory linux-2.6.8.1 per assicurarsi
che tutti i file siano posseduti da root.
8.3.2. Contenuti di Linux
File Installati: il kernel, gli header del kernel, ed il
file System.map
Brevi descrizioni
-
Il
kernel
-
Il motore del sistema Linux. All'avvio del sistema, il kernel
è la prima parte del sistema operativo che viene caricata.
Esso rileva e inizializza tutti i componenti hardware del
computer, successivamnete rende tali periferiche disponibili
al software mediante sotto forma di albero di file, trasforma
un singola CPU in una macchina multi-tasking capace di far
girare molti programmi allo stesso tempo.
-
The kernel
headers
-
Definiscono l'interfaccia ai servizi che il kernel fornisce.
Gli header presenti nella directory di sistema include dovrebbero sempre essere quelli con cui è
stato compilato Glibc e perciò non dovrebbero essere sostituiti
con l'upgrade del kernel.
-
System.map
-
Una lista di indirizzi e simboli. Esso mappa i punti di
ingresso e gli indirizzi di tutte le funzioni e le strutture
dati nel kernel.