Kernelbau

Aus Linupedia.org
Wechseln zu: Navigation, Suche
Höhe=24px
Dieses HOWTO zu Linux oder der Abschnitt davon braucht eine Überarbeitung. Weitere Informationen findest Du hier. Deine Hilfe ist gefragt, das HOWTO zu verbessern. Danach entsorge bitte diese Signierung.

--Yehudi 14:18, 15. Jan 2007 (CET)

Autor: Gimpel

Hi ihr Freaks!

Da es eine feine Sache ist, sich mal einen Kernel selbst zusammen zu schrauben, ist ein kleines Step-For-Step HowTo (for Dummies... hehe ) mal recht angebracht. BITTE EINMAL KOMPLETT DURCHLESEN!!

als erstes sei man mal auf DIE kernel-bibel für SuSE verwiesen: http://www.thomashertweck.de/kernel26.html Wink das läßt eigentlich kaum fragen offen und ist somit eine pflicht-lektüre!! alle info's für dieses howto stammen quasi von da, nur ein wenig nötige detail-arbeit findet dort keine erwähnung.

was machen wir hier? wir bauen uns den kernel 2.6.7 von kernel.org als rpm und installieren den dann, um nix kaputt zu machen, parallel zum alten (multikernel). das ganze mit bootsplash! (der aktualität halber sei erwähnt: geht natürlich auch mit kernel 2.6.8/2.6.9 usw... auch sei gesagt daß der SuSE kernel etliche mb an patches enthält die nicht im "vanilla" kernel enthalten sind, ganz besonders diejenigen, die teil von kernel-nongpl sind (SuSE9.2), sprich wenn man zB module für w-lan etc benötigt, muss man sich die patches ergoogeln und einbauen ... patch -p1 foo ... siehe unten)


1.

dazu laden wir uns erst mal die source vom vorstehenden link, entpacken diese nach /usr/src und übereignen das verzeichnis mit Code:

chown -R USERNAME:root /usr/src/linux-2.6.7

an uns als user (gruppe bleibt root). (USERNAME soll euer username am system sein) das hat den vorteil dass man dann nicht unbedingt als root bauen muss, und dass man bequem mit "make xconfig" bzw "make menuconfig" einzelne optionen ädern kann. ich z.B. habe den prozessortyp auf athlon k7 gesetzt, aber mal alles der reihe nach.

dann brauchen wir für den bootsplash noch einen patch (immer den zur kernel-version passenden nehmen!):

http://www.bootsplash.de/files/bootsplash-3.1.4-sp3-2.6.7.diff ("save as")

ok, die kernel-quelle ist entpackt und wir patchen den bootsplash rein: Code:

patch -d /usr/src/linux-2.6.7 -p1 < /home/tom/bootsplash-3.1.4-sp3-2.6.7.diff

das hätten wir.

2.

dann kommt die konfiguration des kernels (als user! sonst funzt xconfig bzw menuconfig eventuell nicht): Code: cd /usr/src/linux-2.6.7 zcat /proc/config.gz > .config make oldconfig #damit klonen wir die config vom laufenden kernel make menuconfig #hier kann man jetzt einzelne optionen ändern, zb prozessortyp, und den bootsplash aktivieren


die config für den splash muss so aussehen: Zitat: Processor type and features ---> [ ] Use register arguments (EXPERIMENTAL) Device Drivers ---> Graphics support ---> [*] Support for frame buffer devices [*] VESA VGA graphics support Console display driver support ---> [*] Video mode selection support <*> Framebuffer Console support Logo configuration ---> [ ] Bootup logo Bootsplash configuration ---> [*] Bootup splash screen

das speichern wir!

dann ein: Code: make prepare make rpm


so, wer hier nach "make rpm" als user schon nen fehler hatte, der mache "make rpm" als root, das macht ja auch nix weiter.

