Hallo zusammen!
Grundvoraussetzung für das Kompilieren eines neuen Linux Kernels in Debian, sind die Quellen. Man kann entweder auf die offiziellen Linux Kernel zurückgreifen, welche auf
Um auf einer aktuellen Debian Distro den Kernel von 2.6.32-5 auf x.38 oder x.39 zu heben geht man am besten so vor:
Kernel Quellen und notwendige Pakete installieren
Installiere zunächst die notwendigen Pakete, welche für das Bauen eines neuen Kernels notwendig sind. Das Paket "bin86" ist nur auf einer "i386" Maschine notwendig:
Laden der gewünschten Kernel Quellen:
Die Kernel Sources für das Release 2.6.38 und höher sind noch nicht im normalen Stable Archiv verfügbar, können aber derzeit über das "Testing" Archiv bereits geladen werden. Erweitere deine "/etc/apt/sources.list" dafür wie folgt mit der Zeile "deb
^^
Die Testing und backports Quellen musst du nach dem Download unbedingt wieder deaktivieren!!
Ansonsten gehts rund und beim nächsten Update werden ALLE Pakete getauscht! Nix gut - ist mir scho passiert
Der neue Kernel wurde nach /usr/src gespeichert:
Das Kernel-Quellverzeichnis sollte immer "/usr/src/linux" heißen und die Kernel-Quellen des aktuellen Kernels enthalten. Vor allem, wenn die Quellen mehrerer Kernel dort liegen achte darauf, dass die Verzeichnisse der Kernel-Quellen der einzelnen Kernel-Versionen eindeutig benannt sind (z.B. linux-source-2.6.32-5-686). Lege einen Symlink auf die Quellen des zukünftigen Kernels an:
Current Minimal Requirements
Die Datei "./Documentation/Changes" zeigt eine Liste, in welchen Versionen notwendige Programme mindestens vorliegen müssen, um Konflikte zu vermeiden. Diese Liste bedeutet aber nicht, dass diese Pakete auch zwingend benötigt werden:
Du kannst das Skript "./scripts/ver_linux" aufrufen, um die aktuellen Versionen der Pakete auf dem System abzurufen:
In der Regel sind hier keine Probleme zu erwarten, wenn du die Kernel Quellen aus dem Debian-Archiv "Stable" oder "Testing" verwendest. Wenn man Kernel-Quellen aus dem Debian-Archiv "Unstable" verwendet, sollte hier eine Weile mit dem Abgleichen der Programmversionen verbringen.
Kernel konfigurieren
Der Kernel kann vor dem Kompilieren mit sehr umfangreichen Konfigurationen seinen bestimmten Bedürfnissen konfiguriert werden. Am einfachsten ist es jedoch erst mal die aktuelle Konfiguration als Grundlage zu verwenden und ggf auf dieser Basis aufbauend, die weiterführenden Konfigurationen vorzunehmen. Kopiere hierfür die Konfigurationsdatei des aktuellen Kernels in das Verzeichnis "/usr/src/linux" und benenne sie ".config". Die aktuelle Kernelkonfiguration findest du in »/boot« und heißt in meinem Fall "config-2.6.32-5-686". Sie trägt die Versionsnummer des aktuellen Kernels im Namen:
Starte nun einen Konfigurationshelfer wie z.B. "make menuconfig". Hier wird ein Konfigurationsinterface aufgerufen, welches die Möglichkeit gibt, den Kernel neu zu konfigurieren:
Du kannst im Konfigurationseditor mit der Space-Taste eine Option an- oder abwählen ([ ] → abgewählt;
[*] → angewählt) oder als Modul auswählen ([M]); mit der ?-Taste die Hilfe dazu einblenden und mit der /-Taste, gefolgt vom Suchstring nach bestimmten Optionen suchen.
Um die aktuelle Konfiguration in den Editor zu laden, wähle die Option "load an alternative configuration file" und wähle die Konfigurationsdatei ".config", welche du eben schon in das Quellverzeichnis des zu kompilierenden Kernels kopiert hast.
Wenn die Konfiguration abgeschlossen ist, bestätige den Konfigurationseditor mit "Exit" und bestätige ebenfalls das Speichern der neuen Konfiguration.
In diesem Zusammenhang ist es meist sinnvoll den neuen Kernel für dein System zu optimieren. Normal werden Systeme erst mal mit einem pre-compiled Kernel installiert. Dieser enthält Hardware Support für Hardware die du niemals haben wirst und Sprachpakete für Sprachen, die du nie benötigst. Du kannst jetzt deinen neuen Kernel eine Diät verpassen und alles was du nicht brauchst raus werfen. Wenn du dir aber nicht sicher bist, lass es wie es ist. Dieser Schritt ist rein kosmetisch, beeinflusst nur die Performance etwas positiv.
Kernel und Debian Paket bauen
Das Paket "kernel-package" bringt das Programm "make-kpkg" mit, welches unter Debian anstelle der Linux üblichen Kommandos "make menuconfig; make dep; make bzImage; make modules" verwendet werden kann. "make-kpkg" bedient nun das Debian Paketmanagement (dpkg) adäquat und kompiliert den neuen Kernel, erzeugt je nach verwendeter Optionen ein über das Paketmanagement installierbares deb-Paket, welches neben dem Kernel auch gleich die Initial-RAM-Disk enthält, erteilt Revisionsnummern für das Paket-Management etc.
Führe aber zuerst das Kommando "make-kpkg clean" aus, um die Verzeichnishirachie der Kernel-Quellen aufzuräumen und die "kernel -package" Parameter zurückzusetzen. Dadurch wird zwar eine vollständige Neukompilierung des Kernels veranlasst, was je nach inkludierter Optionen und abhängig von der Leistungsfähigkeit des Rechners ca. eine Stunde bis hin zu mehreren Stunden dauern kann aber zB bei der Angabe einer neuen Kernelrevision notwendig sein wird:
Anschließend kompiliere den Kernel, baue das Debian Paket und erstelle zugleich die Initial-Ramdisk:
Die Optionen "--rootcmd" und "fakeroot" sind nur notwendig, wenn der User, welcher das Kommando ausführt nicht "root" ist.
Die Option "kernel_image" ein Debian Paket mit dem Linux-Kernel, der aus dem Quellcode übersetzt wird und aller konfigurierten Module.
Die Option "--revision deine-version.1" erzeugt eine Revisionsnummer (deine-version.1) für das Debian Paket und wird eigentlich nur vom Paket-Management verwendet.
Die Option "--initrd" ruft alle zusätzlichen Aktionen auf, welche notwendig sind, eine passende Init-RAM-Disk zu erzeugen.
Das fertige Paket liegt anschließend in "/usr/src" und kann mit dem Befehl "dpkg -i [Paketname].deb" installiert werden:
An dieser Stelle wird automatisch "depmod" aufgerufen, was die Modulliste aktualisiert. Ferner wird die Initial Ramdisk automatisch erstellt ("mkinitramfs-kpkg") und der Bootloader Grub2 wird aktualisiert. Beim nächsten reboot, sollte dein System automatisch mit dem neuen Kernel starten.
Viel Spaß!
Grundvoraussetzung für das Kompilieren eines neuen Linux Kernels in Debian, sind die Quellen. Man kann entweder auf die offiziellen Linux Kernel zurückgreifen, welche auf
Sie müssen registriert sein, um Links zu sehen.
heruntergeladen werden können, oder die für Debian angepassten Quellen im Online Repository. In der Debian Variante sind in der Regel bereits einige an die Distribution angepassten Patches enthalten, so dass man auf diese zurückgreifen sollte, sobald diese Quellen verfügbar sind.Um auf einer aktuellen Debian Distro den Kernel von 2.6.32-5 auf x.38 oder x.39 zu heben geht man am besten so vor:
Kernel Quellen und notwendige Pakete installieren
Installiere zunächst die notwendigen Pakete, welche für das Bauen eines neuen Kernels notwendig sind. Das Paket "bin86" ist nur auf einer "i386" Maschine notwendig:
Code:
[B]# aptitude install gcc make libc6-dev binutils gawk build-essential bzip2 fakeroot initramfs-tools kernel-package libncurses5-dev[/B]
Code:
[B]# aptitude install linux-source-2.6.38[/B]
Sie müssen registriert sein, um Links zu sehen.
testing main contrib non-free" und führe ein "aptitude update" aus:
Code:
[B]/etc/apt/sources.list[/B]
# deb cdrom:[Debian GNU/Linux 6.0.2.1 _Squeeze_ - Official i386 NETINST Binary-1 20110628-13:01]/ squeeze main
# deb cdrom:[Debian GNU/Linux 6.0.2.1 _Squeeze_ - Official i386 NETINST Binary-1 20110628-13:01]/ squeeze main
deb http://ftp.de.debian.org/debian/ squeeze main
deb-src http://ftp.de.debian.org/debian/ squeeze main
deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main
# squeeze-updates, previously known as 'volatile'
deb http://ftp.de.debian.org/debian/ squeeze-updates main
deb-src http://ftp.de.debian.org/debian/ squeeze-updates main
#- - - - -
# neuer Kernel
# hat fuer 2.6.38 gerade nicht funktioniert
deb http://ftp.debian.org/debian/ testing main contrib non-free
# funktioniert fuer 2.6.38/39
deb http://backports.debian.org/debian-backports squeeze-backports main
#
# Fuer Firmware usw.
# Debian Squeeze
deb http://ftp.de.debian.org/debian/ squeeze main non-free contrib
deb-src http://ftp.de.debian.org/debian/ squeeze main non-free contrib
#
# Debian Squeeze Non-US
deb http://non-us.debian.org/debian-non-US squeeze/non-US main contrib non-free
deb-src http://non-us.debian.org/debian-non-US squeeze/non-US main contrib non-free
#
# Debian Squeeze Security
deb http://security.debian.org/ squeeze/updates main contrib non-free
# - - - -
Die Testing und backports Quellen musst du nach dem Download unbedingt wieder deaktivieren!!
Ansonsten gehts rund und beim nächsten Update werden ALLE Pakete getauscht! Nix gut - ist mir scho passiert

