Gargi
28.12.2007, 14:22
Debian Etch bewegt sich im Moment auf der 2.6.18er Kernelbasis und wird auch denkei ich beim Release auf diesen Füßen stehen. Dennoch kann man, wenn man möchte oder wenn es eine spezielle Hardware benötigt auf den aktuellen Kernel 2.6.20 relativ einfach umsatteln.
Da sich allerdings einiges im Bereich der Controller verändert hat, muss man gerade beim Konfigurieren des Kernels hier vorsichtig beim Integrieren von neuen Treibermodulen sein.
1. Vorbereitung:
Wir bewegen uns ab jetzt an der Konsole als ROOT. D.h. wir öffnen eine shell und holen uns die Rootrechte mit einem frechem
su
[Passwort eingeben]
An der Konsole werden wir erstmal folgende Pakete per apt-get nachinstallieren:
apt-get install kernel-package
apt-get install build-essential
apt-get install initrd-tools
apt-get install libncurses5-dev
Jetzt müsst Ihr erstmal herausfinden, welche Kernelversion Ihr im Moment installiert habt:
uname -a
Das gibt Euch die genaue Kernelversion an. Wenn wir die nun kennen, müssen wir die bisherigen Kernelheader nachinstallieren, was uns zudem noch ein paar zusätzliche Pakete mit auf unser System bringt:
apt-get linux-headers-[entsprechende.Versionsnummer]
Somit sind die wesentlichsten Vorbereitungen für das Erste abgeschlossen.
2. Hol'ma uns a'n Kernel
Jetzt wechseln wir in das Buildverzeichnis des Kernels:
cd /usr/src
Danach stellen wir sicher, dass keine alten Sourcen auf unser linux-build Verzeichnis gelinkt ist:
rm linux
Wenn Ihr noch nie einen Kernel auf dem gestartetem System kompiliert hat, wird Euch dieser Befehl sagen, dass er das Verzeichnis nicht findet. Das soll uns soweit recht sein.
Downloaden wir den aktuellen 2.6.20.1er Kernel an der Konsole via wget:
wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.1.tar.bz2
Solltet der wget nicht funktionieren, weil die Datei nicht gefunden wird, dann geschwind nachinstalliert:
apt-get install wget
Jetzt kann es einen Moment dauern, bis das Kernelpaket auf Eurer Platte liegt. Der Vorgang sieht dann ungefähr so aus:
http://www.gargi.org/stuff/sonstiges/26201_1.png
Wenn der Kernel nun geliefert ist, ziehen wir den Burschen aus. Wir entpacken das Archiv somit mit einem
tar xvfj linux-2.6.20.1.tar.bz2
Dabei wird das Verzeichnis linux-2.6.20.1 erstellt:
http://www.gargi.org/stuff/sonstiges/26201_2.png
Wir befinden uns immer noch im Verzeichnis /usr/src und symlinken nun das neue Sourcen-Verzeichnis auf linux :
ln -s linux-2.6.20.1 linux
3. Kernel konfigurieren
Nachdem nun die Quellen da sind, wechseln wir un in unser neues Linux-Verzeichnis:
cd /usr/src/linux
Danach setzen wir ein
make mrproper
ab, um alles blank zu machen. Danach können wir mit dem Einlesen und Abgleichen der alten Konfiguration mit dem neuen Kernel beginnen. Hierbei wird die alte Kernelkonfiguration soweit in den neuen Kernel übernommen, damit wir nicht tausende von Einstellungen selbst vornehmen müssen. Macht auch Sinn, denn wir wollen schließlich nicht den ganzen Tag bei solche einem schönen Wetter vor der Konsole sitzen. D.h. es müssen nur die neuen Einstellungen, die eben im alten Kernel nicht vorhanden waren entsprechend gemäß unseren Wünschen bearbeiten.
Hierbei gibt es leider keine goldene Regel. Man sollte sehr aufmerksam lesen, welche neue Einstellung nun wie integriert werden soll. Hierbei konfiguriere ich alles modular, was mir die Möglichkeit gibt, es Modular zu setzen. Treiber, die direkt in den Kernel integriert werden müssen sehe ich mir zweimal an, ob ich sie tatsächlich benötige. Ist es Hardware, die ich definitiv nicht in meiner Maschine habe, werde ich diese auch nicht in den Kernel mit einbinden. Habe ich auf der anderen Seite etwas als Modul aktiviert und eine weitere dem Modul unterstellte Einstellung muss dabei per default in den Kernel integriert werden, stimme ich dem hingegen wieder zu. Von daher ist es fast schon eine eigene Philosophie, wie man beim Bauen des Kernels mit den einzelnen Modulen umgeht.
Würde man hier alle neuen Einstellungen verneinen, dann bekommt man beim ersten Start des neuen Kernels garantiert eine Kernel Panic vor den Latz geknallt, da ab dem Kernel 2.6.19 im Bereich der Plattencontroller einige neue Dinge integriert wurden. Gerade bei den Plattencontrollern muss hier sehr wachsam beim Bestätigen umgegangen werden!
Nun genug geredet, jetzt beginnen wir die Konfiguration mit einem
make oldconfig
Ihr seht hierbei, dass bei der Abfrage folgendes als Angabe möglich ist
(y,n,m) <- Integration direkt in den Kernel (Y), als Modul (m), gar nicht (n)
(y,n) <- Integration direkt in den Kernel (Y), gar nicht (n)
(m,n) <- als Modul (m), gar nicht (n)
Und wie schon gesagt, wenn etwas modular möglich ist, ist dieses generell zu bevorzugen.
Im folgenden ein paar Screenshots während der Konfiguration:
http://www.gargi.org/stuff/sonstiges/26201_3.png
Interessante Einstellung! Hier wird ermöglicht, dass der Kernel den Bios flash chip anspricht. Eventuell wird man hier irgendwann die Möglichkeit haben, direkt ins Bios von Linux her zuzugreifen. Es sollen ja bereits auch erste Boards kommen, die ein Linux-Bios integriert haben. Mal sehen, was die Linuxer hier noch bieten werden.
http://www.gargi.org/stuff/sonstiges/26201_4.png
Ganz wichtig hier ist, dass die ATA Controller eingebunden werden. Im Kernel 2.6.19 funktionierte das oft nur, wenn die Treiber direkt in den Kernel geladen wurden. Bei der 2.6.20er Variante hat das bei mir als Modul auf Anhieb geklappt. Also versucht es auch erstmal als Module. Ihr könnte hier auch ruhig alle Module kompilieren lassen. Der Kernel sucht sich dann beim Start schon den zu Eurem System passenden Treiber raus.
http://www.gargi.org/stuff/sonstiges/26201_5.png
Es taucht immer wieder die Frage nach dem Hardwaremonitoring auf. Tatsächlich ist es so, dass erst nach dem 2.6.18er Kernel die Temperaturanzeige für die Athlon64/FX und Opterons integriert wurden. Zumindest steht das als neues Feature auf unserer Speisekarte.
http://www.gargi.org/stuff/sonstiges/26201_6.png
TOPPAKTUELLE Geschichte ist das Virtualisieren. Hier lässt auch Linux richtig die Muskeln spielen. Seit neuestem das auch Kernel basierend! Da ich aber auf meinem Debian weniger damit zu tun habe, habe ich das mal auf (N)ein gelassen.
http://www.gargi.org/stuff/sonstiges/26201_7.png
Hier noch eine interessante Neuerung: Das ext4 Filesystem steckt nun auch im Kernel drin. Ext3 ist ja im Moment in der Linuxwelt neben reiserfs das gängiste Dateisystem. Mal sehen, ob ext4 sich irgendwann durchsetzt. Hier weißt uns die Konfig darauf hin, dass das noch (EXPERIMENTAL) ist. D.h. steckt noch deutlich in der NEtwicklung. Deswegen habe ich es auch hier einmal bei (N)ein belassen. Zudem bleibe ich erstmal bei ext3. Aber es gibt genug experimentierfreudige User ;)
Wenn wir nun fertig sind, können wir uns auch gerne die Konfiguration auf einem optisch übersichtlicherem Menüsystem ansehen. Hierzu startet einfach einmal das Menuconfig mit einem
make menuconfig
Hier kann man auch die Settings nocheinmal kontrollieren, oder noch einwenig verändern. Wer seinem Kernel einwenig Dampf machen möchtem kann dies bei den CPU-Settings noch regulieren:
http://www.gargi.org/stuff/sonstiges/26201_8.png
Hier habe ich den Kern im Bereich "Preemption Model" auf einem Preemptible (Low Latency) Kernel gesetzt. Zudem habe ich etwas weiter drunten (nicht im Bild) das "Big Kernel Lock" aktiviert. Zudem unterstützt der Kernel wie man schön sehen kann 8 CPUs. Ein Linux Kernel könnte aber auch auf 255 CPUs laufen. Zumindest laut Einstellungsmöglichkeit, was aber natürlich noch Zukunftsmusik ist (denke ich zumindest ;) )
http://www.gargi.org/stuff/sonstiges/26201_9.png
Hier habe ich die Timer-Frequency von 250 auf 1000 erhöht. Wenn schon, denn schon ;)
4. Backe, backe Kuchen...
Wir sind nun soweit. Also übersetzen wir den Kern nun mit einem
make-kpkg kernel_image --initrd --revision KernelRebuild.01
Das kann nun eine Weile dauern. Hierbei werden die Module und der neue Kernel kompiliert. Danach als installierbares Debian Paket unter /usr/src abgelegt.
Wenn das alles ohne Fehler durch ist (zu 99% geht das an der Stelle glatt, wenn nichts gepatcht wurde), dann wechselt in das /usr/src Verzeichnis:
cd /usr/src
Wenn Ihr Euch die Dateien anzeigen lässt,
ls -l
dann seht Ihr Euren fertigen Kernel schon bereits vor Euch, der nur noch darauf wartet, installiert zu werden. Das File könnte ungefähr so heißen:
linux-image-2.6.20.1_KernelRebuild.01_i386.deb
Dies installiert Ihr nun mit einem
dpkg -i linux-image-2.6.20.1_KernelRebuild.01_i386.deb
Die Installation geht dann vollautomatisch. D.h. Kernel und Module werden an die korrekte Stelle kopiert, die neue Ramdisk wird geschrieben und einen Eintrag in Euren Grub Bootloader erstellt.
Was Ihr nun nur noch machen müsst ist die Kiste neu zu starten:
reboot
;-)
Viel Spaß mit Eurem neuen Kernel!
cu
Gargi
Da sich allerdings einiges im Bereich der Controller verändert hat, muss man gerade beim Konfigurieren des Kernels hier vorsichtig beim Integrieren von neuen Treibermodulen sein.
1. Vorbereitung:
Wir bewegen uns ab jetzt an der Konsole als ROOT. D.h. wir öffnen eine shell und holen uns die Rootrechte mit einem frechem
su
[Passwort eingeben]
An der Konsole werden wir erstmal folgende Pakete per apt-get nachinstallieren:
apt-get install kernel-package
apt-get install build-essential
apt-get install initrd-tools
apt-get install libncurses5-dev
Jetzt müsst Ihr erstmal herausfinden, welche Kernelversion Ihr im Moment installiert habt:
uname -a
Das gibt Euch die genaue Kernelversion an. Wenn wir die nun kennen, müssen wir die bisherigen Kernelheader nachinstallieren, was uns zudem noch ein paar zusätzliche Pakete mit auf unser System bringt:
apt-get linux-headers-[entsprechende.Versionsnummer]
Somit sind die wesentlichsten Vorbereitungen für das Erste abgeschlossen.
2. Hol'ma uns a'n Kernel
Jetzt wechseln wir in das Buildverzeichnis des Kernels:
cd /usr/src
Danach stellen wir sicher, dass keine alten Sourcen auf unser linux-build Verzeichnis gelinkt ist:
rm linux
Wenn Ihr noch nie einen Kernel auf dem gestartetem System kompiliert hat, wird Euch dieser Befehl sagen, dass er das Verzeichnis nicht findet. Das soll uns soweit recht sein.
Downloaden wir den aktuellen 2.6.20.1er Kernel an der Konsole via wget:
wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.1.tar.bz2
Solltet der wget nicht funktionieren, weil die Datei nicht gefunden wird, dann geschwind nachinstalliert:
apt-get install wget
Jetzt kann es einen Moment dauern, bis das Kernelpaket auf Eurer Platte liegt. Der Vorgang sieht dann ungefähr so aus:
http://www.gargi.org/stuff/sonstiges/26201_1.png
Wenn der Kernel nun geliefert ist, ziehen wir den Burschen aus. Wir entpacken das Archiv somit mit einem
tar xvfj linux-2.6.20.1.tar.bz2
Dabei wird das Verzeichnis linux-2.6.20.1 erstellt:
http://www.gargi.org/stuff/sonstiges/26201_2.png
Wir befinden uns immer noch im Verzeichnis /usr/src und symlinken nun das neue Sourcen-Verzeichnis auf linux :
ln -s linux-2.6.20.1 linux
3. Kernel konfigurieren
Nachdem nun die Quellen da sind, wechseln wir un in unser neues Linux-Verzeichnis:
cd /usr/src/linux
Danach setzen wir ein
make mrproper
ab, um alles blank zu machen. Danach können wir mit dem Einlesen und Abgleichen der alten Konfiguration mit dem neuen Kernel beginnen. Hierbei wird die alte Kernelkonfiguration soweit in den neuen Kernel übernommen, damit wir nicht tausende von Einstellungen selbst vornehmen müssen. Macht auch Sinn, denn wir wollen schließlich nicht den ganzen Tag bei solche einem schönen Wetter vor der Konsole sitzen. D.h. es müssen nur die neuen Einstellungen, die eben im alten Kernel nicht vorhanden waren entsprechend gemäß unseren Wünschen bearbeiten.
Hierbei gibt es leider keine goldene Regel. Man sollte sehr aufmerksam lesen, welche neue Einstellung nun wie integriert werden soll. Hierbei konfiguriere ich alles modular, was mir die Möglichkeit gibt, es Modular zu setzen. Treiber, die direkt in den Kernel integriert werden müssen sehe ich mir zweimal an, ob ich sie tatsächlich benötige. Ist es Hardware, die ich definitiv nicht in meiner Maschine habe, werde ich diese auch nicht in den Kernel mit einbinden. Habe ich auf der anderen Seite etwas als Modul aktiviert und eine weitere dem Modul unterstellte Einstellung muss dabei per default in den Kernel integriert werden, stimme ich dem hingegen wieder zu. Von daher ist es fast schon eine eigene Philosophie, wie man beim Bauen des Kernels mit den einzelnen Modulen umgeht.
Würde man hier alle neuen Einstellungen verneinen, dann bekommt man beim ersten Start des neuen Kernels garantiert eine Kernel Panic vor den Latz geknallt, da ab dem Kernel 2.6.19 im Bereich der Plattencontroller einige neue Dinge integriert wurden. Gerade bei den Plattencontrollern muss hier sehr wachsam beim Bestätigen umgegangen werden!
Nun genug geredet, jetzt beginnen wir die Konfiguration mit einem
make oldconfig
Ihr seht hierbei, dass bei der Abfrage folgendes als Angabe möglich ist
(y,n,m) <- Integration direkt in den Kernel (Y), als Modul (m), gar nicht (n)
(y,n) <- Integration direkt in den Kernel (Y), gar nicht (n)
(m,n) <- als Modul (m), gar nicht (n)
Und wie schon gesagt, wenn etwas modular möglich ist, ist dieses generell zu bevorzugen.
Im folgenden ein paar Screenshots während der Konfiguration:
http://www.gargi.org/stuff/sonstiges/26201_3.png
Interessante Einstellung! Hier wird ermöglicht, dass der Kernel den Bios flash chip anspricht. Eventuell wird man hier irgendwann die Möglichkeit haben, direkt ins Bios von Linux her zuzugreifen. Es sollen ja bereits auch erste Boards kommen, die ein Linux-Bios integriert haben. Mal sehen, was die Linuxer hier noch bieten werden.
http://www.gargi.org/stuff/sonstiges/26201_4.png
Ganz wichtig hier ist, dass die ATA Controller eingebunden werden. Im Kernel 2.6.19 funktionierte das oft nur, wenn die Treiber direkt in den Kernel geladen wurden. Bei der 2.6.20er Variante hat das bei mir als Modul auf Anhieb geklappt. Also versucht es auch erstmal als Module. Ihr könnte hier auch ruhig alle Module kompilieren lassen. Der Kernel sucht sich dann beim Start schon den zu Eurem System passenden Treiber raus.
http://www.gargi.org/stuff/sonstiges/26201_5.png
Es taucht immer wieder die Frage nach dem Hardwaremonitoring auf. Tatsächlich ist es so, dass erst nach dem 2.6.18er Kernel die Temperaturanzeige für die Athlon64/FX und Opterons integriert wurden. Zumindest steht das als neues Feature auf unserer Speisekarte.
http://www.gargi.org/stuff/sonstiges/26201_6.png
TOPPAKTUELLE Geschichte ist das Virtualisieren. Hier lässt auch Linux richtig die Muskeln spielen. Seit neuestem das auch Kernel basierend! Da ich aber auf meinem Debian weniger damit zu tun habe, habe ich das mal auf (N)ein gelassen.
http://www.gargi.org/stuff/sonstiges/26201_7.png
Hier noch eine interessante Neuerung: Das ext4 Filesystem steckt nun auch im Kernel drin. Ext3 ist ja im Moment in der Linuxwelt neben reiserfs das gängiste Dateisystem. Mal sehen, ob ext4 sich irgendwann durchsetzt. Hier weißt uns die Konfig darauf hin, dass das noch (EXPERIMENTAL) ist. D.h. steckt noch deutlich in der NEtwicklung. Deswegen habe ich es auch hier einmal bei (N)ein belassen. Zudem bleibe ich erstmal bei ext3. Aber es gibt genug experimentierfreudige User ;)
Wenn wir nun fertig sind, können wir uns auch gerne die Konfiguration auf einem optisch übersichtlicherem Menüsystem ansehen. Hierzu startet einfach einmal das Menuconfig mit einem
make menuconfig
Hier kann man auch die Settings nocheinmal kontrollieren, oder noch einwenig verändern. Wer seinem Kernel einwenig Dampf machen möchtem kann dies bei den CPU-Settings noch regulieren:
http://www.gargi.org/stuff/sonstiges/26201_8.png
Hier habe ich den Kern im Bereich "Preemption Model" auf einem Preemptible (Low Latency) Kernel gesetzt. Zudem habe ich etwas weiter drunten (nicht im Bild) das "Big Kernel Lock" aktiviert. Zudem unterstützt der Kernel wie man schön sehen kann 8 CPUs. Ein Linux Kernel könnte aber auch auf 255 CPUs laufen. Zumindest laut Einstellungsmöglichkeit, was aber natürlich noch Zukunftsmusik ist (denke ich zumindest ;) )
http://www.gargi.org/stuff/sonstiges/26201_9.png
Hier habe ich die Timer-Frequency von 250 auf 1000 erhöht. Wenn schon, denn schon ;)
4. Backe, backe Kuchen...
Wir sind nun soweit. Also übersetzen wir den Kern nun mit einem
make-kpkg kernel_image --initrd --revision KernelRebuild.01
Das kann nun eine Weile dauern. Hierbei werden die Module und der neue Kernel kompiliert. Danach als installierbares Debian Paket unter /usr/src abgelegt.
Wenn das alles ohne Fehler durch ist (zu 99% geht das an der Stelle glatt, wenn nichts gepatcht wurde), dann wechselt in das /usr/src Verzeichnis:
cd /usr/src
Wenn Ihr Euch die Dateien anzeigen lässt,
ls -l
dann seht Ihr Euren fertigen Kernel schon bereits vor Euch, der nur noch darauf wartet, installiert zu werden. Das File könnte ungefähr so heißen:
linux-image-2.6.20.1_KernelRebuild.01_i386.deb
Dies installiert Ihr nun mit einem
dpkg -i linux-image-2.6.20.1_KernelRebuild.01_i386.deb
Die Installation geht dann vollautomatisch. D.h. Kernel und Module werden an die korrekte Stelle kopiert, die neue Ramdisk wird geschrieben und einen Eintrag in Euren Grub Bootloader erstellt.
Was Ihr nun nur noch machen müsst ist die Kiste neu zu starten:
reboot
;-)
Viel Spaß mit Eurem neuen Kernel!
cu
Gargi