Debian GNU/Linux auf dem IBM Thinkpad R50p

« zurück (Vorbereitungen)Inhalt(X.Org) weiter »

Das Wichtigste zuerst: Der Kernel (inklusive benötigter Patches)

Übersicht

Vorbemerkung

Der Kernel stellt das Herz eines Betriebssystems dar, denn ohne ihn funktioniert gar nichts. Gerade deswegen ist bei der Auswahl des Kernels nicht unbedingt in erster Linie auf Aktualität, sondern lieber auf Stabilität zu achten. Auch macht die Verwendung der benötigten Kernel-Patches es einem unmöglich, den gerade aktuellsten Kernel einzusetzen, da diese meist zeitversetzt zu den Kernel-Veröffentlichungen erscheinen.

« zurück (Übersicht)

Kernel: suspend2 Kernel-Patch herunterladen

Bemerkung am Rande...

Zum Zeitpunkt der Erstellung dieses Dokumentes waren keine debian-Pakete für suspend2 verfügbar. Sollten diese verfügbar und auf den debian-Kernel angepasst sein, dürfte sich an der hier beschrieben Herangehensweise einiges vereinfachen. Zur Sicherheit zuerst einmal nach dem Paket (kernel-patch-suspend2 o.ä.) suchen und die Dokumentation dazu lesen.

Hinweis: Um den Hibernate-Modus unterstützen zu können wird eine genügend große Swap-Partition benötigt. Diese sollte ca. doppelt so groß wie der vorhandene Hauptspeicher (RAM) sein, da dessen Inhalt beim Wechsel in den Hibernate-Modus gesichert werden muss. Alternativ unterstützt suspend2 auch das Sichern in eine reguläre Datei (z. B. /my_hibernate_file.bin), worauf hier aber nicht weiter eingegangen wird.

Für die Suspend-Funktionalität ist das Patch Suspend 2 for Linux notwendig. Die letzte stabile Version ist herunterzuladen und legt somit die zu verwendende Version des Kernels fest.

Das Patch-Archiv mit dem Namen suspend2-x.y.z-for-2.6.a.b.tar.bz2 herunterladen und abspeichern. Die Buchstaben x, y und z stehen hierbei für die Version von suspend2 und 2.6.a.b für die Kernel-Version.

« zurück (Übersicht)

Kernel: Bitte einmal Linux mit Vanille-Geschmack (vanilla)

Linux-Kernel, die von Linux Torvalds verwaltet und keinerlei zusätzliche Patches enthalten, werden "vanilla" genannt (vgl.: flavour = Geschmacksrichtung).

Als nächstes muss ein Original-Linux-Kernel von dem Server ftp.de.kernel.org (deutscher Mirror), mit der gleichen Version wie vom suspend2-Patch gefordert, heruntergeladen werden. Der Kernel befindet sich auf dem FTP-Server in dem Verzeichnis pub/linux/kernel/v2.6/ und hat den Dateinamen linux-2.6.a.b.tar.bz2. Zusätzlich empfiehlt sich der Download der Signatur (gleicher Dateiname plus der Endungen .sign). Die Signatur kann mit Hilfe von GnuPG und dem öffentlichen PGP-Schlüssel der Linux Kernel Archives, erhältlich unter wwwkeys.pgp.net (search 0x517D0F0E) geprüft werden.

Für die Überprüfung gibt man in einem Konsolenfester folgendes Kommando ein:

$ gpg --verify linux-2.6.a.b.tar.bz2.sign linux-2.6.a.b.tar.bz2

Die Antwort muss unbedingt eine Zeile wie

gpg: Good signature from "Linux Kernel Archives Verification Key <ftpadmin@kernel.org>"

enthalten. Wenn stattdessen irgendetwas mit "BAD SIGNATURE" gemeldet wird heißt das, dass entweder das Kernel-Archiv oder die Signaturdatei fehlerhaft übertragen oder manipuliert worden sind. In einem solchen Fall sollte man den Download wiederholen und dabei einen anderen Mirror-Server verwenden.

Das heruntergeladene Archiv muss nun von root unter /usr/src entpackt werden und befindet sich anschließend in dem Verzeichnis /usr/src/linux-2.6.a.b.

« zurück (Übersicht)

Kernel: suspend2 Kernel-Patch anwenden

