Linux 2.6.32 macht moblin unnötig.

So kann man auch ein Linux backen
So kann man auch ein Linux backen
02.12.2009 13:45

Es ist schon lange her das ich mir einen Kernel selber "gebacken" hab, aber der Linux 2.6.32 RC der bald auch als stabile Fassung erscheinen wird macht es mir doch "Schmackhaft"

Das tolle an Moblin ist ja die kurze Bootzeit, aber da kocht Intel eigentlich mit normalen Wasser, also probieren wir doch einfach selber einen Moblin mäßigen Kernel zu Backen!

Zutaten

  1. Mindestens ein PC, mit viel Hardware
  2. GNU Compiler Collection und Glibc mit allen Header Dateien. Unter Debian und Ubuntu reicht ein apt-get install build-essential
  3. Optional distcc
  4. Aktuelleste Fassung von Linux 2.6.32 (od. höher), zu finden auf www.kernel.org

Vorbereitung

  1. Zuerst fahren wir unseren Linux Rechner mal hoch und stecken alle Hardware die wir normal benötigen an die Kiste an. Dieser Punkt ist wirklich wichtig!
  2. Vergewissern wir und nochmal das alles angesteckt, eingeschaltet ist, und wie gewohnt unter Linux läuft.
  3. Die Kernel Sourcen entpacken, Man kann diese Ruhig in seinem $HOME Ordner auspacken. Viele legen die Quellen lieber in /usr/src/ ab, dann sollte man aber entweder mit chown den Eingentümer von root auf sich selber ändern, oder als root arbeiten (was böse ist).
  4. Man sollte jetzt jedenfalls einen Ordner namens linux-2.6.32* haben, in den wir jetzt hinein wechseln werden... Bis jetzt ist also alles gaaaaanz normal.

Die ungewöhnliche Magie des "Neuen"

Hier beginnt die Magie, statt wie sonst immmer angegeben "make menuconfig" anzugeben, starten wir folgenden Befehl: make localmodconfig
Na? Überrascht! Ich auch, aber positiv! Dieser Befehl macht folgendes:

  1. Zuerst wird die .config Datei des aktuell laufenden Kernels "geladen".
  2. Dann werden alle Module des aktuell geladenen Kernels, welche gerade nicht verwendet werden aus dieser Config geschmissen.
  3. Letzen Endes läuft automatisch make oldconfig ab, welches den Anwender noch fragt was mit den Config-Optionen passieren soll, welche mit neueren Kernel dazu gekommen sind.

Mit einem make all würde so ein Kernel entstehen, der nur noch die Hardware unterstützt welche gerade vom PC verwendet wird. Gut? Noch nicht gut genug!

Mit make localyesconfig würden wir noch dazu alle geladenen Module die noch im Kernel über bleiben fix in den Kern reinbacken. Damit ersparen wir uns nicht nur ein paar Zehntel, die das Laden eines Moduls benötigt, wie können uns die kompletet "Initrd" ersparen. Das bringt wirklich Zeit!

Noch mehr Optimierung bitte!

Den localyesconfig Befehl habe ich leider zu spät entdeckt. Stattdessen habe ich mit menuconfig selber noch nachgebessert. Dabei musste ich erschrecken feststellen was ein großer Distributor nicht alles in den Kernel wirft. Die komplettetes "SysRq" und Debugging Optionen waren aktiv, also alles was für Kernel Hacker interessant ist, was ein normaler Mensch nicht versteht, und viel CPU Leistung für keinerlei Nutzen bringt. Also habe ich mal alles was "(Deprecated) im Text hat entfernt, ebenso alles was mir nichts gesagt hat und "If you dont't know what this is say N", oder "it's safe to remove this" im Text hatte flog auch raus. Dazu eben fast alle Debug Optionen, sowie alle Sicherheits Systeme die von meiner Distribution nicht verwendet werden (SELinux). Die Treiber wurden ja schon ausgemistet, also hab ich noch die Optimierung auf meine CPU angepasst. 2.6.32 kann jetzt gezielt auf Atom CPUs optimieren, bei so kleinen Systemen ist es übrigens ratsam "Optimize for Size" zu aktivieren.

Das Endergebnis

Der sehr CPU-aufwändige Vorgang der Kompillierung eines ganzen Kernels geht jetzt auf meiner Atom-CPU sehr viel schneller. Genau kann ich es nicht beziffern den den original Ubuntu-Kernel hab ich nach einer Stunde abgebrochen und mit distcc und einem Quadcore System in einer 1/2 Stunde nochmal kompilliert. Mein neuer Ultra-Schlanker Kernel war in einer 1/4 Stunde fertig.

