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
- Kernel: suspend2 Kernel-Patch herunterladen
- Kernel: Bitte einmal Linux mit Vanille-Geschmack (vanilla)
- Kernel: suspend2 Kernel-Patch anwenden
- Kernel: madwifi Kernel-Patch herunterladen und anwenden (nicht mehr aktuell)
- Kernel: Konfiguration (config)
- Kernel: Konfiguration von yaird
- Kernel: Konfiguration von kernel-package
- Kernel: Erstellen des Kernelpakets mit kernel-package
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.
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.
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
.
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.
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.
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):
- config-2.6.21.7-r50p (2,*)
- config-2.6.18.1-r50p (2)
- config-2.6.16.9-r50p (1,2)
- config-2.6.15.2-r50p (1)
- config-2.6.14.3-r50p (1)
- config-2.6.13.1-r50p (1)
- config-2.6.12-r50p (1)
- config-2.6.10-r50p (1)
(*) 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.
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.
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.
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?