Kernel bauen

Aus Ubuntu-Forum Wiki

(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(Optionen)
 
(Der Versionsvergleich bezieht 7 dazwischenliegende Versionen mit ein.)
Zeile 13: Zeile 13:
  sudo apt-get install build-essential kernel-package xmlto libncurses5-dev
  sudo apt-get install build-essential kernel-package xmlto libncurses5-dev
 +
Zunächst ist es notwendig, sich die Kernel-Quellen herunterzuladen. Dafür gibt es (mindestens) zwei Möglichkeiten.
 +
# Man kann die neueste Version der Kernel-Quellen (am besten ''stable'') direkt von der Seite der Kernelentwickler '''http://www.kernel.org''' herunterladen, indem man dort auf den Link "F" (steht für Full Source) klickt. Das Paket speichert man in seinem persönlichen Ordner. Dann verschiebt man das Paket in das Verzeichnis /usr/src: <pre>sudo mv ~/linux-*.tar.bz2 /usr/src/</pre>
 +
# Alternativ kann man die Quellen des jeweils aktuellen '''Ubuntu-Kernels''' (inklusive der Ubuntu-spezifischen Änderungen) beziehen, indem man das entsprechende Paket installiert: <pre>sudo apt-get install linux-source</pre>
-
Anschließend lädt man sich die neusten stable Kernel-Sources von [http://www.kernel.org Kernel.org], indem man auf den Link "F" klickt. Das Paket speichert man in seinem persönlichen Ordner.
+
Dann wechselt man in das Verzeichnis:
-
 
+
-
 
+
-
Dann verschiebt man das Paket in das Verzeichnis /usr/src:
+
-
 
+
-
sudo mv ~/linux-*.tar.bz2 /usr/src/
+
-
 
+
-
wechselt in das Verzeichnis:
+
-
 
+
  cd /usr/src
  cd /usr/src
-
und entpackt es schließlich mit folgendem Befehl:
+
Das Paket entpackt man mit folgendem Befehl:
-
 
+
  sudo tar xfvj linux-*.tar.bz2  
  sudo tar xfvj linux-*.tar.bz2  
-
 
+
Damit die Kernel-Quellen später auch von Programmen gefunden werden können, verlinkt man auf den entpackten Ordner mit einem symbolischen Link:
-
Damit die Kernel-Sources später auch von Programmen gefunden werden können, verlinkt man auf den entpackten Ordner mit einem symbolischen Link:
+
-
 
+
  sudo ln -s ''Zielordner'' linux
  sudo ln -s ''Zielordner'' linux
Als ''Zielordner'' ist der eben entpackte Ordner anzugeben.
Als ''Zielordner'' ist der eben entpackte Ordner anzugeben.
-
 
Nun kann man mit:
Nun kann man mit:
-
 
  cd linux
  cd linux
Zeile 49: Zeile 39:
Um den Kernel richtig zu konfigurieren, sollte man sich über sein System und die verbaute Hardware schlau machen. Hilfreiche Befehle sind hier:
Um den Kernel richtig zu konfigurieren, sollte man sich über sein System und die verbaute Hardware schlau machen. Hilfreiche Befehle sind hier:
-
 
  sudo lspci
  sudo lspci
-
 
und
und
-
 
  sudo lsusb
  sudo lsusb
[[Bild:make_menuconfig.png|thumb|200px|Das Konfigurationsmenu]]
[[Bild:make_menuconfig.png|thumb|200px|Das Konfigurationsmenu]]
-
 
-
 
Hat man diese Informationen, kopiert man sich die Konfiguration des alten Kernels in den Ordner:
Hat man diese Informationen, kopiert man sich die Konfiguration des alten Kernels in den Ordner:
-
 
  sudo cp /boot/config-`uname -r` /usr/src/linux/.config
  sudo cp /boot/config-`uname -r` /usr/src/linux/.config
-
 
Um in das Konfigurationsmenu zu gelangen, gibt man nun folgendes ein:
Um in das Konfigurationsmenu zu gelangen, gibt man nun folgendes ein:
-
 
  sudo make menuconfig
  sudo make menuconfig
-
 
Falls man nur den Kernel upgraden will (bezüglich Sicherheitslecks, Bugs) kann man auch statt des oben genannten Befehls die Kernelkonfiguration des laufenden Kernels übernehmen:
Falls man nur den Kernel upgraden will (bezüglich Sicherheitslecks, Bugs) kann man auch statt des oben genannten Befehls die Kernelkonfiguration des laufenden Kernels übernehmen:
-
 
  sudo make oldconfig
  sudo make oldconfig
-
 
== Navigation ==
== Navigation ==
Zeile 81: Zeile 60:
* die "Leertaste" baut einen Treiber falls möglich in den Kernel ein. In den Kernel verbaute Treiber sind als * gekennzeichnet
* die "Leertaste" baut einen Treiber falls möglich in den Kernel ein. In den Kernel verbaute Treiber sind als * gekennzeichnet
* mit "m" kann man einen Treiber als Modul markieren
* mit "m" kann man einen Treiber als Modul markieren
-
* wenn man den Cursor nach rechts bewegt, kann man sich Hilfe über angewählte Option geben lassen. Empfehlenswert!
+
* mit "?" kann man sich Hilfe über angewählte Option geben lassen. Empfehlenswert!
-
 
+
== Optionen ==
== Optionen ==
-
Wer eine ausführliche Beschreibung der einzelnen Optionen sucht, findet man unter den folgenden Links im Gentoo-Wiki eine exzellente Erklärung der Punkte:
+
Wer eine ausführliche Beschreibung der einzelnen Optionen sucht, findet unter den folgenden Links im Gentoo-Wiki eine exzellente Erklärung der Punkte:
*[http://de.gentoo-wiki.com/Kernel_manuell_kompilieren/x86_2.6.22-gentoo Kernel 2.6.22 x86]
*[http://de.gentoo-wiki.com/Kernel_manuell_kompilieren/x86_2.6.22-gentoo Kernel 2.6.22 x86]
*[http://de.gentoo-wiki.com/Kernel_manuell_kompilieren/x86_2.6.23-gentoo Kernel 2.6.23 x86]
*[http://de.gentoo-wiki.com/Kernel_manuell_kompilieren/x86_2.6.23-gentoo Kernel 2.6.23 x86]
Zeile 94: Zeile 72:
= Den Kernel kompilieren =
= Den Kernel kompilieren =
-
Wenn die Konfiguration des Kernels überstanden ist, kann man damit beginnen den Kernel zu kompilieren.
+
Wenn die Konfiguration des Kernels überstanden ist, kann man damit beginnen, den Kernel zu kompilieren.
-
 
+
Wenn man aus den gleichen Quellen zuvor einen Kernel kompiliert hat, sollte man das Verzeichnis von Überresten säubern:
-
Wenn man aus den gleichen Quellen zuvor einen Kernel kompiliert hat, sollte man das Verzeichnis von Überesten säubern:
+
  sudo make-kpkg clean
  sudo make-kpkg clean
-
 
Nun kann man mit folgendem Befehl ein [[deb]] Paket erstellen:
Nun kann man mit folgendem Befehl ein [[deb]] Paket erstellen:
Zeile 106: Zeile 82:
Als ''Kernelversion'' gibt man die Versionsnummer des zu kompilierenden Kernels an, zB.: 2.6.24.3
Als ''Kernelversion'' gibt man die Versionsnummer des zu kompilierenden Kernels an, zB.: 2.6.24.3
-
 
Wenn man sich sehr gut auskennt, kann man auch den Parameter --[[kernel#initrd|initrd]] weglassen, allerdings müssen dann die Treiber für die Festplatten fest in den [[Kernel]] eingebunden werden. Das Wegfallen eines [[kernel#initramfs|initramfs]] beschleunigt den Systemstart merklich.
Wenn man sich sehr gut auskennt, kann man auch den Parameter --[[kernel#initrd|initrd]] weglassen, allerdings müssen dann die Treiber für die Festplatten fest in den [[Kernel]] eingebunden werden. Das Wegfallen eines [[kernel#initramfs|initramfs]] beschleunigt den Systemstart merklich.
 +
Mehr zu [[kernel#initrd|initrd]] gibt es in [http://de.wikipedia.org/wiki/Initrd Wikipedia].
-
Mehr zu [[kernel#initrd|initrd]] gibt es in [http://de.wikipedia.org/wiki/Initrd Wikipedia]
+
Der Kernel kompiliert nun eine Weile, und wenn er fertig ist kann man die [[deb]] Pakete installieren.
-
 
+
-
 
+
-
Der Kernel kompiliert nun eine Weile und wenn er fertig ist kann man die [[deb]] Pakete installieren.
+
= Installation =
= Installation =
Die kompilierten [[deb]] Pakete befinden sich nun im Ordner /usr/src:
Die kompilierten [[deb]] Pakete befinden sich nun im Ordner /usr/src:
-
 
  cd /usr/src
  cd /usr/src
Anschließend kann man die kompilierten Pakete auf folgende Weise installieren, vorausgesetzt, dass sich vorher keine früheren [[deb]] Pakete darin befanden:
Anschließend kann man die kompilierten Pakete auf folgende Weise installieren, vorausgesetzt, dass sich vorher keine früheren [[deb]] Pakete darin befanden:
-
 
  sudo dpkg -i linux-*.deb
  sudo dpkg -i linux-*.deb
-
 
+
Nach einem Neustart findet sich der [[Kernel]] als neuer Eintrag im [[Grub]]-Menü. Falls ihr die Fehlermeldung [[Kernel#Kernel Panic|Kernel Panic]] bekommt, startet das System noch mal neu probiert nochmal, den Kernel zu laden. Falls das nicht erfolgreich war, habt ihr eine wichtige Einstellungen im [[Kernel]] verbockt oder ausgelassen. Man bootet den alten [[Kernel]] und wiederholt die Anleitung ab
-
Nach einem Neustart findet sich der [[Kernel]] als neuer Eingrag im [[Grub]]-Menü. Falls ihr die Fehlermeldung [[Kernel#Kernel Panic|Kernel Panic]] bekommt, startet das System noch mal neu probiert nochmal, den Kernel zu laden. Falls das nicht erfolgreich war, habt ihr eine wichtige Einstellungen im [[Kernel]] verbockt oder ausgelassen. Man bootet den alten [[Kernel]] und wiederholt die Anleitung ab
+
  sudo make menuconfig
  sudo make menuconfig
bis es funktioniert.
bis es funktioniert.
Zeile 132: Zeile 102:
= Links =
= Links =
-
[http://de.gentoo-wiki.com/Kernel_manuell_kompilieren/x86_2.6.23-gentoo Gentoo-Wiki: Kernelkonfiguration]
+
* [https://help.ubuntu.com/community/Kernel/Compile Anleitung zum Selbstbau des Kernels von der englischsprachigen Ubuntu-Benutzergemeinschaft (englisch)]
-
 
+
* [http://de.gentoo-wiki.com/Kernel_manuell_kompilieren/x86_2.6.23-gentoo Gentoo-Wiki: Kernelkonfiguration]
[[Kategorie:System]]
[[Kategorie:System]]

Aktuelle Version vom 14. Januar 2011, 10:28 Uhr

Inhaltsverzeichnis


1 Warum selbst einen Kernel bauen

Da Ubuntu möglichst viel Hardware unterstützen soll, ist der Standard-Kernel extrem überladen. Das kann das System langsam und instabil machen. Mit einem selbst gebauten Kernel umgeht man diese Probleme, indem man den Kernel genau auf sein System zuschneidet. Das erfordert zwar viel Übung, bis man einen guten Kernel gebaut hat, es rechnet sich aber in der Leistung und Stabilität. Außerdem gewinnt man einen Einblick in das Innenleben seines Linux.

Den perfekten Kernel wird es nur in wenigen Ausnahmefällen geben. Man arbeitet sich eher an die perfekte Konfiguration schrittweise heran.

2 Vorbereitung

Man installiert folgende Pakete um den Kernel bearbeiten und kompilieren zu können:

sudo apt-get install build-essential kernel-package xmlto libncurses5-dev

Zunächst ist es notwendig, sich die Kernel-Quellen herunterzuladen. Dafür gibt es (mindestens) zwei Möglichkeiten.

  1. Man kann die neueste Version der Kernel-Quellen (am besten stable) direkt von der Seite der Kernelentwickler http://www.kernel.org herunterladen, indem man dort auf den Link "F" (steht für Full Source) klickt. Das Paket speichert man in seinem persönlichen Ordner. Dann verschiebt man das Paket in das Verzeichnis /usr/src:
    sudo mv ~/linux-*.tar.bz2 /usr/src/
  2. Alternativ kann man die Quellen des jeweils aktuellen Ubuntu-Kernels (inklusive der Ubuntu-spezifischen Änderungen) beziehen, indem man das entsprechende Paket installiert:
    sudo apt-get install linux-source

Dann wechselt man in das Verzeichnis:

cd /usr/src

Das Paket entpackt man mit folgendem Befehl:

sudo tar xfvj linux-*.tar.bz2 

Damit die Kernel-Quellen später auch von Programmen gefunden werden können, verlinkt man auf den entpackten Ordner mit einem symbolischen Link:

sudo ln -s Zielordner linux

Als Zielordner ist der eben entpackte Ordner anzugeben.

Nun kann man mit:

cd linux

in den Kernel-Source Ordner hineinwechseln.

3 Konfiguration

Nun kommt man zum wichtigsten und schwersten Teil der ganzen Sache: der Konfiguration.

Um den Kernel richtig zu konfigurieren, sollte man sich über sein System und die verbaute Hardware schlau machen. Hilfreiche Befehle sind hier:

sudo lspci

und

sudo lsusb
Das Konfigurationsmenu

Hat man diese Informationen, kopiert man sich die Konfiguration des alten Kernels in den Ordner:

sudo cp /boot/config-`uname -r` /usr/src/linux/.config

Um in das Konfigurationsmenu zu gelangen, gibt man nun folgendes ein:

sudo make menuconfig

Falls man nur den Kernel upgraden will (bezüglich Sicherheitslecks, Bugs) kann man auch statt des oben genannten Befehls die Kernelkonfiguration des laufenden Kernels übernehmen:

sudo make oldconfig

3.1 Navigation

3.2 Optionen

Wer eine ausführliche Beschreibung der einzelnen Optionen sucht, findet unter den folgenden Links im Gentoo-Wiki eine exzellente Erklärung der Punkte:

4 Den Kernel kompilieren

Wenn die Konfiguration des Kernels überstanden ist, kann man damit beginnen, den Kernel zu kompilieren. Wenn man aus den gleichen Quellen zuvor einen Kernel kompiliert hat, sollte man das Verzeichnis von Überresten säubern:

sudo make-kpkg clean

Nun kann man mit folgendem Befehl ein deb Paket erstellen:

sudo make-kpkg --initrd --revision Kernelversion binary

Als Kernelversion gibt man die Versionsnummer des zu kompilierenden Kernels an, zB.: 2.6.24.3

Wenn man sich sehr gut auskennt, kann man auch den Parameter --initrd weglassen, allerdings müssen dann die Treiber für die Festplatten fest in den Kernel eingebunden werden. Das Wegfallen eines initramfs beschleunigt den Systemstart merklich. Mehr zu initrd gibt es in Wikipedia.

Der Kernel kompiliert nun eine Weile, und wenn er fertig ist kann man die deb Pakete installieren.

5 Installation

Die kompilierten deb Pakete befinden sich nun im Ordner /usr/src:

cd /usr/src

Anschließend kann man die kompilierten Pakete auf folgende Weise installieren, vorausgesetzt, dass sich vorher keine früheren deb Pakete darin befanden:

sudo dpkg -i linux-*.deb

Nach einem Neustart findet sich der Kernel als neuer Eintrag im Grub-Menü. Falls ihr die Fehlermeldung Kernel Panic bekommt, startet das System noch mal neu probiert nochmal, den Kernel zu laden. Falls das nicht erfolgreich war, habt ihr eine wichtige Einstellungen im Kernel verbockt oder ausgelassen. Man bootet den alten Kernel und wiederholt die Anleitung ab

sudo make menuconfig

bis es funktioniert.

6 Links

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Forum
Navigation
Internes
Bearbeitungshilfen
Werkzeuge