Linux Day 2004, 27 Novembre 2004 Compilazione del Kernel Linux 2.6.x Relatore : Ermanno Novali presentazione creata con OpenOffice.org 1.1.3 Slackware 10.0 kernel Linux 2.6.9
Compilazione del Kernel Linux 2.6.x Introduzione al kernel,perche' compilarlo e requisiti Compilazione del kernel Gestione del kernel e dei moduli e tool di sistema
Compilazione del Kernel Linux 2.6.x Gnu/Linux? Linux? Progetto Gnu, 1984 Kernel Linux, 1991 Gnu/Linux Os
Introduzione al kernel,perche' compilarlo e requisiti Versioni e numerazione kernel 2.6.4 ramo principale progressivo numero pari : kernel di produzione numero dispari : kernel di sviluppo
Uname informazioni sul sistema uname -r (versione kernel) -cfr variabili script 'uname -r' - uname -a (tutte le informazioni)
Introduzione al kernel,perche' compilarlo e requisiti Di cosa si occupa il kernel?
da Linux Pro
User mode e Kernel mode 1 da www.bertolinux.com
Architetture supportate 32-bit x86 PCs (386 o sup.) Compaq Alpha AXP, Sun SPARC and UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM, Hitachi SuperH, IBM S/390, MIPS, HP PA-RISC, Intel IA-64, DEC VAX, AMD x86-64 CRIS
Overview funzioni del kernel Processore e features principali Tipo processore Smp Preemptible Bus di sistema PCI PCMCIA ISA etc... Power management (Acpi/Apm) Kmod e caricamento moduli
Overview funzioni del kernel File Systems principali supportati Ext2 Ext3 ReiserFs Jfs Xfs Cd-rom Fs Dos/Fat/NTFS Fs vari ( Apple -BeOs - Amiga) Fs virtuali : /proc - /dev Network fs : NFS SMB - AFS Acl e Quote
Overview funzioni del kernel Device Drivers Ata/Atapi Scsi Raid / Lvm IEEE 1394 Usb - Parallello/seriale Multimedia (Video -Audio)
Overview funzioni del kernel Networking Hw (eth wan -pcmcia irda bluetooth - wlan) PPP e sue opzioni TCP/IP e opzioni IP Netfilter --> Iptables in user space(packet filtering)
Perche' ricompilare? Esigenza di nuovo supporto Hw Bug scoperti nei kernel precedenti Nuove funzionalita' da testare Configurazione particolare (no moduli etc...) Differenze tra i kernel delle distribuzioni gnu/linux e il kernel vanilla
Reperire i sorgenti del kernel "vanilla" www.kernel.org Scompattare la tarball e applicare una patch tar xzvf ( xvjf ) tarball-kernel ( in /usr/src/linux ) symlink alla dir sorgenti kernel in uso (compilazione del software punta di default alla dir /usr/src/linux per sorgenti) patch -p0 < nome-file-patch
Tool necessari Gnu C 2.95.3 # gcc --version Gnu make 3.79.1 # make --version binutils 2.12 # ld -v util-linux 2.10o # fdformat --version module-init-tools 0.9.10 # depmod -V e2fsprogs 1.29 # tune2fs jfsutils 1.1.3 # fsck.jfs -V reiserfsprogs 3.6.3 # reiserfsck -V 2>&1 grep reiserfsprogs xfsprogs 2.6.0 # xfs_db -V pcmcia-cs 3.1.21 # cardmgr -V quota-tools 3.09 # quota -V PPP 2.4.0 # pppd --version isdn4k-utils 3.1pre1 # isdnctrl 2>&1 grep version nfs-utils 1.0.5 # showmount --version procps 3.2.0 # ps --version oprofile 0.5.3 # oprofiled --version Opp. installazione pacchetti Devel (RH Fedora Mandrake etc..) Debian kernel-package per i tool specifici
Compilazione del kernel
Backup del sistema Ricompilazione medesima versione kernel modificare EXTRAVERSION con termine a scelta
Compilazione del kernel # make mrproper prepara un ambiente pulito (rimuove file generati,.config, e file di backup) att.ne RIMUOVE.CONFIG # make clean come sopra ma mantiene il.config
Compilazione del kernel Necessaria conoscenza approfondita dell'hw # lspci -v (-vv)
Compilazione del kernel Per periferiche usb informazioni: # lsusb -v Leggere i docs in /usr/src/linux/documentation in particolare ~/Documentation/Changes per le novita' e i requisiti minimi per la compilazione
Configurazione Monolitico o modulare? cosa includere nel kernel cosa compilare come modulo
Configurazione.config Analisi del.config cat.config grep stringa y m not set commenti Ripristinare precedente.config utilizzare.config kernel precedente; /proc/config.gz e /proc/config_built_with # make oldconfig
Configurazione Compilazione minima Supporto processore Supporto Bus necessari (Pci etc...) Supporto Atapi / Scsi per hd di boot (o per periferica di boot richiesta) Supporto keyboard / mouse Fs (! fs del device di boot! ) --> opp. initrd!
Scelta dell'interfaccia per la compilazione make menuconfig (ncurses) make xconfig (tcl/tk) make gconfig (gtk)
Configurazione tramite menuconfig utilizzare l'help
Esempio pratico di compilazione
Per chi ha fretta... # make (bzimage & modules) # make install (installa il kernel e lancia lilo)
# make bzimage crea immagine compressa di vmlinuz # make help tutte opzioni possibili # make modules crea i moduli # make modules_install copia i moduli in /usr/lib/modules/ uname -r
The Debian way script post-configurazione per operazioni di make make-kpkg prepara un pacchetto.deb che installato con dpkg -i Compila il kernel Copia e linka + entry in Lilo Creazione di Floppy di Boot
Gestione del kernel e dei moduli e tool di sistema Copiare il kernel per il primo boot # cp /usr/src/linux/arch/i386/boot/bzimage /boot/vmlinuz sostituire i386 con architettura richiesta # cp /usr/src/linux/system.map /boot/system.map eventuale initrd inserita nel bootloader
Configurare bootloader Lilo/Grub Lilo the Linux Loader # vim /etc/lilo.conf aggiungere la nuova immagine del kernel e opzioni necessarie # lilo -v lanciare SEMPRE lilo! --->
# By default, boot the first entry. default 0 # Boot automatically after 30 secs. timeout 30 # Fallback to the second entry. fallback 1 # For booting GNU/Linux title GNU/Linux root (hd0,0) kernel /boot/vmlinuz ro root=/dev/hda1 initrd /initrd-2.4.9-21.img Grub
In breve... nella dir dei sorgenti del kernel (p.es. /usr/src/linux) lanciare la configurazione (#make menuconfig, make xconfig o altri) terminata la configurazione lanciare la compilazione del kernel con # make bzimage compilare i moduli con #make modules e installarli con #make modules_install copiare l'immagine del kernel compilata in arch/i386(o altra architettura)/ boot/bzimage e la System.map in /boot inserire la nuova entry nel bootloader (Lilo, Grub etc...)
Tool e operazioni utili # dmesg stampa a video il kernel ring buffer # tail -f /var/log/messages visualizza /var/log/messages (tail -f segue) in generale la dir /var/log
Tool e operazioni utili Il filesystem virtuale /proc Spazio per interagire con il kernel visualizzazione ( cat ) modifica (p.es. echo valore > /proc/[...] )
Gestione moduli # lsmod visualizza moduli caricati
Gestione moduli # modprobe (-r rimuove) nome_modulo carica moduli da /lib/module/ uname -r con relative dipendenze # insmod (-f forza) nome_modulo inserisce semplicemente modulo nel kernel # rmmod (-f forza) nome_modulo rimuove singolarmente modulo dal kernel # depmod (-a) genera modules.dep e aggiorna la mappatura dei moduli
Gestione moduli att.ne abilitare nel kernel!
Script di Avvio Avvio System-V maggioranza delle distro ---> serie di dir/script nella dir /etc/rc.d/ Avvio System-Bsd p.es. Slackware ---> script singolo per ogni runlevel
Per controllo moduli /etc/modules.conf (sostituisce il vecchio /etc/conf.modules) vd man modules.conf Per opzioni e script tramite modprobe /etc/modprobe.conf crea alias per modprobe carica moduli con particolari opzioni vd man modprobe.conf
Gestione ALSA dalla serie 2.6 Alsa inclusi nel kernel (sostituiscono OSS) # alsamixer regola volumi #alsactl store setta parametri #alsactl restore invocato al boot ricarica i parametri salvati
Links The Linux Kernel Archives www.kernel.org www.linuxhq.com www.pluto.linux.it
Links Debian Gnu/Linux www.debian.org Alessandro Rubini homepage http://www.linux.it/~rubini/ Google Linux www.google.it/linux
Domande? mumble mumble... Risposte!
Linus Torvalds, il padre di Linux :)
Grazie per l'attenzione www.bglug.it