Das suspend2-Archiv muss nun ebenfalls in ein temporäres Verzeichnis entpackt werden, damit es angewendet werden kann. In diesem Fall wird davon ausgegangen, dass sich die suspend2-Dateien in dem Verzeichnis /var/tmp/suspend2-x.y.z-for-2.6.a.b befinden. Um den Kernel zu patchen, muss man in das Kernel-Verzeichnis wechseln und das Skript apply aus dem suspend2-Verzeichnis aufrufen:

# cd /usr/src/linux-2.6.a.b
# /var/tmp/suspend2-x.y.z-for-2.6.a.b/apply
[... Ausgaben von apply ...]
All happy!

Das "All happy!" ist eine Erfolgsmeldung und deutet darauf hin, dass alles funktioniert hat.

« zurück (Übersicht)

Kernel: madwifi Kernel-Patch herunterladen und anwenden (nicht mehr aktuell!)

Hinweis: Dieser Teil ist nicht mehr aktuell und wird auch nicht mehr aktualisiert. Eine gute Anleitung zur Installation des Madwifi-Treibers für die Atheros WLAN-Karte befindet sich direkt im Wiki des Projektes: http://madwifi.org/wiki/UserDocs/Distro/Debian/MadWifi.

Die eigentliche WLAN-Einrichtung wird unter Einrichtung eines abgesicherten kabellosen Netzwerks weitgehenst unabhängig von dem verwendeten Notebook beschrieben.

+ Überholter Teil ausgeblendet
(+) drücken, um diesen Teil einzublenden

Für die eingebaut WLAN Karte von Atheros gibt es ein Projekt namens Madwifi. Die Treiber sind allerdings nicht frei im Sinne der GPL und verschmutzen (taint) somit den Kernel. Für debian gibt es ein speziell angefertigtes Archiv, mit dem man auf einfache Weise die aktuelle Version des Treibers herunterladen und en Kernel patchen kann.

Das besagte Archiv kann auf heruntergeladen werden. Das Archiv hat den Namen madwifi_a.b-p.tar.gz, wobei a, b die Versionsnummern und p die Releasenummer darstellen (aktuelle Version bei Erscheinen dieser Seiten war madwifi_1.7-3). Nach dem Entpacken in ein temporäres Verzeichnis (hier: /var/tmp/madwifi-1.7) muss aufgrund einer Änderung der Bennenung-Schemata für die CVS-Server bei Sourceforge (dem Hoster des Treibers) die Datei debian/rules in dem Verzeichnis des soeben entpackten Archivs mit einem Texteditor wie folgt angepasst werden:

#!/usr/bin/make -f
#
# Inspired by the earlier minitar packages of Flavio Stanchina
[...]
CVSHOME=cvs -z3 -d:pserver:anonymous@madwifi.cvs.sourceforge.net:/cvsroot/madwifi co madwifi
[...]

Anschließend kann dann die Datei debian/rules ausgeführt werden und es wird das Treiber-Archiv heruntergeladen:

# cd /var/tmp/madwifi-1.7
# debian/rules patch
cvs -z3 -d:pserver:anonymous@madwifi.cvs.sourceforge.net:/cvsroot/madwifi co madwifi
cvs checkout: Updating madwifi
U madwifi/COPYRIGHT
U madwifi/INSTALL

[... viele weitere Ausgaben ...]

cvs checkout: Updating madwifi/wlan
date +%Y%m%d > madwifi/.cvsdate
tar --remove-files --exclude=CVS --exclude=hal/freebsd -czf madwifi.tar.gz madwifi
rm -rf madwifi
dh_testdir
tar -xzf madwifi.tar.gz
touch patch-stamp

Jetzt kann der Kernel gepatcht werden:

Hinweis: Bitte unbedingt auf den korrekten Pfad zum Kernelbaum achten!

# cd madwifi/patches/2.6
# sh ./install.sh /usr/src/linux-2.6.a.b
Creating /usr/src/linux/drivers/net/wireless/ath
Copy ath driver bits...
Creating /usr/src/linux/drivers/net/wireless/_ath_hal
Copy ath_hal bits...
Creating /usr/src/linux/drivers/net/wireless/_ath_rate
Copy ../../ath_rate/onoe bits...
Creating /usr/src/linux/drivers/net/wireless/hal
Copy hal bits...
Creating /usr/src/linux/drivers/net/wireless/hal/linux
Creating /usr/src/linux/drivers/net/wireless/net80211
Copy net80211 bits...
Creating /usr/src/linux/drivers/net/wireless/net80211/compat
Setting up compatibility bits...
Creating /usr/src/linux/drivers/net/wireless/net80211/compat/sys
patching file /usr/src/linux/drivers/net/wireless/Kconfig
patching file /usr/src/linux/drivers/net/wireless/Makefile

