pit2012: workshop@unina - compilazione del kernel linux
TRANSCRIPT
![Page 1: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/1.jpg)
PIT 2012: Workshop@UniNA
Compilazione del Kernel Linux- light tips && tricks -a cura di Marco Ferrigno
con il patrocinio del Preside della Facoltà di Ingegneria dell'Università degli Studi di Napoli Federico II:
Prof. Piero Salatino
e con il sostegno del Prof. Antonio PescapèComics Unina Research Group
![Page 2: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/2.jpg)
root@host:/# intro
PROPEDEUTICITA':
Nozioni basilari sulle architetture di elaborazione,
Nozioni basilari sull'utilizzo dei sistemi operativi,
Curiosità e spirito di iniziativa.
COSA IMPAREREMO DA QUESTO TALK:
GNU/Linux Day 2011: a che punto eravamo rimasti?
Il kernel Linux in pratica;
Compilazione: un approccio top-down;
Bootloader manager && opzioni addizionali
![Page 3: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/3.jpg)
GNU General Public License
Il sistema Linux è' libero, nel senso che si può' copiare, modificare e usare in qualunque modo si desideri e si può far circolare senza alcuna limitazione
All'atto della distribuzione si deve rendere disponibile il codice sorgente e ciò vale per ogni componente di un pacchetto di distribuzione che sia oggetto della GPL
![Page 4: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/4.jpg)
Kernel: cos'è realmente?
E' il software il cui compito è quello di fornire ai processi in esecuzione sull'elaboratore un accesso sicuro e controllato al hardware.
PRINCIPALI MANSIONI:
Gestione della porzione tempo-macchina
Gestione delle astrazioni
Nel nostro caso (quasi)
KERNEL MONOLITICI(UNIX->*.BSD, LINUX ) INTEGRAZIONE DEL CODICE STRETTA
![Page 5: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/5.jpg)
Kernel Linux: mappa
![Page 6: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/6.jpg)
Kernel Linux: perchè compilare
Domanda: La mia distro ha già un kernel precompilato, perchè dovrei ricompilare?
Essenzialmente sono quattro i casi in cui la ricompilazione è necessaria
L'aggiornamento a versioni più recenti senza cambiare distribuzione;
L'inserimento di nuove funzionalità non contenute nel kernel precompilato;
L'implementazione di nuovi driver per una certa periferica;
Curiosità e spirito di iniziativa ^_^
![Page 7: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/7.jpg)
Kernel Linux: versioni disponibili
Domanda: Dove procurarsi i sorgenti?
su https://www.kernel.org/
Caso d'esempio: Linux kernel 3.3.2 (Latest Stable Kernel; 13 aprile 2012) https://www.kernel.org/pub/linux/kernel/v3.x/
Numerazione:
Nome file: linux-x.y.z
Major release: xRamo di sviluppo: yVersioni per ramo di sviluppo: z
![Page 8: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/8.jpg)
Kernel Linux: il formato compresso
SCOMPATTARE L'ARCHIVIO
consiglio: scompattare l'archivio nella cartella /usr/src
root@host:/# bunzip2 linux-3.3.2.tar.bz2
sostituisce il *.tar.bz2 con il suo equivalente non compresso *.tar
root@host:/# tar xvf linux-3.3.2.tar
estrae dall'archivio i files e crea la giusta struttura di directory, mantenendo il file *.tara questo punto si può entrare nella direcotry creata:
root@host:/# cd linux-3.3.2root@host:/linux-3.3.2#
![Page 9: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/9.jpg)
Kernel Linux: configurazione
LA FASE DI CONFIGURAZIONE
root@host:/linux-3.3.2# make config
nel caso nel sistema fossero presenti le librerie ncurses (e relativi files di sviluppo) è possibile sostituire il comando sopra citato con
root@host:/linux-3.3.2# make menuconfig
La selezione dei parametri è un procedimento lungo che richiede molta ponderazione: si tratta di decidere cosa andrà compilato ed incluso nel kernel, che cosa non dovrà essere compilato, cosa andrà compilato ma sarà utilizzato come modulo.
ATTENZIONE ai contrassegni: (*); (M)
![Page 10: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/10.jpg)
Kernel Linux: make menuconfig
UNO DEI CASI D'USO: make menuconfig
![Page 11: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/11.jpg)
General setup --->
CONFIGURA FUNZIONALITÀ GENERALI DEL KERNEL.
Voci principali (o da tenere sott'occhio) su ~60:
( ) Tool per la Cross Compilazione Modalità di compressione del Kernel --- >(GZIP, BZIP2, LZMA, XZ, LZO) [*]System V IPC Sottosistema IRQ ---> Sottosistema RCU ---> [*] Initial RAM filesystem and RAM disk support [*] Configure standard Kernel features (expert users) ---> Kernel performance events and counter --->
![Page 12: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/12.jpg)
[*] Enable loadable module support --->
I moduli sono piccoli pezzi di codice già compilato che possono essere inseriti nel Kernel in esecuzione.
Abilitando questa opzione ed eseguendo successivamente
make modules_install
metteremo i moduli nella cartella
/lib/modules
da dove potranno essere poi caricati tramite l'utilizzo di modprobe
… altri dettagli nelle prossime slides :)
![Page 13: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/13.jpg)
[*] Enable the block layer --->
Attivazione dei supporti di grandi dimensioni (>2TB) e opzioni per la loro gestione
PRINCIPALE SOTTOVOCE:
I/O SCHEDULER:
DEADLINE: inizio e fine di un servizio tramite un preciso vincolo temporale
CFQ: richieste sincrone alle quali è assegnata una porzione di tempo-macchina per ciascuna coda di appartenenza
NOOP: semplicemente FIFO ^_^
![Page 14: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/14.jpg)
Processor type and features --->
PROCESSORE: TIPO E CARATTERISTICHE.
In questa sezione potete scegliere il tipo di processore per il quale va compilato il Kernel
Voci principali (o da tenere sott'occhio) su ~70:
[*] Enable MPS table (MultiProcessor Specification) [*] Supporting for big SMP System with more than 8 CPUs [*] Paravirtualized guest support ---> Processor family ---> [*] SMT (Hyperthreading) scheduler support Preemption model ---> (server, desktop, low-latency desktop) Hight memory support --->
![Page 15: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/15.jpg)
ACPI options / Bus / ELF
POWER MANAGEMENT AND ACPI OPTIONS --->
Da tenere sott'occhio:
CPU frequency scaling
→ x86 frequency scaling driver
BUS OPTIONS --->
PCI/PCI-EXPRESS/PCMCIA
EXECUTABLE FILE FORMAT / EMULATIONS --->
[*] Kernel support for ELF binaries
![Page 16: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/16.jpg)
[*] Networking support --->
LISTA VASTISSIMA!
Un insieme di opzioni specializzate per la rete, tra cui:
Networking option ---> [*] Amateur radio support ---> [M] IRDA ---> [M] Bluetooth ---> [*] Wireless ---> [M] WIMAX ---> NFC (EXPERIMENTAL) --->
![Page 17: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/17.jpg)
Device Drivers / Firmware Drivers
DEVICE DRIVERS --->
Opzioni relative alla gestione dei device, dai più obsoleti a quelli più usati:
ATA/ATAPI/MFM/RLL;SCSI;SERIAL ATA;PARALLEL ATA;IEEE 1394;MACINTOSH DEVICE DRIVER;ISDN SUPPORT;USB SUPPORT;MMC/SD/SDIO;…
FIRMWARE DRIVERS --->
[M] EFI variable support[M] DELL system management base driver[ ] Sigmastudio firmware loader[ ] Google firmware driver
![Page 18: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/18.jpg)
File system --->
IL DOGMA: OGNI COSA E' UN FILE
La lista dei filesystem supportati è vastissima: EXT2, EXT3, EXT4, RAISER, JFS, XFS, BTRFS, ..
JOURNALING: annotazione delle modifiche a seguito di una caduta di tensione
Altre particolarità:
Supporto delle quote [M] FUSE (File system in User Space) DOS/FAT/NT file system ---> Network file system --->
![Page 19: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/19.jpg)
Kernel hacking --->
Avrete a che fare con ~100naio di opzioni.Nella maggior parte dei casi si tratta di debugger e detector:
File system Scheduler SLAB Kernel memory leak Spinlock …
![Page 20: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/20.jpg)
Security options --->
Particolare attenzione a:
SELINUX: razionalizza il volume di software caricato con un rafforzamento delle politiche di sicurezza strettamente allineato con i requisiti minimi del TCSEC (Trested Computer System Evalutation Criteria)
APPARMOR: permette di associare ad ogni programma un profilo di sicurezza che restringe le capacità del programma stesso
![Page 21: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/21.jpg)
Cryptogaphic API --->
[*] Cryptographic algorith manager
Molti degli algoritmi presenti sono impostati come moduli e sono divisi nelle seguenti categorie
Authenticated encryption Block modes Hash modes Digest Ciphers Compression Random number generator Hardware crypto device --->
![Page 22: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/22.jpg)
Virtualization --->
KERNEL BASED VIRTUAL MACHINE (KVM) ha tra i suoi maggiori sviluppatori Red-Hat
KVM è una complessa infrastruttura di virtualizzazione attualmente implementata come modulo
Si prevede a breve la realizzazione di un'interfaccia a chiamata di sistema
![Page 23: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/23.jpg)
Kernel Linux: la compilazione
TERMINATA LA LUUUUUUUUUNGA DISAMINA, PASSIAMO ALLA COMPILAZIONE!
Assicuratevi che la vostra macchina sia a disposizione senza interruzioni ma soprattutto trovatevi qualcosa di divertente da fare … 4 semplici lettere stresseranno il vostro pc in una maniera non indifferente
root@host:/linux-3.3.2# make
![Page 24: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/24.jpg)
Kernel Linux: immagine compressa e moduli
IMMAGINE COMPRESSA
In questo momento abbiamo compilato tutto ma non abbiamo ancora messo al loro posto nè i moduli nè l'immagine del kernel
root@host:/linux-3.3.2# make bzImage
Fatto ciò nella sottodirectory arch/xyz/boot si troverà il file bzImage.xyz = sigla che indica l'architettura per cui è stato compilato il kernel
Creato il Kernel è il momento di installare i moduli
root@host:/linux-3.3.2# make modules_install
FATTO! (cit. necessaria)! Manca solo un RAMdisk
![Page 25: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/25.jpg)
Kernel Linux: moduli & driver
Ma … cos'è un modulo?
E' un componente software che può svolgere diverse funzioni
VANTAGGI: Può essere compilato separatamente ed essere caricato in un kernel già in uso Alta personalizzazione Distribuzione gratuita e libera
I DRIVER IN UN SISTEMA LINUX:
Il kernel possiede delle tabelle dinamiche di tutti i driver noti e fornisce un insieme di procedure che permettono di aggiungere o rimuovere un driver da queste tabelle in qualunque momento
MODULI & DRIVER:
Un modulo può registrare molti tipi di driver;Un certo modulo può scegliere di registrare più di un driver;Un certo driver potrebbe voler registrare due meccanismi distinti per l'accesso ad un dispositivo
![Page 26: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/26.jpg)
Kernel Linux: initramfs
Torniamo al RAMdisk: cos'è?
E' una porzione di RAM che viene utilizzata come disco.
root@host:/linux-3.3.2# mkinitramfs -o /boot/initrd.img-3.3.2
Il primo parametro indica in path in cui allocare il file
![Page 27: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/27.jpg)
Kernel Linux: the end … o quasi
COPIA DEI FILE IMMAGINE DEL KERNELcp arch/x86/boot/bzImage /boot/vmlinuz-3.3.2
MAPPATURA DEL SISTEMAcp System.map /boot/System.map-3.3.2
[CONSIGLIATA] CONFIGURAZIONE USATAcp .config /boot/config-3.3.2
MODIFICA DEL BOOTLOADERLILO, GRUB, GRUB2 … SI RIMANDA ALLE RISPETTIVE GUIDE (RTFM googleando googleando)
![Page 28: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/28.jpg)
Kernel Linux: il lato oscuro
KERNEL PANIC→ ERRORE IRRECUPERABILE INDIVIDUATO IN KERNEL SPACE
MANCATO CARICAMENTO DEI MODULI
INIEZIONE DI FALLIMENTI→ TRANSAZIONE DI UN SISTEMA IN UNO STATO NON CORRETTO
OVERFLOW→ STACK→ BUFFER→ HEAP
![Page 29: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/29.jpg)
Moduli: after compiling
INSERIMENTO E DEALLOCAZIONE …… rispettivamente con insmod e rmmod
Nel loro funzionamento non tengono conto delle dipendenze, di conseguenza la precedenza fra i moduli deve essere tenuta in conto quando si determina l'ordine con il quale caricarli.Naturalmente la rimozione dei moduli deve avvenire per ordine inverso.
LISTA MODULI CARICATIlsmodL'output visualizza il nome del modulo, il numero di dipendenze e le dipendenze stesse.
CARICAMENTO MODULImodprobeCarica, sfruttando la il contenuto di modules.dep, tutti i moduli eventualmente necessari per il corretto funzionamento di quello specificato
GENERATORE DI DIPENDENZEdepmodSi trova come script di avvio in tutte le distribuzioni e consente di generare automaticamente il file modules.dep (lista di dipendenze)
![Page 30: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/30.jpg)
Kernel Linux: opzioni addizionali
Alcune opzioni addizionali:
Algoritmo di scheduling: inserimentoIl kernel permette di impostare l'algoritmo di scheduling a runtime mediante sysfs; in questo modo è possibile selezionare il miglior algoritmo a seconda del proprio utilizzo
root@host:/# echo nomescheduler > sys/block/nomedevice/queue/iosched
Opzioni di avvio installazione
acpi=off → disattiva l'uso dell'ACPIapm=off → disattiva l'uso dell'APMdisplay=IP:0 → trasmette il display su un sistema remotoexpert → permette il partizionamento di un media staccabile e il montaggio di altri devicemediacheck → verifica integrità isonoathlon → disattiva le ottimizzazioni per AMD Athlonnoprobe → disattiva il rilevamento hardwarenousb → disattiva il caricamento del modulo e il montaggio di periferiche usbresolution= → imposta la modalità video preferita
![Page 31: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/31.jpg)
Stiamo per finire ...
Talk is cheap. Show me the code
(Linus Torvalds)
![Page 32: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/32.jpg)
… stiamo finendo ...
Un sentito ringraziamento a chi ha permesso lo svolgersi di tutto questo:
al Preside della Facoltà di Ingegneria dell'Università degli Studi di Napoli Federico II: Prof. Piero Salatino
e al Prof. Antonio Pescapè, nostro eterno supporter
Ai ragazzi dell'associazione NaLug – Napoli GNU/Linux Users Group http://[email protected]
![Page 33: PIT2012: Workshop@UniNA - Compilazione del Kernel Linux](https://reader034.vdocuments.site/reader034/viewer/2022052620/5577c3d1d8b42a1c068b5288/html5/thumbnails/33.jpg)
… abbiamo finito!
Bibliografia: dal kernel 2.2 in poi … parecchi kernel panic -.-'
Riferimenti e contatti:Marco Ferrigno- Security & system independent researcher -- Developer of the Italian Debian GNU/Linux HOWTOs -
http://marcoferrigno.wordpress.com
best regards ;-)