Austrian Linux Forum

Kernel kompilieren

Kategorien: Linux How-Tos
3 Antworten
theEdge
theEdge am Montag, 6. Dezember 2004 um 20:27
Spätestens nach der Installation meine Bughunters benötigte ich einen SMP-fähigen Kernel, ich hab mir schließlich nicht umsonst einen P4 mit Hyperthreading gekauft und beim BH ist leider kein SMP eingebaut. Weiter unten gibts einen Schnelldurchlauf der ganzen Sache, für User, die ihre Kenntnisse lediglich auffrischen möchten, das Grunpinzip bereits verstanden haben. Dieses Beispiel bezieht sich auf den (derzeit, 25.09.2004) aktuellen Kernel 2.6.8.1 und den Bootmanager GRUB Also, Kernel kompilieren. [b][i:9bfa721212]1.[/i:9bfa721212] Kernel downloaden[/b] [code] user@localhost:/home/user$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.1.tar.bz2 [/code] Zuerst einmal, die Kernelsourcen downloaden eh klar. Das wird unter http://www.kernel.org gemacht. Hierbei ist darauf zu achten, dass man nicht etwa den changelog oder einen Patch suagt (wie's natürlich ich gleich mal machen musste *g*) sondern wirklich die sourcen saugt (F = Full source). Das Teil ist in etwa 30MB groß und benötigt mit ISDN ca. eine gute Stunde, mit ADSL gute 5 Minuten und ab 3Mbit aufwärts sollten die 1,5 Minuten keine große Verzögerung mehr darstellen. [b][i:9bfa721212]2.[/i:9bfa721212] Entpacken[/b] [code] mit Ark *g* [/code] Nachdem heruntergeladen wurde, befindet sich eine Archivdatei (hoffentlich) am angegebenen Ort. [u]Ab nun wird als Superuser weitergearbeitet![/u] Die Datei will nun nach /usr/src/ entpackt werden. Letztendlich sollte ein Verzeichnis /usr/src/linux-2.6.8.1 existieren... Um Programme zu befriedigen, die die Kernelsourcen im Standardpfad erwarten, legen wir einen Link: [code] root@localhost:/home/user$ ln -s /usr/src/linux /usr/src/linux-2.6.8.1 [/code] Um eventuell vorhandenen Müll zu entfernen, wechseln wir in das entpackte verzeichnis und räumen auf: [code] root@localhost:/home/user$ cd /usr/src/linux-2.6.8.1 root@localhost:/usr/src/linux-2.6.8.1$ make mrproper [/code] [b][i:9bfa721212]3.[/i:9bfa721212] Kernel konfigurieren[/b] [code] root@localhost:/usr/src/linux-2.6.8.1$ make xconfig [/code] Nun geht es daran, den Kernel so zu konfigurieren, wie wir es wollen. Dafür stehen uns mehrere Tools zur verfügung: make config - Zur Abhärtung: textbasierende konfiguration make xconfig - Zu empfehlen: konfigurieren mit grafischer Oberfläche make gconfig - gtk frontend make menuconfig - auch was gutes das auswählen der Module kann seine Zeit dauern und erfordert teilweise großes Wissen. Solltest du dich bei einem Modul nicht auskennen, lies einfach die Hilfe durch. Sollte dir unklar sein, was das Ganze bedeutet, is immer ein guter Tipp, die Voreinstellung unberührt zu lassen. Übrigens: Ein Häkchen bedeutet enabled, ein leeres Kästchen disabled und bei einem Punkt wird das ausgewählte Paket als Modul installiert. Zum schluss speichern und beenden... [b][i:9bfa721212]4.[/i:9bfa721212] Kompilieren[/b] [code] root@localhost:/usr/src/linux-2.6.8.1$ make [/code] Für 2.6er-Kernel reicht dieses eine Wort aus, 2.4er Kernel benötigen einen umfangreicheren Befehl: make dep bzImage modules modules_install System.map Das kompilieren kann nun einige Zeit dauern. Man richte sich daher etwas zu essen her oder nehme ausnahmsweise auch ein Buch zur Hand. Man kann dem Computer aber auch beim kompilieren zuschaun. Nicht sehr unterhaltsam aber auch ein Zeitvertreib ;) [b][i:9bfa721212]5.[/i:9bfa721212] Den neuen Kernel bootfähig machen[/b] [code] root@localhost:/usr/src/linux-2.6.8.1$ cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.8.1 root@localhost:/usr/src/linux-2.6.8.1$ cp System.map /boot/System.map-2.6.8.1 root@localhost:/usr/src/linux-2.6.8.1$ vi /boot/grub/menu.lst [/code] Mit dem ersten Befehl wird der Kernel an die richtige Stelle kopiert und mit dem zweiten die System.map kopiert. In der menu.lst findet sich die Konfiguration für den Bootmanager GRUB. Am Ende der Datei befinden sich die einträge der Betriebssysteme, wir legen einen neuen an und lassen den alten unberührt! Sollte der neue Kernel probleme haben, so können wir immer noch den alten booten. Ein Eintrag kann folgendermaßen aussehen: [code] title Debian GNU/Linux, kernel 2.6.8.1 root (hd0,2) kernel /boot/vmlinuz-2.6.8.1 root=/dev/hdb3 ro ramdisk_size=100000 lang=de apm=power-off hda=scsi hdb=scsi hdc=scsi hdd=scsi hde=scsi hdf=scsi hdg=scsi hdh=scsi nomce vga=0x317 savedefault boot [/code] wichtig beim kernel: der Pfad muss GENAU so lauten, wie der Kernel, den wir mit dem ersten Befehl verschoben haben! LiLo-User editieren übrigens die Datei /etc/lilo.conf und starten lilo neu mit lilo. [b][i:9bfa721212]6.[/i:9bfa721212] Neustart des Systems[/b] [code] root@localhost:/usr/src/linux-2.6.8.1$ reboot [/code] Zu guter letzt wird das System neu gestartet und im GRUB der richtige Eintrag ausgewählt (das ding mit dem Kernel 2.6.8.1 ;) ) Wenn alles gut gegangen ist, lädt der Kernel, das OS bootet und wir landen wieder auf der grafischen Oberfläche :)

