SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
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
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
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
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
Kernel Linux: mappa
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 ^_^
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: x
Ramo di sviluppo: y
Versioni per ramo di sviluppo: z
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 *.tar
a questo punto si può entrare nella direcotry creata:

root@host:/# cd linux-3.3.2
root@host:/linux-3.3.2#
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)
Kernel Linux: make menuconfig
UNO DEI CASI D'USO: make menuconfig
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 --->
[*] 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 :)
[*] 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 ^_^
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 --->
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
[*] 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) --->
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
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 --->
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
 …
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
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 --->
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
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
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
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
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
Kernel Linux: the end … o quasi


COPIA DEI FILE
  IMMAGINE DEL KERNEL
 cp arch/x86/boot/bzImage /boot/vmlinuz-3.3.2

 MAPPATURA DEL SISTEMA
cp System.map /boot/System.map-3.3.2

 [CONSIGLIATA] CONFIGURAZIONE USATA
cp .config /boot/config-3.3.2

MODIFICA DEL BOOTLOADER
LILO, GRUB, GRUB2 … SI RIMANDA ALLE RISPETTIVE GUIDE (RTFM googleando
googleando)
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
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 CARICATI
lsmod
L'output visualizza il nome del modulo, il numero di dipendenze e le dipendenze
stesse.
CARICAMENTO MODULI
modprobe
Carica, sfruttando la il contenuto di modules.dep, tutti i moduli eventualmente
necessari per il corretto funzionamento di quello specificato

GENERATORE DI DIPENDENZE
depmod
Si trova come script di avvio in tutte le distribuzioni e consente di generare
automaticamente il file modules.dep (lista di dipendenze)
Kernel Linux: opzioni addizionali
Alcune opzioni addizionali:

Algoritmo di scheduling: inserimento
Il 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'ACPI
apm=off → disattiva l'uso dell'APM
display=IP:0 → trasmette il display su un sistema remoto
expert → permette il partizionamento di un media staccabile e il montaggio di altri device
mediacheck → verifica integrità iso
noathlon → disattiva le ottimizzazioni per AMD Athlon
noprobe → disattiva il rilevamento hardware
nousb → disattiva il caricamento del modulo e il montaggio di periferiche usb
resolution= → imposta la modalità video preferita
Stiamo per finire ...




Talk is cheap. Show me the code

        (Linus Torvalds)
… 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://nalug.net
info@nalug.net
… 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 ;-)

Mais conteúdo relacionado

Mais procurados

Understanding Linux: 20 anni di kernel tra storia e tecnica
Understanding Linux: 20 anni di kernel tra storia e tecnicaUnderstanding Linux: 20 anni di kernel tra storia e tecnica
Understanding Linux: 20 anni di kernel tra storia e tecnicaMarco Ferrigno
 
Sicurezza e protezione dati su raspberry
Sicurezza e protezione dati su raspberrySicurezza e protezione dati su raspberry
Sicurezza e protezione dati su raspberryOrazio Sarno
 
Cyber Forensic
Cyber ForensicCyber Forensic
Cyber ForensicNaLUG
 
Corso Linux
Corso LinuxCorso Linux
Corso Linuxagnelloe
 
Free software & Open Source (FLOSS)
Free software & Open Source (FLOSS)Free software & Open Source (FLOSS)
Free software & Open Source (FLOSS)Piergiorgio Borgogno
 
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesLinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesMaurizio Antonelli
 
Introduzione a Linux: differenze con windows e strumenti per la programmazione
Introduzione a Linux: differenze con windows e strumenti per la programmazioneIntroduzione a Linux: differenze con windows e strumenti per la programmazione
Introduzione a Linux: differenze con windows e strumenti per la programmazioneValerio Bruno
 
Corso formazione Linux
Corso formazione LinuxCorso formazione Linux
Corso formazione LinuxErcole Palmeri
 
BlueSecurity: quando il dente fa male!
BlueSecurity: quando il dente fa male!BlueSecurity: quando il dente fa male!
BlueSecurity: quando il dente fa male!Alfredo Morresi
 
(in)Sicurezze delle reti wireless 802.11b
(in)Sicurezze delle reti wireless 802.11b(in)Sicurezze delle reti wireless 802.11b
(in)Sicurezze delle reti wireless 802.11bAlfredo Morresi
 
Presentazione Linux
Presentazione LinuxPresentazione Linux
Presentazione LinuxMatteo
 
Rootkit: teoria e pratica. Michele BOLOGNA
Rootkit: teoria e pratica. Michele BOLOGNARootkit: teoria e pratica. Michele BOLOGNA
Rootkit: teoria e pratica. Michele BOLOGNAMichele Bologna
 
introduzione_a_pfSense
introduzione_a_pfSenseintroduzione_a_pfSense
introduzione_a_pfSenseMassimo Giaimo
 