dann kann man sich getrost nen bier holen (lassen) und die füße hochlegen. der rechner erfährt gerade den besten RAM-test den es gibt, die cpu wird auch mal richtig gefordert. wenn hier was falsch läuft, fehler oder sonstiges, das ding nach zwei stunden immer noch net fertig ist, kann man sich sicher sein, dass der ram nen treffer hat! bei meinem athlon 1800 mit 512 ddr-ram dauert das so etwa 35-45 minuten.

wenn fertig, finden wir unter /usr/src/packages/RPMS/i386 das kernel-2.6.7-1.i386.rpm


3.

um dieses zu installieren ohne den alten kernel platt zu machen, müssen wir zunächst den alten aus der rpm-datenbank werfen. Code:

rpm -qa | egrep kernel            #um erst mal raus zu finden welchen genau wir gerade benutzen
rpm -e --justdb kernel-2.6.x-y.z  #damit wird er aus der rpm-datenbank ausgetragen


dann den neuen installieren mit Code:

rpm -ivh /usr/src/packages/RPMS/i386/kernel-2.6.7-1.i386.rpm

4.

eine initrd brauchen wir auch noch: Code:

cd /boot
mkinitrd -k vmlinuz-2.6.7 -i initrd-2.6.7


WICHTIG: um gaaaaanz sicher sein zu können dass der alte kernel weiterhin sicher bootet machen wir Code:

ls -l

und prüfen ob folgende links noch richtig auf den alten kernel zeigen: Zitat:

initrd -> initrd-2.6.5-7.75-default
vmlinuz -> vmlinuz-2.6.5-7.75-default

die versionsnummer kann je nach version des alten kernels variieren, MUSS aber die sein, die rpm -qa weiter oben ausgegeben hat !! ist dies der fall, kann quasi garnix schief gehen!

5.