Kommentare

theEdge
theEdge am Samstag, 25. September 2004 um 10:37

Nochmal im Schnelldurchlauf:

[b][i:218260cfd6]1.[/i:218260cfd6] Kernel downloaden[/b]
[code]
user@localhost:/home/user$ wget www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.1.tar.bz2
[/code]

[b][i:218260cfd6]2.[/i:218260cfd6] Entpacken, Standardpfad linken, Aufräumen[/b]
[code]
Entpacken mit Ark *g*
root@localhost:/home/user$ ln -s /usr/src/linux /usr/src/linux-2.6.8.1
root@localhost:/home/user$ cd /usr/src/linux-2.6.8.1
root@localhost:/usr/src/linux-2.6.8.1$ make mrproper
[/code]

[b][i:218260cfd6]3.[/i:218260cfd6] Kernel konfigurieren[/b]
[code]
root@localhost:/usr/src/linux-2.6.8.1$ make xconfig
[/code]


[b][i:218260cfd6]4.[/i:218260cfd6] Kompilieren[/b]
[code]
root@localhost:/usr/src/linux-2.6.8.1$ make
[/code]

[b][i:218260cfd6]5.[/i:218260cfd6] Den neuen Kernel bootfähig machen[/b]
[code]
root@localhost:/usr/src/linux-2.6.8.1$ cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.8.1
root@localhost:/usr/src/linux-2.6.8.1$ cp System.map /boot/System.map-2.6.8.1
root@localhost:/usr/src/linux-2.6.8.1$ vi /boot/grub/menu.lst
[/code]

Beispieleintrag im GRUB:
[code]
title Debian GNU/Linux, kernel 2.6.8.1
root (hd0,2)
kernel /boot/vmlinuz-2.6.8.1 root=/dev/hdb3 ro ramdisk_size=100000 lang=de apm=power-off hda=scsi hdb=scsi hdc=scsi hdd=scsi hde=scsi hdf=scsi hdg=scsi hdh=scsi nomce vga=0x317
savedefault
boot
[/code]

LiLo-User editieren die Datei /etc/lilo.conf und starten lilo neu mit lilo.

[b][i:218260cfd6]6.[/i:218260cfd6] Neustart des Systems[/b]
[code]
root@localhost:/usr/src/linux-2.6.8.1$ reboot
[/code]

greggae
greggae am Samstag, 25. September 2004 um 15:33

ganz in ordnung, ein paar kleinigkeiten:
ln -s quelle ziel
also ln -s linux-2.6.8.1 linux

line zum entpacken (für ark-verweigerer):
tar -jxvf kernel-source.tar.bz2

building the kernel the "debian-way":
www.desktop-linux.net/debkernel.htm
speziell der absatz bei build and install (mit make-kernelpkg).

theEdge
theEdge am Montag, 6. Dezember 2004 um 20:27

The Debian way, Zusammenfassung. Danke an desktop-linux.net, dieser Post ist quasi eine kurzgefasste, deutschsprachige "Sicherheitskopie" von www.desktop-linux.net/debkernel.htm respektive eien Ergänzung meines Tutorials