Sind keine Fehler aufgetreten, ist der Atheros-Treiber nun im Kernel verfügbar. Um den Kernel eine eigene Geschmacksrichtung zu verpassen, bennenen wir das Kernel-Verzeichnis jetzt um und machen richten Schreibrechte für die Gruppe src ein. In dieser Gruppe muss sich der Benutzer befinden, der später das Kernelpaket erstellen wird. Folgende Kommandos sind dazu notwendig:

# cd /usr/src
# mv linux-2.6.a.b linux-2.6.a.b-r50p
# cd linux-2.6.a.b-r50p
# chown -R root:src .
# find . -type d -exec chmod 2775 {} \;
# find . -type f -exec chmod 664 {} \;
# chmod -R ug+w,o-w .

Alternativ kann man den Kernel aber auch als Superuser root erstellen. Die Variante mit fakeroot ist jedoch eleganter und weniger fehleranfällig, da die Sicherheitsmechanismen (Dateirechte) nicht ausgehebelt werden.

« zurück (Übersicht)

Kernel: Konfiguration (config)

Jetzt ist alles bereit für die Konfiguration des Kernels. Hierzu wechselt man in das Kernel-Verzeichnis und gibt make menuconfig ein und kämpft sich anschließend durch die hunderten von Einstellungen... ooooooder ;-) man nimmt eine bereits vorgefertigte Konfiguration.

Hier ist eine kleine Liste der für mein Thinkpad R50p verwendeten Kernel-Configs (inkl. Kernel-Patches):

(*) Kernel >2.6.18 für debian "lenny" (testing)
(1) madwifi
(2) suspend2

Diese Kernel-Konfigurationen beinhalten nur den absolut notwendigen Teil einkompiliert und sind somit sehr modular aufgebaut. Der Nachteil daran ist, das man für den Bootvorgang eine initial Ramdisk benötigt, was etwas komplizierter, aber auch kein Hexenwerk ist. Den Mammutteil beim Erstellen der Ramdisk nimmt einem das Programm yaird ab, auf das im Folgenden eingegangen wird.

« zurück (Übersicht)

Kernel: Konfiguration von yaird

Damit yaird eine Ramdisk erstellen kann, die den Ansprüchen von suspend2 genügt, muss man noch die Konfiguration unter /etc/yaird/Default.cfg anpassen:

#
# Default.cfg.in - default Yaird configuration file
#   Copyright (C) 2005  Erik van Konijnenburg
#
[...]
CONFIG
[...]
    GOALS
    [...]
        # If there is a framebuffer module, make it operational
        # as soon as possible, so that you can see error messages.
        OPTIONAL MODULE fbcon

        # used for decrypting suspend2-image
        MODULE          lzf

        [...]

        # *** WICHIG ***
        #
        # Unbedingt anpassen: Position der Swap-Partition
        #
        # Mögliche Kandidaten können mit dem Kommando
        #
        #     cat /proc/swaps | egrep ^/dev
        #
        # erfragt werden.
        RESUME          "/dev/hda6"
[...]

Damit ist yaird eingerichtet und die Ramdisk kann beim Erzeugen neuer Kernel-Pakete generiert werden.

« zurück (Übersicht)

Kernel: Konfiguration von kernel-package

Vor dem Erstellen des Kernelpakets müssen noch die Optionen geprüft werden, die in der Datei /etc/kernel-img.conf stehen. Gegebenenfalls sind folgende, rot gekennzeichneten Änderungen zu machen:

do_symlinks = no
relative_links = yes
do_bootloader = no
do_bootfloppy = no
warn_initrd = no
link_in_boot = no
postinst_hook = /sbin/update-grub
postrm_hook   = /sbin/update-grub

Diese Optionen sind hauptsächlich wegen dem Bootloader GRUB nötig und eventuell schon richtig eingestellt. Die Option warn_initrd = no unterdrückt eine unnötige Warnmeldung beim Erstellen des Kernelpakets.

Optional kann man jetzt noch in die Datei /etc/kernel-pkg.conf seinen Namen und seine E-Mailadresse als "Maintainer" des erstellten Kernelpakets eintragen. Das hat jedoch für die Funktionen des Kernels keinerlei Bedeutung und sei hier deshalb nur der Vollständigkeit halber erwähnt.

