PDA

View Full Version : Percorso di tutti i kernel di Linux presenti


!zingaro
31-03-2008, 12:04
Vorrei sapere come posso conoscere il percorso per tutti i kernel presenti: per il kernel che ho installato io é ovvio che lo sappia, peró non lo so per un kernel "precompilato" che ho installato, come anche per quello originario.
Una volta che conosco la directory di partenza (quella da cui si é fatto il make, make install nel caso manuale) se si vogliono fare delle modifiche (ad esempio una ricompilazione e cambiamenti nella configurazione con make menuconfig) si deve partire da qui??
Oppure una volta installati vengono anche salvati in automatico da qualche altra parte (/boot, /usr/src o non so dove) e le modifiche devono essere fatte lí?

Gimli[2BV!2B]
01-04-2008, 00:32
Proverò a fare una panoramica di file e cartelle coinvolti (potrei scordare qualcosa...).

Posizione dei file binari (kernel compilato ed installato):

/boot/ -> config (cosa c'è dentro il kernel relativo: tutte le opzioni attivate), initrd (http://it.wikipedia.org/wiki/Initrd), System.map (http://it.wikipedia.org/wiki/System.map), vmlinuz (http://www.linuxformat.co.uk/wiki/index.php/Vmlinux) (il kernel vero e proprio)
/lib/modules/ -> contiene una cartella per ogni kernel installato in cui sono posti tutti i moduli che non sono stati integrati nel kernel. Capita che restino residui dopo la disinstallazione con gestori dei pacchetti.
/ -> nella radice puoi trovare i collegamenti al kernel in uso ed a quello utilizzato il precedente boot (initrd.img, initrd.img.old, vmlinuz, vmlinuz.old).

Posizione standard per i sorgenti:

/usr/src -> qui si scompattano i sorgenti o vanno a finire i sorgenti installati con i gestori dei pacchetti, in directory del tipo linux-X.Y.ZZ.R (linux-2.6.24.4 per es.); l'accesso in scrittura è consentito ai membri del gruppo src, usualmente se si procede con la compilazione lo si fa da utente previa aggiunta al gruppo.
/usr/src/linux/ -> link simbolico ai sorgenti del kernel.



Dei kernel binari installati in una comune distribuzione hai solo, appunto, i binari, se li affianchi con i relativi sorgenti potrai compilare.
La prima compilazione sarà da zero, la configurazione è usualmente disponibile o direttamente nei sorgenti forniti o basta copiare/prendere ispirazione (make oldconfig) da quella in /boot/.

Un comune mortale che vuole mettersi lì a compilarsi il suo kernelino andrà a toccare:

probabilmente il config-X.Y.ZZ.R-nome da /boot/ (esempio: cp /boot/config-2.6.24.4-gimli /usr/src/linux-2.6.24.4/.config)
i sorgenti in /usr/src/linux-X.Y.ZZ.R
il link alla cartella dei sorgenti (ex: ln -s /usr/src/linux-2.6.24.4 /usr/src/linux)


Una volta fatto il make install i file si distribuiranno nelle posizioni illustrate inizialmente per i file binari.
Se si vorranno fare cambiamenti al kernel si dovrà ripartire dalla cartella /usr/src/linux-X.Y.ZZ.R in cui resteranno in tranquilla attesa tutti i file parzialmente compilati, che permetteranno di ricompilare in tempi brevi sfruttando le parti che non sono state soggette a cambiamenti.

!zingaro
01-04-2008, 09:18
Grazie, sei stato molto chiaro, ma ho ancora dei dubbi...
probabilmente il config-X.Y.ZZ.R-nome da /boot/ (esempio: cp /boot/config-2.6.24.4-gimli /usr/src/linux-2.6.24.4/.config)
questo nel caso in cui era un kernel giá installato? Intendo: se lo avevo compilato io in partenza dovrei avere giá il .config in /usr/src e posso direttamente modificare quello e poi fare make make install?
i sorgenti in /usr/src/linux-X.Y.ZZ.R
Solo con make, make modules_install, make install o c'é altro?
il link alla cartella dei sorgenti (ex: ln -s /usr/src/linux-2.6.24.4 /usr/src/linux)
Questa é la cosa piú oscura per me: come faccio a sapere qual'é il kernel che attualmente ha questo link? A cosa serve di preciso il link? É un'informazione usata in automatico dal kernel oppure serve solo all'utente per andare nella cartella "giusta" quando si scrive cd /usr/src/linux?
Grazie

Gimli[2BV!2B]
01-04-2008, 20:27
se lo avevo compilato io in partenza dovrei avere giá il .config in /usr/src e posso direttamente modificare quello e poi fare make make install?
Esatto!

i sorgenti in /usr/src/linux-X.Y.ZZ.R
Solo con make, make modules_install, make install o c'é altro?
Una volta configurato, compilato ed installato tutto quanto la cartella dei sorgenti non ha più alcuna relazione diretta con il kernel installato.

Ora il famigerato link:

come faccio a sapere qual'é il kernel che attualmente ha questo link?
ls -la /usr/src/ | grep "linux -"

Se il link esiste, otterrai qualcosa di questo tipo:
lrwxrwxrwx+ 1 gimli src 15 24 mar 00:10 linux -> linux-2.6.24.4/
A cosa serve di preciso il link?Come hai detto è una via veloce e sicura per raggiungere i sorgenti, quindi oltre all'utilizzo personale capita che durante la compilazione di alcuni software venga utilizzato per raggiungere i sorgenti.
Devo dire che a volte me ne dimentico e raramente ne ho avuto bisogno (ma per ridurre potenziali problemi tanto vale investire ½ secondo per crearlo...).


Ultima cosa, non ho idea di quale distribuzione usi, ma se si tratta di una Debian based è meglio compilare i kernel alla debian-way per avere la certezza di non seminare in giro nulla, (http://guide.debianizzati.org/index.php/Debian_Kernel_Howto) riducendo i dubbi su make, make modules, ecc...
Ma non è l'unica (http://www.howtoforge.com/kernel_compilation_fedora) ad avere strumenti che permettono di semplificare/adattare la compilazione alle convenzioni adottate. (Mentre Slackware (http://www.linuxelectrons.com/features/howto/kernel-2-6x-slackware-compilation-howto) e Gentoo (http://gentoo-wiki.com/HOWTO_Compile_a_Kernel_Manually) non si discostano dal metodo standard)

!zingaro
02-04-2008, 07:20
Grazie mille!! Finalmente l'ho trovato :muro:
Io non l'ho creato perché, come immaginavo, ce l'aveva giá il kernel precedente che comunque continuerá ad essere usato da altri utenti (in questo caso che conseguenze avrebbe avuto il crearne uno nuovo, immagino che avrebbe sostituito il precedente?)
Visto che ci sei, mi puoi indicare questo metodo per la compilazione in Ubuntu? (e, se conosci, anche in Fedora).

EDIT: Quello per Debian me lo avevano giá suggerito, per Fedora ancora no peró