際際滷

際際滷Share a Scribd company logo
www.lugroma3.org




               (Ri)Compilazione
                   del Kernel



Alessandro Manfredi
Il kernel, questo sconosciuto
I sottosistemi principali
E se volessi darci un'occhiata ?
   SCI / PM -> /usr/src/linux/kernel
   IPC -> /usr/src/linux/ipc
   Arch dependent code -> /usr/src/linux/arch
   MM -> /usr/src/linux/mm
   VFS & FS -> /usr/src/linux/fs
   Network stack -> /usr/src/linux/net
   DD -> /usr/src/linux/drivers *
   BSP (Board Support Package ) -> /usr/src/linux/arch
(Ri)Compilazione : i sorgenti
 Tramite packet manager
 Scaricandoli da www.kernel.org

 Posti in /usr/src/linux-<versione>-<release>
  /usr/src/linux -> /usr/src/linux-<versione>-<release>

 Per consuetudine
  # chown -R root:src /usr/src/
  # chmod -R g+w /usr/src/*
  # adduser <you> src
Configurazione iniziale
 Se si vuole partire dalla configurazione attuale del kernel si
  copi il file di configurazione attuale ( /boot/config<version> )
  in /usr/src/linux/.config
 Possono essere necessari i pacchetti
   fakeroot e libncurses5-dev

 Si accede all'interfaccia di configurazione tramite
          [you@/usr/src/linux/] # make menuconfig

 !!! Se il kernel che ci si appresta a configurare 竪 di una
  versione LEGGERMENTE diversa rispetto a quella per la
  quale 竪 scritto il config si usi prima # make oldconfig
LUG - Ricompilazione kernel
Un kernel 'snello'
 I kernel standard contengono il supporto per consentire il
  funzionamento del maggior numero di piattaforme

 Tutto e solo il supporto per il proprio hardware ?
 Device drivers check pages
                                   es. http://kmuto.jp/debian/hcl/
      ( il risultato 竪 affidabile se la Device Map 竪 la stessa )
(Ri)Compilazione
 Standard :
  # make && make modules_install
   E per installarlo ?
   Il bootloader deve sapere quale kernel caricare


 Debian way:
  # fakeroot make-kpkg --append-to-version
    -nomepersonalizzato --revision=1 kernel_image
     Crea un paccketto kernel-<versione>-nomepersonalizzato.<arch>.deb
     Pu嘆 essere installato con # dpkg -i kernel-<versione>-...etc.etc.
     Se si usa LILO come bootloader va aggiornato il MBR # lilo -v
     Se non 竪 la prima volta, prima di tutto # make-kpkg clean
E I moduli ?
 lsmod
 modprobe / insmod
 rmmod

Per caricare moduli all'avvio ?
 /etc/modules
 /etc/modules.autoload.d/kernel-<version>
initrd || !initrd ?
 Risposta breve :      !initrd
 Risposta meno breve :
L'initial RAM Disk 竪 un filesystem minimale temporaneo montato al
   boot che contiene drivers ed eseguibili (es. Insmod) necessari al
   mount del filesystem radice vero e proprio. Una volta montato il
   filesystem radice reale, viene smontato l'initrd e liberata la
   memoria occupata. In molti sistemi embedded l'initrd 竪 proprio il
   filesystem radice. Nei sistemi di uso comune l'uso dell'initrd
   permette di non compilare all'interno del kernel tutti i supporti
   per tutti i possibili tipi di filesystem. Se il supporto per il
   filesystem radice 竪 incluso nel kernel, non occorre
   necessariamente un initrd.
KSplice
 Applicare patch al kernel senza bisogno di riavviare il sistema
    automatizzato solo se le patch non introducono
     cambiamenti semantici nelle strutture dati ( es. 84% delle
     patch di sicurezza da maggio 2005 a dicembre 2007 )
    Implementato (al momento) solo per x86-32 e x86-64
    Solo per kernel 2.6.x
    Testato su kernel da 2.6.8 a 2.6.25,
      su distro Debian, Ubuntu, RHEL, Gentoo.

 Pu嘆 essere pi湛 pericoloso che utile ?
Questions ?
/(and Answers)?/
Online References
www.kernel.org

Kerneltrap
                                                       http://kerneltrap.org/
Wikipedia
                    http://en.wikipedia.org/wiki/Kernel_(computer_science)
Anatomy of the Linux kernel
             http://www.ibm.com/developerworks/linux/library/l-linux-kernel/
Debian Kernel Howto
             http://guide.debianizzati.org/index.php/Debian_Kernel_Howto