Der neue Kernel wurde nach /usr/src gespeichert:
Code:
[B]# cd /usr/src
/usr/src # tar -xvjf linux-source-2.6.38.tar.bz2[/B]
Code:
[B]/usr/src # ln -s linux-source-2.6.38 linux[/B]
Wechsel anschließend in das Verzeichnis "/usr/src/linux"
[B]/usr/src # cd linux[/B]
Current Minimal Requirements
Die Datei "./Documentation/Changes" zeigt eine Liste, in welchen Versionen notwendige Programme mindestens vorliegen müssen, um Konflikte zu vermeiden. Diese Liste bedeutet aber nicht, dass diese Pakete auch zwingend benötigt werden:
Code:
[B]/usr/src/linux/Documentation/Changes[/B]
Current Minimal Requirements
======================
Upgrade to at *least* these software revisions before thinking you've
encountered a bug! If you're unsure what version you're currently
running, the suggested command should tell you.
Again, keep in mind that this list assumes you are already
functionally running a Linux 2.4 kernel. Also, not all tools are
necessary on all systems; obviously, if you don't have any ISDN
hardware, for example, you probably needn't concern yourself with
isdn4k-utils.
o Gnu C 3.2 # gcc --version
o Gnu make 3.80 # make --version
o binutils 2.12 # ld -v
o util-linux 2.10o # fdformat --version
o module-init-tools 0.9.10 # depmod -V
o e2fsprogs 1.41.4 # e2fsck -V
o jfsutils 1.1.3 # fsck.jfs -V
o reiserfsprogs 3.6.3 # reiserfsck -V 2>&1|grep reiserfsprogs
o xfsprogs 2.6.0 # xfs_db -V
o squashfs-tools 4.0 # mksquashfs -version
o btrfs-progs 0.18 # btrfsck
o pcmciautils 004 # pccardctl -V
o quota-tools 3.09 # quota -V
o PPP 2.4.0 # pppd --version
o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version
o nfs-utils 1.0.5 # showmount --version
o procps 3.2.0 # ps --version
o oprofile 0.9 # oprofiled --version
o udev 081 # udevinfo -V
o grub 0.93 # grub --version
o mcelog 0.6
o iptables 1.4.2 # iptables -V
Code:
[B]/usr/src/linux# ./scripts/ver_linux [/B]
If some fields are empty or look unusual you may have an old version.
Compare to the current minimal requirements in Documentation/Changes.
Linux debian-6-1 2.6.32-5-686 #1 SMP Wed Jan 12 04:01:41 UTC 2011 i686 GNU/Linux
Gnu C 4.4.5
Gnu make 3.81
binutils 2.20.1
util-linux 2.17.2
mount support
module-init-tools 3.12
e2fsprogs 1.41.12
Linux C Library 2.11.2
Dynamic linker (ldd) 2.11.2
Procps 3.2.8
Net-tools 1.60
Kbd 1.15.2
Sh-utils 8.5
Modules Loaded vmblock vsock vmmemctl vmhgfs pvscsi acpiphp loop snd_ens1371 gameport snd_rawmidi snd_seq_device snd_ac97_codec ac97_bus snd_pcm evdev snd_timer snd soundcore parport_pc parport psmouse serio_raw shpchp snd_page_alloc i2c_piix4 pcspkr vmci pci_hotplug i2c_core button container processor ac ext3 jbd mbcache sg sr_mod cdrom ata_generic sd_mod crc_t10dif pcnet32 vmxnet ata_piix mptspi uhci_hcd floppy libata ehci_hcd mptscsih mptbase scsi_transport_spi mii usbcore nls_base scsi_mod thermal thermal_sys
Kernel konfigurieren
Der Kernel kann vor dem Kompilieren mit sehr umfangreichen Konfigurationen seinen bestimmten Bedürfnissen konfiguriert werden. Am einfachsten ist es jedoch erst mal die aktuelle Konfiguration als Grundlage zu verwenden und ggf auf dieser Basis aufbauend, die weiterführenden Konfigurationen vorzunehmen. Kopiere hierfür die Konfigurationsdatei des aktuellen Kernels in das Verzeichnis "/usr/src/linux" und benenne sie ".config". Die aktuelle Kernelkonfiguration findest du in »/boot« und heißt in meinem Fall "config-2.6.32-5-686". Sie trägt die Versionsnummer des aktuellen Kernels im Namen:
Code:
[B]/usr/src/linux # cp /boot/config-$(uname -r) .config[/B]
Code:
[B]/usr/src/linux # make menuconfig[/B]
[*] → angewählt) oder als Modul auswählen ([M]); mit der ?-Taste die Hilfe dazu einblenden und mit der /-Taste, gefolgt vom Suchstring nach bestimmten Optionen suchen.
Um die aktuelle Konfiguration in den Editor zu laden, wähle die Option "load an alternative configuration file" und wähle die Konfigurationsdatei ".config", welche du eben schon in das Quellverzeichnis des zu kompilierenden Kernels kopiert hast.
Wenn die Konfiguration abgeschlossen ist, bestätige den Konfigurationseditor mit "Exit" und bestätige ebenfalls das Speichern der neuen Konfiguration.
In diesem Zusammenhang ist es meist sinnvoll den neuen Kernel für dein System zu optimieren. Normal werden Systeme erst mal mit einem pre-compiled Kernel installiert. Dieser enthält Hardware Support für Hardware die du niemals haben wirst und Sprachpakete für Sprachen, die du nie benötigst. Du kannst jetzt deinen neuen Kernel eine Diät verpassen und alles was du nicht brauchst raus werfen. Wenn du dir aber nicht sicher bist, lass es wie es ist. Dieser Schritt ist rein kosmetisch, beeinflusst nur die Performance etwas positiv.
Kernel und Debian Paket bauen
Das Paket "kernel-package" bringt das Programm "make-kpkg" mit, welches unter Debian anstelle der Linux üblichen Kommandos "make menuconfig; make dep; make bzImage; make modules" verwendet werden kann. "make-kpkg" bedient nun das Debian Paketmanagement (dpkg) adäquat und kompiliert den neuen Kernel, erzeugt je nach verwendeter Optionen ein über das Paketmanagement installierbares deb-Paket, welches neben dem Kernel auch gleich die Initial-RAM-Disk enthält, erteilt Revisionsnummern für das Paket-Management etc.
Führe aber zuerst das Kommando "make-kpkg clean" aus, um die Verzeichnishirachie der Kernel-Quellen aufzuräumen und die "kernel -package" Parameter zurückzusetzen. Dadurch wird zwar eine vollständige Neukompilierung des Kernels veranlasst, was je nach inkludierter Optionen und abhängig von der Leistungsfähigkeit des Rechners ca. eine Stunde bis hin zu mehreren Stunden dauern kann aber zB bei der Angabe einer neuen Kernelrevision notwendig sein wird:
Code:
[B]/usr/src/linux # make-kpkg clean[/B]
Code:
[B]/usr/src/linux # make-kpkg --rootcmd fakeroot kernel_image --revision deine-version.1 --initrd[/B]
Die Option "kernel_image" ein Debian Paket mit dem Linux-Kernel, der aus dem Quellcode übersetzt wird und aller konfigurierten Module.
Die Option "--revision deine-version.1" erzeugt eine Revisionsnummer (deine-version.1) für das Debian Paket und wird eigentlich nur vom Paket-Management verwendet.
Die Option "--initrd" ruft alle zusätzlichen Aktionen auf, welche notwendig sind, eine passende Init-RAM-Disk zu erzeugen.
Das fertige Paket liegt anschließend in "/usr/src" und kann mit dem Befehl "dpkg -i [Paketname].deb" installiert werden:
Code:
[B]# dpkg -i [Paketname].deb[/B]
Code:
[B]# reboot[/B]
Zuletzt bearbeitet: