IT-Academy Logo
Sign Up Login Help
Home - Betriebssysteme - Unix - Allgemeines - Selbst einen Kernel kompilieren...



Selbst einen Kernel kompilieren...

Das kompilieren und installieren eines neuen Kernels wird erklärt. In verschiedenen Kreisen auch "Kernel backen" genannt...


Autor: Franz Schaefer (mond)
Datum: 23-01-2002, 19:39:59
Referenzen: /usr/src/linux/Documentation
Schwierigkeit: Fortgeschrittene
Ansichten: 5732x
Rating: Bisher keine Bewertung.

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



| special deluxe |

Übersicht

was tun wenn wir mit den kernel modulen des standard kernels nicht mehr
auskommen? dann brauchen wir einen neuen kernel. wie wir den auf einem
linux system machen lernen wir heute.

wo bekommen wir unsere kernel sourcen her? es gibt viel wo man die kernel
sourcen downloaden kann.

z.b. ftp.xx.kernel.org wobei xx der ISO country code ist. fuer oesterreich
z.b.:

ftp ftp.at.kernel.org

dort dann:

cd /pub/linux/kernel/

2.2er kernels findet man dann in:

cd v2.2

2.4er kernels in:

cd v2.4

bei der nummerierung von kernel hat linux folgende convention: ist die 2te
zahl ungerade dann ist der kernel in entwicklung (z.b. 2.5) ist die 2te
zahl gerade dann sollte der kernel "stabil" sein. natuerlich haben auch
die stabilen immer wieder kleine unzulaenglichkeiten..darum gibt es ja
mehrere davon..

mit stand 14.jaenner.2002 ist der lezte 2.2er kernel:

2.2.20

und der aktuellst 2.4er kernel:

2.4.17

was gerade aktuell ist sieht man mit einem ls am ftp server. oder mit dem
befehl:

finger @kernel.org

hat man sich die kernel sourcen downgeladen muss man sie entpacken. das
kann man im prinzip ueberall machen. per convention tut man ueblicherweise
seine kernel sourcen unterhalb von /usr/src

dort exisitert eventuell schon ein symlink auf die momentan aktuellen
sourcen. (am besten mit ls -l kontrollieren)

also:

cd /usr/src
ls -l
rm linux

nun entpacken wir die sourcen z.b. mit:

tar xfvz /root/linux-2.2.20.tar.gz

(oder flag I oder j falls wir ein bz2 komprimierte archiv haben.)

der kernel entpackt sich unterhalb von verzeichnis "linux". damit wir
spaeter wissen welcher kernel welcher war falls wir mehere downloaden
vershiebn wir die sourcen auf linux-2.2.20 und machen wieder einen symlink.)

also z.b.:

mv linux linux-2.2.20

(natuerlich nur wenn es ein 2.2.20 war)

ln -s linux-2.2.20 linux

und dann ein

cd linux

der naechste schritt ist den kernel zu konfigurieren. dafuer gibt es
verschiedene interfaces. am praktischten ist das "menuconfig" interface.
uebersichtlich aber funktioniert auch in der console.

make menuconfig

damit make menuconfig mal funktioniert muss man natuerlich alle
entwicklungswerkzeuge installiert haben (gcc, make, ..).

(was beim debian oft fehlt ist die entwicklungsversion der bibliothek fuer
die ncurses oberflaeche:

apt-get install libncurses5-dev

)

nun kann man auswaehlen wie man denn seinen kernel haette. mehr dazu
spaeter.

ist man fertig speichert man seine configuration ab. es empfiehlt sich
eine kopie der einstellungen auch wo anders abzulegen (z.b.
/usr/src/namedesrechners-kernelbezichnung.conf mittels

"Save Configuration to an Alternate File")

die einstellungen kann man dann spaeter fuer einen anderen (neueren)
kernel weiter benutzen und muss nicht immer alle sachen neu auswaehlen nur
weil man z.b. einen extra treiber fuer eine bestimmte netzwerkkarte dazu
haben will etc... und es ist spaeter nachvollziehbar mit welchen
einstellungen der kernel compiliert wurde.)


ist man mit dem make menuconfig fertig so muss man den kernel uebersetzen.
dazu gibt es verschiedenste moeglichkeiten... einige davon machen die
folgenden schritte alle automatisch aber ich will hier die stufen einzeln
besprechen:


make dep clean bzImage

macht (wenn keine fehler auftreten ..was ueblicherweise nicht passiert und
wenn man sich auf einem intel/amd system befindet:)
ein file in arch/i386/boot mit dem namen bzImage:

ls -l arch/i386/boot/bzImage

sollte also das datum und die groesse des neuen kernels zeigen.
unser kernel image. (das file ist ein selbstentpackendes.. der kernel
enpackt sich beim starten..) man kann den kernel natuerlich nicht einfach
starten sondern kann ihn nur zum booten verwenden.

