22.01.2014 Views

Linux Kernel, configuration, compiling - Dipartimento di Ingegneria ...

Linux Kernel, configuration, compiling - Dipartimento di Ingegneria ...

Linux Kernel, configuration, compiling - Dipartimento di Ingegneria ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!