Linux initial RAM disk (initrd) overview
               http://www.ibm.com/developerworks/linux/library/l-initrd.html
Debian device driver check page
                                                 http://kmuto.jp/debian/hcl/

More Related Content

LUG - Ricompilazione kernel

  • 1. www.lugroma3.org (Ri)Compilazione del Kernel Alessandro Manfredi
  • 2. Il kernel, questo sconosciuto
  • 4. E se volessi darci un'occhiata ? SCI / PM -> /usr/src/linux/kernel IPC -> /usr/src/linux/ipc Arch dependent code -> /usr/src/linux/arch MM -> /usr/src/linux/mm VFS & FS -> /usr/src/linux/fs Network stack -> /usr/src/linux/net DD -> /usr/src/linux/drivers * BSP (Board Support Package ) -> /usr/src/linux/arch
  • 5. (Ri)Compilazione : i sorgenti Tramite packet manager Scaricandoli da www.kernel.org Posti in /usr/src/linux-<versione>-<release> /usr/src/linux -> /usr/src/linux-<versione>-<release> Per consuetudine # chown -R root:src /usr/src/ # chmod -R g+w /usr/src/* # adduser <you> src
  • 6. Configurazione iniziale Se si vuole partire dalla configurazione attuale del kernel si copi il file di configurazione attuale ( /boot/config<version> ) in /usr/src/linux/.config Possono essere necessari i pacchetti fakeroot e libncurses5-dev Si accede all'interfaccia di configurazione tramite [you@/usr/src/linux/] # make menuconfig !!! Se il kernel che ci si appresta a configurare 竪 di una versione LEGGERMENTE diversa rispetto a quella per la quale 竪 scritto il config si usi prima # make oldconfig
  • 8. Un kernel 'snello' I kernel standard contengono il supporto per consentire il funzionamento del maggior numero di piattaforme Tutto e solo il supporto per il proprio hardware ? Device drivers check pages es. http://kmuto.jp/debian/hcl/ ( il risultato 竪 affidabile se la Device Map 竪 la stessa )
  • 9. (Ri)Compilazione Standard : # make && make modules_install E per installarlo ? Il bootloader deve sapere quale kernel caricare Debian way: # fakeroot make-kpkg --append-to-version -nomepersonalizzato --revision=1 kernel_image Crea un paccketto kernel-<versione>-nomepersonalizzato.<arch>.deb Pu嘆 essere installato con # dpkg -i kernel-<versione>-...etc.etc. Se si usa LILO come bootloader va aggiornato il MBR # lilo -v Se non 竪 la prima volta, prima di tutto # make-kpkg clean
  • 10. E I moduli ? lsmod modprobe / insmod rmmod Per caricare moduli all'avvio ? /etc/modules /etc/modules.autoload.d/kernel-<version>
  • 11. initrd || !initrd ? Risposta breve : !initrd Risposta meno breve : L'initial RAM Disk 竪 un filesystem minimale temporaneo montato al boot che contiene drivers ed eseguibili (es. Insmod) necessari al mount del filesystem radice vero e proprio. Una volta montato il filesystem radice reale, viene smontato l'initrd e liberata la memoria occupata. In molti sistemi embedded l'initrd 竪 proprio il filesystem radice. Nei sistemi di uso comune l'uso dell'initrd permette di non compilare all'interno del kernel tutti i supporti per tutti i possibili tipi di filesystem. Se il supporto per il filesystem radice 竪 incluso nel kernel, non occorre necessariamente un initrd.
  • 12. KSplice Applicare patch al kernel senza bisogno di riavviare il sistema automatizzato solo se le patch non introducono cambiamenti semantici nelle strutture dati ( es. 84% delle patch di sicurezza da maggio 2005 a dicembre 2007 ) Implementato (al momento) solo per x86-32 e x86-64 Solo per kernel 2.6.x Testato su kernel da 2.6.8 a 2.6.25, su distro Debian, Ubuntu, RHEL, Gentoo. Pu嘆 essere pi湛 pericoloso che utile ?
  • 14. Online References www.kernel.org Kerneltrap http://kerneltrap.org/ Wikipedia http://en.wikipedia.org/wiki/Kernel_(computer_science) Anatomy of the Linux kernel http://www.ibm.com/developerworks/linux/library/l-linux-kernel/ Debian Kernel Howto http://guide.debianizzati.org/index.php/Debian_Kernel_Howto Linux initial RAM disk (initrd) overview http://www.ibm.com/developerworks/linux/library/l-initrd.html Debian device driver check page http://kmuto.jp/debian/hcl/