PDA

View Full Version : Domande sul file System.map e i moduli


Tadde
12-02-2003, 23:48
Premetto subito che ho letto il thread in rilievo di ilsensine a proposito della compilazione del kernel. Una cosa pero' non ho mai avuto chiara e cioe' a cosa serva il file System.map. Su alcune guide a proposito della compilazione del kernel e' scritto che viene generato ad ogni compilazione e quindi va sostituito a quello vecchio,mentre in altre non se ne fa menzione. Inoltre quando si fa make modules_install ma la versione del kernel e' la stessa, i moduli con lo stesso nome vengono sovrascritti? E se nel .config nuovo ho meno moduli che in quello precedente i moduli vecchi rimangono o vengono cancellati?
Grazie,
ciao.

ilsensine
13-02-2003, 12:51
Inoltre quando si fa make modules_install ma la versione del kernel e' la stessa, i moduli con lo stesso nome vengono sovrascritti?

E se nel .config nuovo ho meno moduli che in quello precedente i moduli vecchi rimangono o vengono cancellati?
no

Per fare un pò di chiarezza, devi innanzitutto capire come viene stabilito il nome (versione) del kernel. Questo è composto dalle prime righe del Makefile principale; ad es. sul mio computer ho
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 19
EXTRAVERSION = -16mdkcustom
infatti il mio kernel è della versione 2.4.19-16mdkcustom.
Quando fai make modules_install, i moduli vengono copiati nella cartella /lib/modules/<versione>; nel mio caso /lib/modules/2.4.19-16mdkcustom/. Se vuoi quindi far convivere pacificamente due compilazioni distinte dello stesso kernel, basta che gli cambi "nome", variando la riga EXTRAVERSION (liberamente modificabile) nel Makefile.

a cosa serva il file System.map
Poco, quasi a nulla. Contiene i simboli (funzioni) esportati dal kernel e il loro indirizzo virtuale. Viene usato da alcuni programmi (ksymoops, credo anche dosemu, e pochi altri).
Purtroppo non esiste un modo per fare usare al kernel un System.map da te scelto, come avviene per l'initrd, ma anche qui ci viene in aiuto la possibilità di cambiare il "nome" del kernel. Basta infatti copiare in /boot l'immagine bzImage col nome vmlinuz-<versione> e il file System.map-<versione> e il kernel userà il System.map corretto. Ad es. sul mio sistema i nomi sono vmlinuz-2.4.19-16mdkcustom e System.map-2.4.19-16mdkcustom, senza alcun conflitto con gli altri kernel installati.

Ricorda che se cambi "nome" a un kernel che hai già compilato, modificandone il Makefile, devi eseguire make mrproper altrimenti ne vedrai di tutti i colori. Nota che make mrproper cancella una eventuale configurazione personalizzata, che occorre quindi salvarla:

vi Makefile (e cambi la riga EXTRAVERSION)
make xconfig (e salvi in un file la configurazione da te scelta)
make mrproper
make xconfig (ricarichi da file la configurazione)
make dep modules bzImage modules_install ecc.