Linux Kernel, configuration, compiling - Dipartimento di Ingegneria ...
Linux Kernel, configuration, compiling - Dipartimento di Ingegneria ...
Linux Kernel, configuration, compiling - Dipartimento di Ingegneria ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Sistemi Operativi<br />
Corso <strong>di</strong> Laurea Triennale<br />
in <strong>Ingegneria</strong> Informatica<br />
Esercitazione 11<br />
• Make<br />
• SVN<br />
• <strong>Kernel</strong> <strong>Linux</strong> (vs micro-kernel)<br />
• Configurazione e compilazione<br />
<strong>Linux</strong> <strong>Kernel</strong><br />
daniel.cesarini@for.unipi.it<br />
1
MAKE
make<br />
make hello<br />
Si creano programmi a partire dal<br />
co<strong>di</strong>ce sorgente.<br />
Make esegue i passi necessari<br />
(compilazione, eventualmente altro) sui<br />
file sorgenti<br />
make hello → cc -o hello hello.c<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 3
Makefile 1/2<br />
Per definire il comportamento <strong>di</strong> make<br />
si scrivono dei file (chiamati makefile).<br />
Nei makefile si definiscono delle regole<br />
Se non sono definite esplicitamente,<br />
make cerca <strong>di</strong> utilizzare regole <strong>di</strong><br />
default<br />
Nota: i makefile hanno come nome<br />
standard makefile e Makefile<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 4
Makefile 2/2<br />
Nei makefile si in<strong>di</strong>cano le<br />
inter<strong>di</strong>pendenze dei file sorgenti e i<br />
coman<strong>di</strong> necessari per compilarli<br />
Make esamina l'età dei<br />
file, e ricrea i file<br />
<strong>di</strong>pendenti da file<br />
mo<strong>di</strong>ficati<br />
successivamente alla<br />
loro creazione.<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 5
Regole <strong>di</strong> Make<br />
I makefile sono una serie <strong>di</strong> regole e<br />
macro, per creare gli obiettivi<br />
La sintassi base delle regole è<br />
obiettivo { obiettivo } : [ <strong>di</strong>pendenza ]<br />
[; comando] { comando }<br />
L'obiettivo deve iniziare dalla prima colonna.<br />
Ogni comando successivo deve essere<br />
rientrato con una tabulazione<br />
program: program.o<br />
cc -o program program.o -lmylib<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 6
Macro<br />
Alcune Macro <strong>di</strong> default:<br />
CC gcc<br />
MAKE make<br />
CFLAGS -0<br />
LDFLAGS [vuoto]<br />
Tali macro possono essere ridefinite, con<br />
variabili <strong>di</strong> ambiente, o usando l'opzione -e<br />
[variabile] da passare a make<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 7
Regole <strong>di</strong> default <strong>di</strong> make<br />
Regole a un solo suffisso<br />
.c → $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<<br />
.sh → cp $< $@ ; chmod a+x $@<br />
Regole a due suffissi<br />
.c.a → $(CC) $(CFLAGS) -c $< $(AR) \<br />
$(ARFLAGS) $@ $*.o ; rm -f $*.o<br />
.c.o → $(CC) $(CFLAGS) -c $<<br />
<br />
<br />
$@ è l'obiettivo della specifica regola.<br />
$< in<strong>di</strong>ca il nome del file che ha determinato la scelta<br />
della regola<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 8
Obiettivi ricorrenti<br />
Obiettivi “ricorrenti” dei makefile:<br />
clean:<br />
rm -f *.o<br />
all: $(TARGETS)<br />
clobber:<br />
rm -f $(TARGETS)<br />
install:<br />
[operazioni per l'installazione nel sistema dei<br />
file necessari per l'esecuzione del programma]<br />
In TARGETS si mettono tutti gli oggetti da creare col make.<br />
(es. TARGETS = first_exec second_exec third_exec)<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 9
Esempio <strong>di</strong> makefile<br />
#Questo è un makefile<br />
CC=gcc<br />
CFLAGS=-Wall -Werr<br />
main: main.o<br />
cc -o main main.o -lpthread<br />
clean:<br />
rm -f main main.o<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 10
Esercizi
Esercizi 1<br />
(copiate /opt/share/SO_esercitazione_4_co<strong>di</strong>ce.tar.gz<br />
nella vostra home e scompattatelo)<br />
Leggere i makefile contenuti nella cartella del co<strong>di</strong>ce<br />
Scrivere un file sorgente in c (.c) e un file header (.h)<br />
incluso dal file .c. Compilare il file.c con gcc. Scrivere<br />
poi un makefile per la compilazione del file .c,<br />
specificando le <strong>di</strong>pendenze. Provare a mo<strong>di</strong>ficare il<br />
file .h (ponendoci ad esempio una costante, che viene<br />
stampata a video dal programma). Mo<strong>di</strong>ficando il<br />
file.h cosa succede durante la compilazione con<br />
make? E cosa succede se non è in<strong>di</strong>cato nel makefile<br />
la <strong>di</strong>pendenza del file.c dal file.h?<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 12
Riferimenti
Riferimenti<br />
GNU Make: A Program for Directing<br />
Recompilation by Richard M. Stallman<br />
and Roland McGrath<br />
http://www.x.org/ - Official site of the<br />
Xorg foundation<br />
http://www.linfo.org/x.html –<br />
introduction to X<br />
http://tools.ietf.org/html/rfc1198 – RFC<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 14
SVN
SVN - Introduzione<br />
SVN (SubVersioN) è uno strumento <strong>di</strong><br />
“source control” o “revision control”.<br />
Tener traccia <strong>di</strong> mo<strong>di</strong>fiche a co<strong>di</strong>ce<br />
sorgente.<br />
Permette agli utenti <strong>di</strong> essere sincronizzati<br />
sui cambiamenti al co<strong>di</strong>ce.<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 16
Repository 1/2<br />
SVN salva tutti i dati tenuti sotto<br />
controllo in un apposito repository.<br />
Per usare SVN:<br />
creare il repository<br />
mk<strong>di</strong>r svnroot<br />
svnadmin create svnroot/nome_progetto<br />
Il contenuto della cartella non va<br />
mo<strong>di</strong>ficato manualmente.<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 17
Repository 2/2<br />
Dare i permessi <strong>di</strong> scrittura sulla cartella<br />
agli utenti che debbono usare quel<br />
repository.<br />
Esempio:<br />
creare un apposito gruppo, svnusers<br />
assegnare il repository a quel gruppo,<br />
renderlo scrivibile dal gruppo e aggiungere<br />
gli utenti al gruppo svnusers<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 18
Eseguire il checkout<br />
svn co [protocol://][user@][server][/repo]<br />
checkout <strong>di</strong> un intero repository SVN.<br />
Localmente crea una cartella che<br />
contiene una copia dei file scaricati dal<br />
repository.<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 19
Coman<strong>di</strong> svn 1<br />
svn <strong>di</strong>ff → <strong>di</strong>fferenze tra il file<br />
mo<strong>di</strong>ficato e l'ultima versione scaricata<br />
svn ci → commit delle mo<strong>di</strong>fiche<br />
eseguite localmente<br />
svn up → esegue l'update dei file dal<br />
repository verso la copia locale<br />
svn help → aiuto!!!<br />
Si possono invocare sia sull'intera cartella che su<br />
singoli file o sottocartelle<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 20
Coman<strong>di</strong> svn 2<br />
svn add nomefile → aggiunge un file<br />
svn mk<strong>di</strong>r <strong>di</strong>rname → crea una nuova<br />
cartella<br />
svn delete name → elimina il file o<br />
<strong>di</strong>rectory<br />
svn move sorg dest → sposta “sorg” in<br />
“dest”<br />
Attenzione: ciò che è sotto il controllo <strong>di</strong><br />
SVN va alterato solo con i coman<strong>di</strong> appositi<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 21
Esercizi SVN<br />
Creare in /home/studenti/svn/repo un repository con<br />
svnadmin<br />
Fare il checkout da /home/studenti/svn/repo in<br />
/home/studenti/localsvn del repository (svn co<br />
file:///PERCORSO<br />
Provare a caricare nel repository qualche file<br />
sorgente (eventualmente quelli creati per make, o gli<br />
script del precedente punto). Eseguire delle<br />
mo<strong>di</strong>fiche ai file ed eseguire il commit sul repo.<br />
mk<strong>di</strong>r /home/studenti/svn<br />
svnadmin create /home/studenti/svn/repo<br />
svn co file:///home/studenti/svn/repo localsvn<br />
cd localsvn … aggiungete qualche file (cp e svn add)<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 22
Esercizi
Riferimenti SVN<br />
Controllo <strong>di</strong> Versione con Subversion:<br />
http:// svnbook.red-bean.com/<br />
(<strong>di</strong>sponibile online e pubblicato da<br />
O'Really)<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 24
<strong>Kernel</strong>
Sommario - <strong>Kernel</strong><br />
<strong>Kernel</strong> monolitico vs modulare vs<br />
microkernel<br />
<strong>Kernel</strong> <strong>Linux</strong>: configurazione e<br />
compilazione<br />
...<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 26
<strong>Kernel</strong><br />
(Differenti approcci)
<strong>Kernel</strong> monolitico<br />
Un unico file oggetto<br />
Un unico spazio <strong>di</strong> in<strong>di</strong>rizzamento nel<br />
kernel<br />
tutti i processi a livello <strong>di</strong> sistema<br />
(quando sono nel kernel)<br />
con<strong>di</strong>vidono lo spazio <strong>di</strong><br />
in<strong>di</strong>rizzamento<br />
CPU, mem, IPC, Driver, Permessi, … nel<br />
kernel<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 28
Micro-<strong>Kernel</strong><br />
Nucleo “micro”<br />
Ridotto all'essenziale per garantire<br />
l'astrazione <strong>di</strong> macchina<br />
Scheduler (CPU virtuali)<br />
Memory management (memoria virtuale)<br />
IPC - Inter Process Communication<br />
es. L4 (Jochen Liedtke), GNU/Hurd, ...<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 29
Monolithic vs Micro-<strong>Kernel</strong><br />
microkernel:<br />
PRO<br />
- isolamento componenti<br />
- resistenza ai guasti<br />
- sicurezza<br />
CONTRO<br />
- tutto passa dall'IPC:<br />
- prestazioni,<br />
- <strong>di</strong>fficoltà progettuale<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 30
<strong>Kernel</strong> modulare<br />
I kernel monolitici possono essere<br />
“modularizzati”<br />
Tale operazioni non incide sullo spazio <strong>di</strong><br />
in<strong>di</strong>rizzamento del kernel<br />
Si <strong>di</strong>ce kernel modulare un kernel che<br />
permette il caricamento <strong>di</strong>namico (a<br />
runtime) <strong>di</strong> moduli oggetto<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 31
<strong>Kernel</strong> <strong>Linux</strong><br />
configurazione / compilazione
<strong>Kernel</strong> <strong>Linux</strong> (2.6.x) – Numeri<br />
mole:<br />
320 Mb <strong>di</strong> sorgenti per<br />
4’500’000 LOC<br />
costo dello sviluppo:<br />
4’500 anni/uomo,<br />
612’000’000 $ totale<br />
fonte:<br />
www.dwheeler.com/essays/linux-kernel-cost.html<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 33
Ottenere il kernel<br />
http://www.kernel.org<br />
tarball da 30 Mb contenenti<br />
sorgenti C (portabili su almeno 16<br />
architetture ad oggi)<br />
Assembly (architecture specific)<br />
interamente rilasciato sotto licenza GPL<br />
(firmware a parte)<br />
compilabile utilizzando utility GNU<br />
(GCC, Make, Binutils)<br />
SCM utilizzato dalla comunità: git<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 34
<strong>Linux</strong> <strong>Kernel</strong><br />
È un kernel monolitico (i.e. non<br />
microkernel), ma modulare<br />
L’installazione consiste <strong>di</strong>:<br />
parte monolitica (vmlinuz)<br />
moduli (initrd)<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 35
<strong>Linux</strong> – parte “monolitica”<br />
<br />
Non risiede necessariamente sul filesystem, ma deve<br />
essere nota al boot loader (e.g. lilo, grub, yaboot,<br />
loadlin, . . . )<br />
il boot loader è l’applicazione che si preoccupa <strong>di</strong><br />
“installare” il kernel in modo che la procedura <strong>di</strong><br />
bootstrap della macchina (tipicamente implementata<br />
nel BIOS) sia in grado <strong>di</strong> accedervi<br />
è fortemente <strong>di</strong>pendente dall’architettura<br />
esempi: lilo e grub su i386, yaboot su powerpc<br />
<br />
<br />
Quando risiede sul filesystem tipicamente è un unico file:<br />
/boot/vmlinu{x,z}-<br />
(e.g. /boot/vmlinux-2.6.32)<br />
Viene caricata in memoria al boot e mai scaricata<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 36
<strong>Linux</strong> – moduli del kernel<br />
<br />
<br />
<br />
Parti <strong>di</strong> kernel, caricati/scaricati su richiesta, manualmente<br />
dall’utente o da demoni preposti (kerneld, ora kmod<br />
subsystem)<br />
Devono essere accessibili a runtime, quin<strong>di</strong> sono nel<br />
filesystem<br />
un albero <strong>di</strong> file oggetto (.o, ora .ko)<br />
ra<strong>di</strong>cato in /lib/modules//<br />
(e.g. /lib/modules/2.6.32/)<br />
Flessibilità dei moduli<br />
name aliasing ed opzioni<br />
(/etc/modules.conf, /etc/modprobe.d/)<br />
<strong>di</strong>pendenze inter-modulo<br />
(/lib/modules/.../modules.dep)<br />
moduli caricati al boot (/etc/modules)<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 37
Gestione moduli<br />
Coman<strong>di</strong> inerenti i moduli:<br />
Caricamento su richiesta<br />
insmod (full path, non gestisce alias e <strong>di</strong>pendenze)<br />
modprobe (nome modulo, gestisce alias e<br />
<strong>di</strong>pendenze)<br />
Rimozione: rmmod, modprobe -r (gestisce<br />
<strong>di</strong>pendenze)<br />
Lista dei moduli caricati: lsmod (implementato via<br />
/proc/modules)<br />
Calcolo delle <strong>di</strong>pendenze: depmod<br />
Informazioni (parametri, licenza, . . . ): mo<strong>di</strong>nfo<br />
Pacchetto Debian module-init-tools<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 38
Configurazione e<br />
compilazione
Configurazione
Configurazione, compilazione,<br />
installazione kernel<br />
Gestite dal Makefile <strong>di</strong>stribuito assieme al kernel<br />
Target del Makefile: config, xconfig, menuconfig,<br />
oldconfig, gconfig (solo 2.6.x)<br />
Ogni (o quasi) componente del kernel può essere:<br />
compilata ed inclusa nella parte monolitica<br />
compilata come modulo<br />
non compilata<br />
Vengono gestite <strong>di</strong>pendenze inter-componente<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 41
Configurazione<br />
Risiede nel file .config all’interno dell’albero dei<br />
sorgenti<br />
La configurazione del kernel installato è tipicamente<br />
in /boot/config-X.X.X (X.X.X versione kernel installato)<br />
Per partire da quella base copiarlo nella cartella in cui<br />
sono i sorgenti<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 42
Compilazione
Compilazione<br />
<br />
<br />
Target del Makefile <strong>di</strong> interesse:<br />
pulizia: clean, mrproper<br />
compilazione parte monolitica: bzImage<br />
compilazione moduli: modules<br />
Risultati della compilazione<br />
arch//boot/bzImage<br />
più i file (.o/.ko) per i moduli<br />
Installazione:<br />
<br />
<br />
<br />
su <strong>di</strong>sco: fortemente <strong>di</strong>pendente dal bootloader, spesso<br />
target install del Makefile<br />
su floppy: dd if=..../bzImage of=/dev/fd0<br />
moduli: target modules_install del Makefile<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 44
Initrd (1/2)<br />
INITial Ram Disk<br />
Nel caso che parti del kernel necessarie al boot<br />
siano necessarie al boot (e.g. supporto scsi,<br />
filesystem, RAID) è possibile utilizzare un “initrd”<br />
Ogni initrd è una immagine (compressa,<br />
tipicamente in formato cpio + gzip) <strong>di</strong> un<br />
filesystem minimale contenente:<br />
moduli necessari al boot del sistema<br />
tool per il boot del filesystem reale (post<br />
caricamento dei moduli)<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 45
Initrd (2/2)<br />
<br />
<br />
<br />
<br />
Procedura (semplificata) <strong>di</strong> boot con initrd:<br />
loa<strong>di</strong>ng del kernel e del ram<strong>di</strong>sk (boot loader)<br />
mounting del ram<strong>di</strong>sk come root filesystem (kernel)<br />
esecuzione <strong>di</strong> un programma predefinito (e.g.<br />
/init, /linuxrc) (kernel)<br />
loa<strong>di</strong>ng <strong>di</strong> moduli necessari (/init)<br />
mounting del filesystem reale (/init)<br />
pivot_root (/init)<br />
procedura usuale <strong>di</strong> boot<br />
La configurazione <strong>di</strong> initrd è bootloader-dependent<br />
Coman<strong>di</strong>: mkinitrd, yaird, mkinitramfs(-kpkg),<br />
update-initramfs<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 46
<strong>Kernel</strong> <strong>Linux</strong><br />
-<br />
the Debian way of life
<strong>Kernel</strong> – the Debian way 1/2<br />
Debian (come ogni <strong>di</strong>stribuzione) fornisce pacchetti<br />
contenenti il kernel e i moduli.<br />
<br />
<br />
Vantaggi: supporto alla sicurezza, stabile e testato<br />
Svantaggi: non all’ultimo grido, pochissime patch extra<br />
Può risultare utile utilizzare un kernel più recente per avere<br />
migliore supporto hardware o software (NIC ethernet 10’000,<br />
funzionalità stack <strong>di</strong> rete, virtualizzazione, . . . )<br />
<br />
<br />
<br />
Debian fornisce una utility make-kpkg (pacchetto<br />
kernel-package) per creare pacchetti del kernel<br />
customizzati<br />
Vantaggi: facile installare anche su un intero cluster,<br />
integrato con il package manager, integrato con patch<br />
presenti nell’archivio Debian<br />
Svantaggi: niente supporto da parte del security team <strong>di</strong><br />
Debian<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 48
<strong>Kernel</strong> – the Debian way 2/2<br />
Per ottenere un pacchetto del kernel custom<br />
<br />
<br />
<br />
<br />
Scaricare la tarpalla desiderata (o pacchetto<br />
linux-source-2.6.26)<br />
Configurare il kernel (make oldconfig)<br />
Compilazione:<br />
make-kpkg --initrd kernel_image kernel_headers<br />
Opzioni:<br />
CONCURRENCY_LEVEL per specificare il numero <strong>di</strong> cpu da<br />
usare<br />
--append-to-version (alla versione del kernel)<br />
--revision (del pacchetto debian)<br />
--added-patches (ve<strong>di</strong> apt-cache search linux-patch)<br />
--added-modules (ve<strong>di</strong> module-assistant)<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 49
Moduli non ufficiali — the<br />
Debian way 1/2<br />
Molti driver non vengono integrati nel kernel <strong>di</strong><br />
www.kernel.org per motivi <strong>di</strong> obsolescenza oppure <strong>di</strong><br />
immaturità<br />
<br />
<br />
<br />
<br />
<br />
Debian fornisce una utility per creare pacchetti per tali<br />
moduli chiamata module-assistant (aka m-a, )<br />
Pacchetti con suffisso -source o -src nell’archivio (e.s.<br />
linux-wlan-ng-source) contengono i sorgenti <strong>di</strong> tali<br />
driver che devono poi essere compilati con m-a<br />
Vantaggi: generazione <strong>di</strong> pacchetti Debian<br />
Svantaggi: niente supporto dal security team<br />
Modalità interattiva: m-a<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 50
Moduli non ufficiali — the<br />
Debian way 2/2<br />
Listing dei driver <strong>di</strong>sponibili: m-a list<br />
Preparazione del sistema alla compilazione<br />
(installazione degli header del kernel): m-a<br />
prepare<br />
Build: m-a build linux-wlan-ng<br />
(build) e installazione: m-a a-i linux-wlan-ng<br />
Update del DB <strong>di</strong> driver noti: m-a update<br />
Interfaccia testuale (utile per bugreport): m-a -t<br />
<strong>Kernel</strong> per cui compilare (default è quello in<br />
esecuzione): m-a -l 2.6.26-1-amd64<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 51
Cosa c'è nel kernel?
Guar<strong>di</strong>amo un po' nel kernel<br />
<br />
Invochiamo il comando make menuconfig<br />
Ci si presenta un menu in ncurses (interfaccia testuale<br />
interattiva, basata sulle librerie ncurses)<br />
<br />
<br />
Possiamo trovare corrispondenze tra voci del menu e<br />
co<strong>di</strong>ce?<br />
Guardate un po' nei sottosistemi del kernel (dal menu, e<br />
poi <strong>di</strong>rettamente nella gerarchia delle cartelle)<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 53
Esercizi
Esercizi<br />
<br />
Scaricare da http://kernel.org l’ultima versione stabile del<br />
kernel <strong>Linux</strong><br />
Configurarla<br />
Compilarla con make-kpkg<br />
Installare il deb risultante e tentare un boot (non<br />
rimuovere il kernel precedente, in caso qualcosa vada<br />
storto è bene avere almeno un kernel funzionante)<br />
<br />
Utilizzare m-a per compilare un modulo non ufficiale a<br />
vostra scelta (es. linux-wlan-ng)<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 55
Riferimenti (e fonti del co<strong>di</strong>ce,<br />
e delle slide)<br />
<strong>Linux</strong> <strong>Kernel</strong> Development (Robert Love)<br />
www.kernel.org – per il co<strong>di</strong>ce<br />
www.debian.org e www.debianizzati.org per<br />
la compilazione “a-là Debian”<br />
www.msr-inria.inria.fr/~gares/STSL10 - Enrico<br />
Tassi - (buona parte <strong>di</strong> queste slide sono state<br />
copiate <strong>di</strong>rettamente in questa presentazione,<br />
perché si è ritenuto che il materiale originale<br />
fosse una valida base per la lezione)<br />
<strong>Kernel</strong> <strong>Linux</strong>, Configurazione e compilazione 56