als naechstes machen wir die module:

make modules

erzeugt alle module. die wollen wir unterhalb von /lib/modules/2.xx.xx
installieren. das geht mit:

make modules_install

(achtung: will man module eines 2.4er kernels auf aelteren systemen
verwenden benoetigt man eine neue version des "modutils" packets. das
findet man auch auf den kernel mirror ftp servern)

find /lib/modules/2.x.x.

zeigt uns jetzt also unsere gerade compilierten module.

als naechstes installieren wir den kernel. wohin das haengt davon ab wie
wir booten. zum booten gibt es sehr viele verschiedene moeglichkeiten
ueblicherweise aber wird mit LILO gebootet:

wir compieren unseren kernel z.b. auf:

cp arch/i386/boot/bzImage /boot/bzim2220meinersterkernel

damit dieser kernel vom lilo verwendet ist tragen wir das in

/etc/lilo.conf ein:

image=/boot/bzim2220meinersterkernel
label=Linux

(dort gibt es meist auch einen abschnitt mit "label=old" dort tragen wir
den bis jetzt verwendeten kernel ein. falls der neue nicht so funktioniert
wie wir wollen koennen wir dann beim booten immer noch durch auswahl von
"old" mit dem vorherigen kernel booten... und alles funktioniert wie
bisher.)

durch eingabe des befehles:

lilo

wird dann ein neuer bootsektor geschrieben der den neuen kernel verwendet.

man kann ein kernel image file uebrigens auch ganz ohne jeglichen
bootloader direkt auf eine floppy schreiben die dann bootbar ist. z.b.:

cat arch/i386/boot/bzImage > /dev/fd0

(da man in diesem falle dem kernel keine parameter uebergeben kann man mit
dem befehl rdev das root device umaendern:

rdev /dev/fd0

zeigt das root device des kernels an den wir eben auf die floppy
geschrieben haben.

rdev /dev/fd0 /dev/hdb2

wuerde das root device auf /dev/hdb2 setzen..

jetzt eine kurze uebersicht ueber einige wichtige einstellungen: (hier von
2.4er kernel abber 2.2er ist aehnlich):

(mit auswahl von <HELP> bekommt man zu den meisten punkten eine kurze
erklaerung)

Code maturity level options --->

[*] Prompt for development and/or incomplete code/drivers

sollte man einschalten. man bekommt damit auch punkte zu auswahl die noch
nicht ganz so getestet sind..aber die muss man ja nicht anwaehlen wenn
man nicht will..


Loadable module support --->

[*] Enable loadable module support
[*] Set version information on all module symbols
[*] Kernel module loader

schaltet man ueblicherweise ein.

Processor type and features --->

da waehlt man seinen prozessor aus. welchen man hat sieht man mit

cat /proc/cpuinfo

[ ] Symmetric multi-processing support

braucht man erst wenn man mehrere prozessoren in einem computer hat..
also ueblicherweise nicht..

unter

Block devices --->

kann man loopback oft gebrauchen. RAM disk und initrd support sind
notwendig fuer distributionen die mit initrd booten (neuere suse, redhat,
etc..) (ueber den bootvorgang lernen wir demnaechst mehr)

unter den networking options empfiehtl sich "firewalling" support zu
compilieren. eventuell als modul.


Network device support --->

hier sollte man sicherheitshalber PPP dabeihaben (reicht meist als modul)
und die wichtigsten netzwerkarten:

3com 3c59x
RealTek RTL-8139
PCI NE2000 and clones
und
ISA NE2000

aufjedenfall mitdabei haben... andere bei bedarf..

bei

Console drivers -->

empfiehlt sich:

[*] Video mode selection support

bei manchen distributionen ist inzwischen die unsitte ausgebrochen mit
einer grafischen oberflaeche zu booten die schon im console modus einen
"framebuffer" benoetigt. in so einem falle muss man auch "framebuffer"
support auswaehlen.


EXERCISES:

* schau nach ob du die kernel sourcen zu deinem aktuellen kernel auf
deiner maschine findest. wenn ja sieh dir die einstellungen mit

make menuconfig

an. speichere aenderungen nicht ab.

* hohl dir aktuelle kernel sourcen (wenn du bist jetzt 2.2 verwendest dann
am besten einen neueren 2.2er wenn du schon 2.4 verwendest dann den
letzten 2.4er) installiere sie unterhalb von /usr/src ACHTUNG: beim
entpacken nicht bestehende kernels ueberschreiben d.h. es darf kein link
oder verzeichniss existieren das schon linux heisst..)

configuriere den kernel und compilieren ihn. mach dir module. versuch
mit dem neuen kernel zu booten. (eventuell zuerst mal von floppy)

______________________________________________
CD ist ein service von SILVER SERVER
der inhalt unterliegt der GFDL
_______________________________________________



[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06245
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1147
Comments: 0