HINT:
INTRODUZIONE
In questo hint sarà spiegato come utilizzare i moduli con LFS. Ciò non è un requisito. Le informazioni qui utilizzate come esempio, come ogni compilazione di LFS, sono specifiche della macchina sulla quale si compila.
Se non si è sicuri di quali moduli caricare, può non essere utile usare le informazioni raccolte in questa appendice. Se si è alla prima compilazione di LFS, è raccomandato utilizzare un kernel monolitico. Leggere per intero questa appendice prima di compilare un kernel modulare.
PREREQUISITI
Questa sezione spiega come impostare correttamente il Kernel 2.6 per il supporto dei moduli.
Requisiti del Kernel per i Moduli
Per utilizzare i moduli con il kernel è raccomandata la compilazione con le opzioni seguenti. I seguenti sono solo i requisiti minimi.
Prima selezionare
Loadable module support ---> [*] Enable loadable module support
Questo permette di compilare i componenti di sistema come moduli.
Avvertimenti
Non tutto nel kernel può essere compilato come modulo, per verificare se una particolare opzione può essere compilata come modulo cercare < > questi caratteri prima del nome del componente del kernel.
Anche se il componente viene compilato come modulo, una particolare impostazione può non funzionare correttamente con i moduli. Un ottimo esempio potrebbe essere l'initrd. Si può compilare <M> RAM disk support come modulo, ma potrebbe essere persa la funzionalità di initrd, poiché initrd dipende da ramfs, e poiché ramfs è un modulo, la funzionalità di initrd non sarebbe disponibile.
Un'altro esempio di ciò è dato dai dispositivi di Frame Buffer Console, se si vogliono disponibili al processo di boot, occorre compilarli nel kernel e non come moduli. La lista proseguirebbe, ma la maggior parte delle volte un tentativo e l'errore mostra come mai un sistema modulare non funziona.
Selezionare [*] Enable loadable module support
Dopo aver selezionato l'opzione sopra, è possibile creare moduli caricabili sul sistema LFS. Questo aggiungerà più passi di compilazione alla compilazione finale del kernel.
Da quando è stato selezionato il supporto per i moduli caricabili, occorrerà rivedere la compilazione del kernel aggiungendo i seguenti due comandi al processo di compilazione dopo make bzImage occorrerà eseguire i seguenti comandi.
make modules make modules_install
Selezionate <userinput>[*] Automatic kernel module loading
Dopo aver selezionato queste opzioni il kernel supporterà i moduli e l'autocaricamento dei moduli attraverso il comando modprobe.
MODPROBE:
In questa sezione sarà spiegato come impostare un propriofile modprobe.conf per l'utilizzo con LFS.
Configurazione di Base
Il file modprobe.conf segue la disposizione della struttura dei dispositivi che è inclusa con il kernel. Controllare il file linux-{linux-version}/Documentation/devices.txt per informazioni. Questo file è la guida su come configurare modprobe.conf.
ATTENZIONE Questo può essere eccessivamente complesso per i novizi e le direttive necessitano di essere seguite esattamente in tutto per far funzionare tutto correttamente.
Sarà dato un esempio utilizzando l'unità floppy. Ogni unità floppy ha un numero major e un numero minor. Ma ogni unità floppy usa lo stesso driver chiamato floppy. Adesso è possibile dare uno sguardo al file devices.txt e si troverà che il numero major per un'unità floppy è 2, e che è un dispositivo a blocchi. Nel file modprobe.conf si dovrà specificare la seguente riga:
alias block-major-2 floppy
Configurazione Avanzata
Se si ha più di una interfaccia SCSI vanno applicate le stesse regole,ma con una leggera modifica. Si supponga di avere un controller mega-raid e un dispositivo aic7xxx, di voler caricare per primo l'adattatore mega-raid, e l'aic7xx come successivo dispositivo. Si cerchi in devices.txt trovando quale sia il numero major e minor della prima unità SCSI. In questo esempio il numero major è 8 e il numero minor è 1. Ricordarsi che prima di utilizzare un disco SCSI,occorre prima caricare il driver sd_mod. Adesso, secondo il numero di unità che si hanno sul controller mega-raid, occorrerà rintracciare quale sia la prima unità per il controller aic7xxx.
Ricordarsi di guardare devices.txt e rintracciare quale sia l'intervallo tra le unità, per unità SCSI è 16.
Occorrerà aggiungere, partendo dal numero di unità disponibili sul controller mega-raid,supponiamo di utilizzare 3 moltiplicato 16, che darà 48.
Così i prossimi controller driver partiranno da 64, il successivo valore logico.
Per realizzare questo, occorrerà specificare le seguenti righe nel file modprobe.conf:
alias block-major-8 sd_mod alias block-major-8-1 megaraid alias block-major-8-48 aic7xxx
MODPROBE.CONF:
In questa sezione verrà fornito un esempio pratico di un appropriato file modprobe.conf per l'utilizzo con LFS.
Esempio di modprobe.conf
Di seguito è riportato un esempio di file modprobe.conf. Occorrerà editarlo
e rimpiazzare i valori tra parentesi con i valori specifici del proprio sistema.
Creare il file /etc/modprobe.conf eseguendo i seguenti comandi:
cat > /etc/modprobe.conf << "EOF" # Binary Format alias binfmt-0000 binfmt_misc # Block Major alias block-major-1 rd alias block-major-2 floppy alias block-major-7 loop alias block-major-8 sd_mod alias block-major-8-1 [scsi module for /dev/sda] alias block-major-8-16 [scsi module for /dev/sdb] alias block-major-8-32 [scsi module for /dev/sdc] alias block-major-11 sr_mod alias block-major-11-0 [scsi module for /dev/sr0] alias block-major-11-1 [scsi module for /dev/sr1] # Character Major alias char-major-3 ide-core alias char-major-4 serial_core alias char-major-5 serial_core alias char-major-4-64 8250 alias char-major-4-65 8250 alias char-major-5-64 8250 alias char-major-5-65 8250 alias char-major-6 lp alias char-major-9 st alias char-major-9-1 [scsi module for /dev/st0] alias char-major-10 misc alias char-major-10-1 psaux alias char-major-10-130 softdog alias char-major-10-135 rtc alias char-major-10-144 nvram alias char-major-10-184 microcode alias char-major-13 input alias char-major-13-32 mousedev alias char-major-21 sg alias char-major-22 ide-core alias char-major-33 ide-core alias char-major-34 ide-core alias char-major-37 ide-tape alias char-major-56 ide-core alias char-major-57 ide-core alias char-major-108 ppp_generic alias char-major-188 usbserial # Net PF alias net-pf-1 unix alias net-pf-2 ipv4 alias net-pf-10 off alias net-pf-17 af_packet # Aliases alias dos msdos alias dummy0 dummy alias dummy1 dummy alias iso9660 isofs alias parport_lowlevel parport_pc # Network Devices alias eth0 [network module for eth0] alias eth1 [network module for eth1] alias ppp0 ppp alias ppp-compress-18 ppp_mppe alias ppp-compress-21 bsd_comp alias ppp-compress-24 ppp_deflate alias ppp-compress-26 ppp_deflate alias tty-ldisc-3 ppp_async alias tty-ldisc-14 ppp_synctty # SCSI Devices alias scsi_hostadapter [first scsi device module] alias scsi_hostadapter1 [second scsi device module] # USB Devices alias usbdevfs usbcore alias usb-controller [module for first usb controller] alias usb-controller1 [module for second usb controller] alias char-major-81 videodev # Video Devices alias fb0 [module for framebuffer] # Character Sets alias charCE nls_iso8859_1 alias codeUS nls_cp437 alias codeUTF nls_utf8 EOF
Come aggiornare modprobe.conf
Se si ha bisogno di aggiungere altre periferiche al modprobe.conf occorrerà utilizzare le informazioni dall'help del modulo e dal file devices.txt che si trova nella Documentazione dei sorgenti del kernel.
Di seguito alcuni dati di esempio dal devices.txt e come utilizzarli nel modprobe.conf
Da devices.txt
8 block SCSI disk devices (0-15) 0 = /dev/sda Primo disco SCSI, disco intero 16 = /dev/sdb Secondo disco SCSI disco intero 32 = /dev/sdc Terzo disco SCSI disco intero ... 240 = /dev/sdp Sedicesimo dico SCSI disco intero
Le partizioni sono gestite nello stesso modo per i dischi IDE (vedere il numero major 3) ad eccezione del limite sulle partizioni che è 15.
Occorrerà estrarre le necessarie informazioni da sopra. Ipotizzando di avere un /dev/sdp il quale è connesso al controller aic7xxx, per aggiungerlo all'esistente modprobe.conf, occorrerà sapere il numero major, in questo caso è block 8 e il numero minor, in questo caso è 240. Adesso aggiungiamolo al file modprobe.conf,si aggiungerebbe la riga seguente:
alias block-major-8-240 [scsi module for /dev/sdp]
INITRD:
Questo non è consigliato se non si è mai compilato un sistema LFS prima. Se si prova, è a proprio rischio. Cambiamenti dal libro possono concludersi in un costruzione di LFS non funzionante.
Se si ha intenzione di compilare un kernel interamente modulare, occorrerà creare un initrd per avviare il sistema. Si possono avere istruzioni complete seguendo le istruzioni dettagliate riportate in linux-{linux-version}/Documentation/initrd.txt.
E' possibile vedere anche le informazioni contenute nell'hint initrd che si trova a
http://www.linuxfromscratch.org/hints/downloads/files/initrd.txt
Le nuove versioni di questo documento possono essere prelevate da http://cvs.jg555.com/viewcvs.cgi/lfs-hint