[b]Kernel Patchen[/b]


patch -p1 < /path/to/kernel/patch

[b]Kernel kompilieren[/b]

1. Aktuellen Kernel besorgen
a) etnweder [code]apt-cache search kernel-source | grep 2.6
apt-cache search kernel-source | grep 2.6[/code]
b) oder [code]Download von kernel.org[/code]

2. apt sollte die Sourcen nach /usr/src gespielt haben. Bei Variante b muss dies von Hand vorgenommen werden. Extrahiert muss in jedem Fall werden:
[code]
cd /usr/src
tar xvfj kernel-source-2.6.6.tar.bz2
[/code]

3. Den Link für den Standardpfad erstellen
[code]
rm linux # Wenn ein Link vorhanden ist
ln -s /usr/src/kernel-source-2.6.6 /usr/src/linux
[/code]

4. EXTRAVERSION setzen
Im Makefile von /usr/src/linux die Zeile oben hinzufügen (bzw. verändern)
[code]
EXTRAVERSION = -YYYYMMDD
[/code]

5. Kernel konfigurieren
[code]
make xconfig
[/code]
Hierbei auf den ausführenden User achten! Wenn unter einem anderen User als root gearbeitet wird, wird dieser, von der Konsole gestartet, nicht zum XServer des Users connecten können!
Speichern (.config) und schließen

6. Kernel kompilieren und "packen"
[code]
make-kpkg buildpackage -rev Custom.1 kernel_image
[/code]

7. Wenn ohne errors kompiliert wurde, dann installieren. Bei errors zu Punkt "kompilieren fehlgeschlagen" weiterspringen. Soll noch der nVidia-Treiber installiert werden, weiter zu Punk t "nVidia Treiber", ansonsten reboot und fertig :)
[code]
cd /usr/src
dpkg -i kernel-image-2.6.6_Custom.1_i386.deb
[/code]

8. Bootloader updaten
a) GRUB:
[code]
title Linux 2.6.6
root (hd0,5)
kernel (hd0,5)/boot/vmlinuz-2.6.6 root=/dev/hda1 ro vga=791
savedefault
boot
[/code]
b) LiLo
[code]
image=/boot/vmlinuz-2.6.6
label-Linux-2.6.6
root=/dev/hda6
vga=791
[/code]

[b]nVidia-Treiber[/b]

1. Den neuesten nVidia-Treiber herunterladen (www.nvidia.com links oben auf Treiber usw.)

2. Den Treiber abspeichern wo's beliebt und X beenden (Kommandozeile zb. init 3 oder je nachdem...) /zweite Sitzung ohne X aufmachen (zb Strg+Alt+F2)

3. In das Verzeichnis des nVidia-Treibers wechseln, NV eingeben und [tab] drücken (bzw. so viel vom Namen eingeben, bis die Auto-Vervollständigung greift)

4. X-Config verändern:
[code]
cd /etc/X11
cp XF86Config-4 XF86Config-4-orig
vi XF86Config-4
[/code]

In der Section "Module" folgende Zeile hinzufügen, bzw. Sicherstellen, dass sie vorhanden ist:
[code]Load "glx"[/code]

Folgende Zeilen entfernen, oder auskommentieren (#)
[code]Load "dri"
Load "GLcore"[/code]

In der "Graphics Device Section"
[code]Driver "nv"[/code] durch [code]Driver "nvidia"[/code] ersetzen.

5. Speichern, reboot, fertig :)

[b]Kompilieren fehlgeschlagen[/b]

Man kann jederzeit zurückspringen, bis zum make xconfig Punkt.
Zuvor muss jedoch der fehlgeschlagene Müll aufgeräumt werden: [code]make clean[/code] oder um die Kernel-defaults zu resetten: [code]make mrproper[/code] und dann wieder von vorne mit [code]make xconfig[/code] (Punkt 5))

[b]ALSA konfigurieren[/b]

Nach dem Boot des neuen Kernels muss ALSA konfiguriert werden: [code]alsaconf[/code]
ALSA erkennt automatisch die Soundkarte und updated die entsprechende /etc/modules damit die Kernelmodule beim Start gleich reingeladen werden. Weiters ist ALSA defaultmäßig gemutet, verändert werden kann dies wieder mit alsaconf oder GUIs wie kmix, gmix, ...

Sind die alsa-utils nicht installiert, können sie von www.alsa-project.org/ heruntergeladen und kompiliert (./configure, make und make install) werden, danach den obigen Instruktionen folgen.

Nicht vergessen: Alle User, die ALSA nutzen sollen, der Gruppe "audio" hinzufügen!