so, jetzt kommt die nötige fein-arbeit: da in linux das von suse seit 9.1 verwendete submount nicht a priori dabei ist, muss man entweder nach der installation des neuen kernels das modul dafür bauen (siehe dazu das zitat von awagner am ende des threads! thx awagner! .. sowie beitrag von emerald weiter unten: http://linux-club.de/viewtopic.php?p=66452#66452 THX emerald!), oder die submount-optionen für die cd/dvd-laufwerke aus der fstab nehmen.

[EDIT] der folgende schritt (editierung der fstab) kann eigentlich übersprungen werden, wenn man gewillt ist, _nach_ (der neue kernel muss dazu gebootet sein) der installation sich das modul für submount zu bauen und zu installieren!! bei mir gabs einen kernel-panic und ich musste das vorläufig rauswerfen!

wer das submount-modul nicht bauen will, der ändere seine fstab: folgende optionen gelten für alle cd-rom/dvd-rom/cdrecorder und dvd-ram laufwerke: Code: /dev/cdrecorder /media/cdrecorder auto ro,noauto,user,exec,iocharset=utf8 0 0 /dev/dvd /media/dvd auto ro,noauto,user,exec,iocharset=utf8 0 0


also das subfs mit seinen optionen is dann weg! ABER: macht ein backup von der fstab, für den fall dass ihr das nachholen wollt!


6.

gut, nächster schritt: anpassen des bootloaders YaST öffnen--->System--->Konfig des Bootloaders ---> "verfügbare abschnitte" markieren und "bearbeiten"---> den alten eintrag "Linux" markieren und "hinzufügen" ---> alten abschnitt klonen: Ja !!

so, dann vergeben wir einen namen nach wahl z.b. "SuSE 9.1 on Linux-2.6.7", "kernel" markieren und bearbeiten: hier fügen wir hinter /boot/vmlinuz einfach ein "-2.6.7" ein, der rest bleibt unverändert !! also Zitat: hd.../boot/vmlinuz-2.6.7 ... ... ... ...

das selbe bei "initrd": Zitat: hd.. /boot/initrd-2.6.7


(da jeder sein / woanders hat, hab ich das, bei mir zb hd(0,6), durch ... ersetzt ! bloss nicht so übernehmen! hehe)


7.

ok, soweit fertig. wer eine NVIDIA hat, der lade sich nun erstmal den neuen NVIDIA-Linux-x86-1.0-6101-pkg1.run runter und mache diesen mit Code: chmod +x NVIDIA-Linux-x86-1.0-6101-pkg1.run ausführbar. wie man den installiert dann, sprengt hier echt den rahmen. steht auch astrein im howto auf der nvidia-homepage!

also dann: reboot! und: VIEL GLÜCK! Wink


greets! gimpel ______________________________________________________________


Changelog

[edit v1] v2: added bootsplash-patch Wink THX an }-Tux-{ ! ohne dich hätte es etwas länger gedauert! hehe...

[edit v2] neuer bootsplash patch!! THX awagner für den hinweis!

[edit v3] added submount & readded reiserfs-acl-support! (siehe zitat!)

[edit v4] der übersicht halber wurde mal die änderung der fstab in bezug auf acl und submount dahingehend geändert, dass es nur für leutz interessant ist, die submount eh nimmer haben wollen, bzw arge probs beim bauen von submount haben. kleiner TIP: ich hatte probs mit dem von suse mitgelieferten km_submount. das ließ sich partout nicht bauen. mit dem von http://submount.sourceforge.net gab es keinerlei probleme!

[edit v5] geht auch für kernel > 2.6.7, kleines code-cleanup und nochmal das mit subfs etwas verdeutlicht (thx emerald nochmal)

[edit v6] SuSE-kernel enthält etliche patches , besonders der kernel-nongpl part von SuSE 9.2 (W-Lan usw).. sollte mal erwähnt werden.


Ergänzung

awagner hat Folgendes geschrieben: Hi alle, hab' jetzt endlich (nach vielen verkonfigurierten kerneln) ein schönes 2.6.7 am laufen und da in anderen threads noch ein paar Fragen offen waren, mit denen ich mich jetzt auch rumgeschlagen habe, hier ein paar Antworten (oder Verdachte? wie sagt man? Verdachts, Verdächte?):

Zuerst 'ne klasse Nachricht: Seit 2.6.7 hat ReiserFS ACLs in Extended Attributes im kernel-support eingebaut, d.h. man muss die Einträge in der fstab gar nicht ändern, in denen ReiserFS-Partitionen mit acl, user_xattr steht. Very Happy

Dann hab' ich jetzt auch meine Dingelchen aus /usr/src/kernel-modules hinbekommen.

[edit=gimpel.. hehehe] an der stelle erlaub ich mir mal nen einschub! das "dingelchen" in /usr/src/kernel-modules is der SUBMOUNT Smile man werfe YaST an, und installiere das paket: km_submount, dann liegt die quelle für den submount unter /usr/src/kernel-modules/subfs. ok.. weiter! Very Happy [/edit]

Anscheinend hat sich was im kernel-Makefile geändert, denn sobald ich in den modul-Makefiles "modules_add" durch "modules_install" ersetze, flutscht's. ...und dann kann man - wenn man will - auch die subfs-Einträge in der fstab wieder reinnehmen. Ich hab' bisher subfs, fcpcmcia (Fritzcard) und dazuko am laufen. ...darf man halt nicht vergessen, vorher clean zu maken.

Was noch? Ich hab' ipv6 ausgeschaltet, und hab' noch irgendwo Reste davon rumhängen, die mir beim Start ne Fehlermeldung präsentieren, aber sonst ist alles prima. Und die tcgiodev-oder-so-Fehlermeldung ist da, aber damit kann ich leben.

(Mit der neuen, funktionierenden config, versuch ich vielleicht nachher oder irgendwann am Wochenende 2.6.7mm5 (für -mm6 gibt's noch kein bootsplash-patch) zu installieren.)

Bis bald, und danke für den Beistand,

Andreas


BIG THANX awagner!!


Vorlage