Mais procurados (19)

Understanding Linux: 20 anni di kernel tra storia e tecnica
Understanding Linux: 20 anni di kernel tra storia e tecnicaUnderstanding Linux: 20 anni di kernel tra storia e tecnica
Understanding Linux: 20 anni di kernel tra storia e tecnica
 
Sicurezza e protezione dati su raspberry
Sicurezza e protezione dati su raspberrySicurezza e protezione dati su raspberry
Sicurezza e protezione dati su raspberry
 
Corso linux base
Corso linux baseCorso linux base
Corso linux base
 
Cyber Forensic
Cyber ForensicCyber Forensic
Cyber Forensic
 
Corso Linux
Corso LinuxCorso Linux
Corso Linux
 
Free software & Open Source (FLOSS)
Free software & Open Source (FLOSS)Free software & Open Source (FLOSS)
Free software & Open Source (FLOSS)
 
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slidesLinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
 
Introduzione a Linux: differenze con windows e strumenti per la programmazione
Introduzione a Linux: differenze con windows e strumenti per la programmazioneIntroduzione a Linux: differenze con windows e strumenti per la programmazione
Introduzione a Linux: differenze con windows e strumenti per la programmazione
 
Corso formazione Linux
Corso formazione LinuxCorso formazione Linux
Corso formazione Linux
 
Sistema Operativo - LInux - Modulo 2.1
Sistema Operativo - LInux - Modulo 2.1Sistema Operativo - LInux - Modulo 2.1
Sistema Operativo - LInux - Modulo 2.1
 
Oltre I firewall
Oltre I firewallOltre I firewall
Oltre I firewall
 
BlueSecurity: quando il dente fa male!
BlueSecurity: quando il dente fa male!BlueSecurity: quando il dente fa male!
BlueSecurity: quando il dente fa male!
 
(in)Sicurezze delle reti wireless 802.11b
(in)Sicurezze delle reti wireless 802.11b(in)Sicurezze delle reti wireless 802.11b
(in)Sicurezze delle reti wireless 802.11b
 
Attacchi e difese
Attacchi e difeseAttacchi e difese
Attacchi e difese
 
Presentazione Linux
Presentazione LinuxPresentazione Linux
Presentazione Linux
 
Rootkit: teoria e pratica. Michele BOLOGNA
Rootkit: teoria e pratica. Michele BOLOGNARootkit: teoria e pratica. Michele BOLOGNA
Rootkit: teoria e pratica. Michele BOLOGNA
 
introduzione_a_pfSense
introduzione_a_pfSenseintroduzione_a_pfSense
introduzione_a_pfSense
 
Heartbleed - OpenSSL Bug
Heartbleed - OpenSSL BugHeartbleed - OpenSSL Bug
Heartbleed - OpenSSL Bug
 
Lezione tre
Lezione treLezione tre
Lezione tre
 

Semelhante a PIT2012: Workshop@UniNA - Compilazione del Kernel Linux

Understanding Linux
Understanding LinuxUnderstanding Linux
Understanding LinuxNaLUG
 
Linux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneLinux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneFulvio Corno
 
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxTrace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxDeveler S.r.l.
 
Linux Device Drivers
Linux Device DriversLinux Device Drivers
Linux Device DriversFabio Nisci
 
Moduli del kernel - Boot del sistema
 Moduli del kernel - Boot del sistema Moduli del kernel - Boot del sistema
Moduli del kernel - Boot del sistemaFulvio Corno
 
ArduinoDay17 - Creazione di un piccolo supercomputer con Raspberry PI per cal...
ArduinoDay17 - Creazione di un piccolo supercomputer con Raspberry PI per cal...ArduinoDay17 - Creazione di un piccolo supercomputer con Raspberry PI per cal...
ArduinoDay17 - Creazione di un piccolo supercomputer con Raspberry PI per cal...Marco Cavallini
 
Open Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspOpen Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspLaura Camellini
 
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxAmministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxPaolo Campegiani
 
Sistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente LinuxSistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente LinuxTruelite
 
Hardware Libero - Linux Day 2007
Hardware Libero - Linux Day 2007Hardware Libero - Linux Day 2007
Hardware Libero - Linux Day 2007pino_otto
 
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...LeonardoIurada
 
Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)Marcello Missiroli
 
Linux & Open Source : Lezione Tre
Linux & Open Source : Lezione TreLinux & Open Source : Lezione Tre
Linux & Open Source : Lezione TreDario Mazza
 

Semelhante a PIT2012: Workshop@UniNA - Compilazione del Kernel Linux (20)

Understanding Linux
Understanding LinuxUnderstanding Linux
Understanding Linux
 
Linux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneLinux Kernel, driver e compilazione
Linux Kernel, driver e compilazione
 
