Kernel kompilieren
Vorneweg
Einen eigenen Kernel bauen ist heutzutage meistens nicht mehr erforderlich. Die
Hardwareunterstützung der Standard-Kernel ist in der Regel gut genug -> Den
Kernel besser als Paket installieren bzw. updaten. Kernelpakete haben diese
Bezeichnung:
linux-image-<version>-<architektur> also z.B. linux-image-2.6.32-29-generic-pae
.
Ausgangssituation
Ein neuer Kernel soll gebaut werden, um die neuesten WLAN-Chipsätze ins System
zu integrieren. Das Basissystem ist ein Debian Lenny (Standardinstallation).
(Ist aber im Grund egal, da es für alle bekannten Linux-Distributionen
gleichermaßen funktioniert)
Vorbereitungen
Die Pakete gcc, initrd-tools bzw. initramfs-tools und libncurses5-dev müssen
installiert werden. libncurses5-dev ist nicht auf der CD 1 vorhanden
(problematisch, wenn noch kein Internetzugang vorhanden).
Bevor die ganze Aktion losgeht, empfiehlt es sich sehr, eine Sicherheitskopie
der menu.list zu machen, also z.B. mit
# cp /boot/grub/menu.list /boot/grub/menu.list.bak
Kernel konfigurieren, kompilieren und installieren
# make menuconfig # make bzImage # make modules # make modules_install # mv /usr/src/linux/arch/i386/boot/bzImage /boot
Führt der Reihe nach folgende Schritte aus: curses-based Auswahlmenü diverser Kernelmodule (mit "make xconfig" kriegt man eine grafische Oberfläche zum Klicken sofern X-Server vorhanden), Kernelimage generieren, Module kompilieren und installieren. Kernelimage an eine sinnvolle Stelle moven.
Vorsicht mit
# make (dist) clean # make mproper
Diese entfernen scheinbar überflüssige Dateien, aber auch Dateien wie /usr/src/linux/scripts/basic/fixdep Danach funktioniert der "make"-Befehl nicht mehr.
Ramdiskimage erzeugen
Achtung: Sehr distributionsspezifisch!
Neuere Debians:
# mkinitramfs -o /boot/initrd.img-<versionnr> <versionnr>
Ältere Debians:
# mkinitrd.yaird -o /boot/initrd.img-<versionnr> <versionnr>
Andere Distris:
# mkinitrd (--params)
Anmerkung zum Ramdisk-Image
Modulare Kernel brauchen ein Ramdisk-Image (initrd.img). Um das zu erzeugen, muss der Ordner /lib/modules/2.6.<version>/<kernelversion> vorhanden sein. Gibt es schon ein installiertes Debiankernelpaket, ist der Ordner nicht angelegt. In diesem Fall mit
# mkdir /lib/modules/2.6-<version>
den Ordner anlegen, reinwechseln und
# depmod -a
auführen.
Danach einen Symlink zur Kernelsource legen. Symlink zu Sourcen
# ln -s /usr/src/linux-<versionnr> /usr/src/linux
Neuen Kernel booten
Den neuen Kernel geg.falls noch in /boot/grub/menu.lst eintragen.
Den alten Kernel nicht wegschmeißen, bis der neue Kernel nicht mindestens
einmal erfolgreich gebootet hat !!!
Nachkontrollieren, ob der neue Kernel läuft:
# reboot # uname -a
Falls nach dem Reboot Probleme entstehen, die grub-Optionen beim Booten editieren oder mit einer Live-CD booten, /boot- oder /-Partition mounten (näheres dazu s. hier ) und das Backup der menu.list zurückkopieren.
Anmerkungen:
Problem: Selbst abschalten nach shutdown funktioniert nicht mehr (Notebook)
Lösung: Mit make menuconfig/xconfig in ACPI-Options:
ACPI Bios power-off disablen !
Kernelpackages bauen:
Nach dem make-menuconfig-Befehl
# make-kpkg clean # make-kpkg --rootcmd fake -mykernel --revision 1 kernel_image
Ergibt -> linux_<versionsnr.>-mykernel_1_i386.deb