« zurück (Übersicht)

Kernel: Erstellen des Kernelpakets mit kernel-package

Es geht (endlich) los:

$ cd /usr/src/linux-2.6.a.b-r50p
$ fakeroot make-kpkg clean
[... viele Ausgaben ...]
$ fakeroot make-kpkg --initrd --append-to-version "-r50p" kernel_image
[... viele Ausgaben ...]

Nach der langwierigen Kompilierung sollte sich in /usr/src ein Kernelpaket mit dem Namen linux-image-2.6.16.9-r50p_2.6.a.b-r50p-10.00.Custom_i386.deb befinden.

Dieses kann als root wie gewohnt mit

# dpkg -i linux-image-2.6.16.9-r50p_2.6.a.b-r50p-10.00.Custom_i386.deb

installiert werden. Zuvor muss man aber noch die Steuerdatei von GRUB anpassen, die sich in /boot/grub/menu.lst befindet:

# menu.lst - See: grub(8), info grub, update-grub(8)
#            grub-install(8), grub-floppy(8),
#            grub-md5-crypt, /usr/share/doc/grub
#            and /usr/share/doc/grub-doc/.
[...]
## ## Start Default Options ##
# kopt=root=/dev/hda5 ro vga=791 acpi_sleep=s3_bios resume2=swap:/dev/hda6 elevator=cfq
# ^--- nicht das Kommentarzeichen entfernen, update-grub kümmert sich schon um den Rest ;-)
[...]

Die Optionen bedeuten im Einzelnen:

vga=791 Benutze die Framebuffer Konsole beim hochfahren, d.h. die Textkonsole hat eine Auflösung von 1024x768 Pixel bei 65.000 Farben, schließlich soll ja auch was drauf passen. ;-)
acpi_sleep=s3_bios Umschifft ein Problem bei suspend-to-ram. Ohne diese Option wacht das Notebook nach einem Suspend nicht mehr auf.
resume2=swap:... Angabe der Swap-Partition, auf der sich der gesichterte Stand zum Fortsetzen befindet.

Hinweis: Unbedingt den Pfad zur Swap-Partition anpassen!

elevator=cfq Auswahl eines für Desktopsysteme angeblich besser geeigneten CPU-Schedulers. Trust me! ;-)

Nach der Installation des Kernelpakets einfach mal neu starten und den Kernel auswählen. Wenn diese oder ähnliche Meldungen an der Konsole erscheinen, hat das mit den suspend2 und madwifi Kernel-Patches geklappt:

[...]

Suspend2 debugging info:
Suspend2 2.2.5: Swapwriter: Signature found.
Suspend2 2.2.5: Resuming enabled.
Suspend2 2.2.5: Initiating a software suspend cycle.

[...]

ath_hal: 0.9.17.2 (AR5210, AR5211, AR5212, RF5111, RF5112, RF2413, RF5413)
wlan: 0.8.4.2 (0.9.3)
ath_rate_sample: 1.2 (0.9.3)
ath_pci: 0.9.4.5 (0.9.3)
PCI: Enabling device 0000:02:02.0 (0110 -> 0112)
ACPI: PCI Interrupt 0000:02:02.0[A] -> Link [LNKC] -> GSI 11 (level, low) -> IRQ 11
wifi0: 11a rates: 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
wifi0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
wifi0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
wifi0: H/W encryption support: WEP AES AES_CCM TKIP
wifi0: mac 5.6 phy 4.1 5ghz radio 1.7 2ghz radio 2.3
wifi0: Use hw queue 1 for WME_AC_BE traffic
wifi0: Use hw queue 0 for WME_AC_BK traffic
wifi0: Use hw queue 2 for WME_AC_VI traffic
wifi0: Use hw queue 3 for WME_AC_VO traffic
wifi0: Use hw queue 8 for CAB traffic
wifi0: Use hw queue 9 for beacons
wifi0: Atheros 5212: mem=0xc0210000, irq=11

[...]

Sollten die ath0-Meldungen nicht erscheinen: Keine Panik... eventuell müssen nur die entsprechenden Module nachgeladen werden:

# modprobe ath_pci

Abschließend betrachtet: War das jetzt etwa kompliziert? ;-)

« zurück (Vorbereitungen)Inhalt(X.Org) weiter »