Compilazione Kernel
Compilazione KernelCompilazione Kernel
Compilazione Kernel
 
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxTrace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
 
Linux Device Drivers
Linux Device DriversLinux Device Drivers
Linux Device Drivers
 
Moduli del kernel - Boot del sistema
 Moduli del kernel - Boot del sistema Moduli del kernel - Boot del sistema
Moduli del kernel - Boot del sistema
 
LTSP
LTSPLTSP
LTSP
 
GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
 
ArduinoDay17 - Creazione di un piccolo supercomputer con Raspberry PI per cal...
ArduinoDay17 - Creazione di un piccolo supercomputer con Raspberry PI per cal...ArduinoDay17 - Creazione di un piccolo supercomputer con Raspberry PI per cal...
ArduinoDay17 - Creazione di un piccolo supercomputer con Raspberry PI per cal...
 
APT per RPM
APT per RPMAPT per RPM
APT per RPM
 
3rd 3DDRESD: BSS
3rd 3DDRESD: BSS3rd 3DDRESD: BSS
3rd 3DDRESD: BSS
 
DHow2 - L5
DHow2 - L5DHow2 - L5
DHow2 - L5
 
Open Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspOpen Source Parallel Computing ltcsp
Open Source Parallel Computing ltcsp
 
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxAmministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
 
LUG - Ricompilazione kernel
LUG - Ricompilazione kernelLUG - Ricompilazione kernel
LUG - Ricompilazione kernel
 
Sistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente LinuxSistemi di virtualizzazione in ambiente Linux
Sistemi di virtualizzazione in ambiente Linux
 
Hardware Libero - Linux Day 2007
Hardware Libero - Linux Day 2007Hardware Libero - Linux Day 2007
Hardware Libero - Linux Day 2007
 
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
 
Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)Il dual boot scolastico perfetto (2012)
Il dual boot scolastico perfetto (2012)
 
Linux & Open Source : Lezione Tre
Linux & Open Source : Lezione TreLinux & Open Source : Lezione Tre
Linux & Open Source : Lezione Tre
 

PIT2012: Workshop@UniNA - Compilazione del Kernel Linux

  • 1. 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
  • 2. 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
  • 3. 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
  • 4. 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
  • 6. 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 ^_^
  • 7. 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: x Ramo di sviluppo: y Versioni per ramo di sviluppo: z
  • 8. 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 *.tar a questo punto si può entrare nella direcotry creata: root@host:/# cd linux-3.3.2 root@host:/linux-3.3.2#
  • 9. 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)
  • 10. Kernel Linux: make menuconfig UNO DEI CASI D'USO: make menuconfig
  • 11. 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 --->
  • 12. [*] 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 :)
  • 13. [*] 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 ^_^
  • 14. 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 --->
  • 15. 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
  • 16. [*] 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) --->
  • 17. 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
  • 18. 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 --->
  • 19. 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 …
  • 20. 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
  • 21. 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 --->
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. Kernel Linux: the end … o quasi COPIA DEI FILE IMMAGINE DEL KERNEL cp arch/x86/boot/bzImage /boot/vmlinuz-3.3.2 MAPPATURA DEL SISTEMA cp System.map /boot/System.map-3.3.2 [CONSIGLIATA] CONFIGURAZIONE USATA cp .config /boot/config-3.3.2 MODIFICA DEL BOOTLOADER LILO, GRUB, GRUB2 … SI RIMANDA ALLE RISPETTIVE GUIDE (RTFM googleando googleando)
  • 28. 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
  • 29. 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 CARICATI lsmod L'output visualizza il nome del modulo, il numero di dipendenze e le dipendenze stesse. CARICAMENTO MODULI modprobe Carica, sfruttando la il contenuto di modules.dep, tutti i moduli eventualmente necessari per il corretto funzionamento di quello specificato GENERATORE DI DIPENDENZE depmod Si trova come script di avvio in tutte le distribuzioni e consente di generare automaticamente il file modules.dep (lista di dipendenze)
  • 30. Kernel Linux: opzioni addizionali Alcune opzioni addizionali: Algoritmo di scheduling: inserimento Il 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'ACPI apm=off → disattiva l'uso dell'APM display=IP:0 → trasmette il display su un sistema remoto expert → permette il partizionamento di un media staccabile e il montaggio di altri device mediacheck → verifica integrità iso noathlon → disattiva le ottimizzazioni per AMD Athlon noprobe → disattiva il rilevamento hardware nousb → disattiva il caricamento del modulo e il montaggio di periferiche usb resolution= → imposta la modalità video preferita
  • 31. Stiamo per finire ... Talk is cheap. Show me the code (Linus Torvalds)
  • 32. … 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://nalug.net info@nalug.net
  • 33. … 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 ;-)