Die Startzeit ist bei 2-3 Sek. von BIOS bis Login. Allerdings mit Ubuntu 9.10 und seinem neuen "Upstart". Es fehlt aber der "usplash" Patch, und ich hab auch den "xsplash" deinstalliert. Das verkürzt stark die Startzeit, aber Ubuntu schaut für 3 Sekunden nicht so hübsch aus.

Abgesehen davon starten auch alle anderen Applikation schneller und reagieren besser, auch der Akku meldet 5 Min. längere Laufzeit - Was wohl an kleinen Optimierungen im neuen Kernel liegen wird.

Ein paar Tipps für Anfänger

sudo make install modules_install kopiert den Kernel und die passenden Module dort hin wo sie benötigt werden. Damit man der Kern auch noch starten kann muss normal der GRUB Bootloader angepasst werden. Meist gibt es ein Script namens update-grub das sich um all das kümmert.

Man kann so viele Kernels nebeneinander haben wie man will und beim starten sich einen nach "Geschmack" aussuchen. Experimentieren ist also kein Problem, man behält sich einfach einen Kernel (dem vom Distributor) bei dem man sicher ist das alles geht.


Kommentare
Aw: Tower
Backwash (unangemeldet), Donnerstag, 21. Januar 2010 15:29:24
Ein/Ausklappen

Also bei einem Tower-PC würde ich das nicht empfehlen. Die Bootzeit ist zu schnell, da verlagert sich der Schwerpunkt in den oberen Teil des Gehäuses. Fall dein Tower nicht perfekt gerade steht, besteht die Gefahr, dass dieser umfällt, eben wegen der erwähnten Verlagerung des Schwerpunkts.


Bewertung: 89 Punkte bei 7 Stimmen.
Den Beitrag bewerten: Gut / Schlecht
Atom Optimierung
Markus Schulz (unangemeldet), Freitag, 11. Dezember 2009 11:46:57
Ein/Ausklappen

meines Wissens nach steht die Compiler Optimierung für Intels Atom Platform erst mit gcc-4.5 zur Verfügung. Diese Version dürfte auf den wenigsten Distributionen bereits Standard sein.


Bewertung: 80 Punkte bei 4 Stimmen.
Den Beitrag bewerten: Gut / Schlecht
Nicht genau.
Christian Berg, Mittwoch, 02. Dezember 2009 20:31:23
Ein/Ausklappen

Da bei vielen Distributionen die IDE/SATA/SCSI Treiber, oft sogar die Dateisysteme als Module realisiert werden muss der Kernel eine "initiale RAM-Disk" Laden die bis zu 10MB groß ist, aus dieser ladet er dann erst die Module in den Speicher und kann den Start fortsetzen. Auch das weitere erkennen fix installierter Hardware und das nachträgliche laden der Module frisst viel Zeit beim Start.
Das kann man sich halt mit make localyesconfig ersparen und bootet ca. 2 Sekunden schneller.

Wie es mit dem weiteren Leistung aussieht kann ich dir nicht versprechen. Der Linux-Kernel hat einfach schon viel zu viele Optionen. Ubuntu z.B. optimiert scheinbar nur auf 5x86 Hardware, Wenn man stattdessen auf Core2 optimiert bringt das wieder ein kleines Eck mehr Leistung. Dann gibt es noch diverse Optimierungen für Server, Deskop und Realtime-Desktops (Audio-/Videoediting).

Wenn du einen leistungsstarken Prozessor hast, würde ich sagen: "Spiel' dich etwas!" Der einzige Nachteil der sich aus der 100%igen optimierung an deine Hardware ergibt ist folgender:
Sobald du den PC grundlegend veränderst (anderes Mainboard), wird dieser Linux-Kernel nicht mehr starten, oder nicht ganz richtig funktioniern, darum (und für support Fälle) immer den "original" Kernel aufbewahren.


Bewertung: 90 Punkte bei 11 Stimmen.
Den Beitrag bewerten: Gut / Schlecht
normaler pc
samvimes.bplaced.net (unangemeldet), Mittwoch, 02. Dezember 2009 19:28:06
Ein/Ausklappen

weißt du wieviel das in etwa bei nem normalen Tower Pc bringt?


Bewertung: 128 Punkte bei 9 Stimmen.
Den Beitrag bewerten: Gut / Schlecht

Infos zum Autor