ubuntuusers.de » Wiki » Kernel

Suchergebnisse werden hervorgehoben. Suchwörter ausblenden.

Kernel

Achtung!

Diese Seite wird aktuell von barcc überarbeitet. Bitte hier keine Änderungen mehr vornehmen, sondern in Baustelle/Kernel!

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Ein Betriebssystemkern oder Systemkern (engl. "kernel") ist der zentrale Bestandteil eines Betriebssystems. In ihm ist die Prozess- und Datenorganisation festgelegt, auf der alle weiteren Softwarebestandteile des Betriebssystems aufbauen. Gängige Anforderungen an einen Systemkern sind Parallelverarbeitung verschiedener Aufgaben (Multitasking), Einhaltung zeitkritischer Grenzen, Offenheit für unterschiedlichste Anwendungen und Erweiterungen. (aus der Wikipedia)

Den Linux-Kernel gibt es in verschiedenen Varianten. Hauptsächlich sind dies:

Kernel installieren

Bei der Installation von Ubuntu wird selbstverständlich automatisch ein Kernel installiert, ohne diesen wäre das ganze System nicht lauffähig. Unter Ubuntu werden Kernel wie normale Software auch über die Paketverwaltung installiert [1]. Die entsprechenden Paketnamen heißen immer

  • linux-image-VERSION-ABINUMMER-VARIANTE

bzw. als konkretes Beispiel

  • linux-image-2.6.15-25-generic

Aber Achtung. Einen Kernel sollte man immer über die Metapakete wie

  • linux-generic

installieren, so wird gewährleistet, dass bei einem Update immer die passenden Module und Kernel Header Dateien installiert werden. Bei der Installation eines Kernels wird dieser auch automatisch in den Bootmanager GRUB eingetragen, so dass beim nächsten Start automatisch die neuste Kernel-Version gebootet wird. Weitere Informationen zu den Metapaketen und Infos zu den unterschiedlichen Architekturen findet man hier.

Mainline-Kernel

Seit März 2009 gibt es weiterhin die Möglichkeit, sogenannte "Mainline-Kernel" zu installieren. Mehr Informationen findet man in Artikel Mainline-Kernel.

Kernel deinstallieren

Durch automatische Updates werden neue Versionen des Kernels auf dem System installiert. Dies erkennt man, wenn man beim Booten des System in GRUB mehrere Einträge zum Booten des Systems sieht, also z.B.

kernelauswahl_beim_booten.png

Hier erkennt man, dass zwei Kernel im System vorhanden sind. Einmal ein Kernel 2.6.27-9-generic und einmal ein Kernel mit der Versionsnummer 2.6.27-7-generic. Nach einem Update des Kernels über die automatischen Updates wird der alte Kernel nie gelöscht. Falls es zu Problemen mit dem neuen Kernel kommen sollte, ist es dadurch möglich noch den alten Kernel zu booten.

Betreibt man ein Ubuntu-System über einen längeren Zeitraum, so häufen sich die verschiedenen Kernel-Versionen an. Da ein Kernel zusammen mit Header-Dateien und Modulen einiges an Platz auf der Festplatte belegen kann, sollte man bei Gelegenheit ältere Kernelversionen, die man nicht mehr nutzt, von Hand deinstallieren. Ganz besonders gilt dies, wenn man für /boot eine eigene Partition erstellt hat.

Will man also im obigen Beispiel den älteren Kernel 2.6.27-7-generic deinstallieren, so sucht man in der Paketverwaltung nach dem Paket

  • linux-image-2.6.27-7-generic

und deinstalliert [1] es. Dabei werden auch automatisch alle dazugehörigen Kernelmodule und Header entfernt. Ebenso der Eintrag in Grub, um diesen Kernel zu booten. Alternativ kann man mit diesem Befehl

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge 

alle alten Kernel inklusive der Kernel-Header deinstallieren.

Hyper-Threading aktivieren

Hyper-Threading (HT) wird bei der Installation von Ubuntu Linux nicht immer aktiviert. Dies kann man jedoch mit ein paar Handgriffen schnell ändern. Zuerst muss sichergestellt sein, dass ein passender Kernel mit SMP-Unterstützung installiert ist. Ab Ubuntu Edgy Eft 6.10 ist das der generic-Kernel, unter Dapper Drake 6.06 die 686-, k7- oder amd64-k8-Kernel.

Um zu prüfen, ob die Installation den Prozessor doch erkannt hat, gibt man im Terminal [3] folgenden Befehl ein:

cat /proc/cpuinfo 

Werden hier zwei Prozessoren angezeigt, ist der nächste Schritt nicht nötig.

Um die Funktion manuell zu aktivieren, muss man ht=on oder acpi=ht als Boot-Parameter für den Kernel hinzufügen. Wie das geht, ist im Artikel Booten beschrieben. Nachdem man die Änderungen gespeichert hat, ist Hyper-Threading nach einem Neustart des Rechners aktiv.

Hinweis:

Nicht jeder Prozessor, bei dem mittels cat /proc/cpuinfo das Flag ht angezeigt wird, ist auch tatsächlich HT-fähig.

Kernel aus den Quellen bauen

Manchmal benötigt man einen angepassten Kernel mit zusätzlichen Features, oder ein normalerweise dynamisch zu ladender Treiber soll fest eingebaut werden. Dann muss man sich seinen eigenen Kernel aus den Quellen kompilieren. Die folgende Anleitung beschreibt einen auf Debian-artige Systeme wie Ubuntu abgestimmten Weg für Kernel 2.6.x., der der Standardkernel für alle unterstützten Ubuntu-Versionen ist.

Die Ubuntu-Methode

Diese Anleitung funktioniert nur mit aus dem git-tree und mit apt-get source heruntergeladenen Quellen, aber nicht mit Quellcode von kernel.org.

Compiler und Tools installieren

Es müssen folgende Pakete installiert sein [1]:

  • fakeroot

  • build-essential

  • makedumpfile (ab Intrepid)

und danach für Ubuntu-Versionen vor Intrepid:

  • linux-kernel-devel

Für Ubuntu-Versionen ab Ubuntu 8.10 Intrepid verwendet man folgenden Befehl [3]:

sudo apt-get build-dep linux 

Kernelquellen herunterladen

Jetzt wechselt man in das Verzeichnis, in dem man den Kernel bauen will. In diesem Verzeichnis liegen dann später auch die fertigen Pakete des selbst gebauten Kernels. Dort führt man für Versionen vor Hardy folgende Befehle aus

sudo apt-get build-dep linux-source
apt-get source linux-source 

für Versionen ab Hardy (8.04):

sudo apt-get build-dep linux-image-$(uname -r)
apt-get source linux-image-$(uname -r) 

Anschließend findet man im aktuellen Ordner folgende Dateien (evtl. andere Versionsnummern):

  • linux_2.6.28.orig.tar.gz (Quellcode des Kernels)

  • linux_2.6.28-11.42.diff.gz (Debian/Ubuntu-Patches zum Kernel)

  • linux_2.6.28-11.42.dsc (Beschreibung des Quellcode-Paketes)

  • linux-2.6.28 (Verzeichnis mit dem entpackten und gepatchten Quellcode)

Will man eine aktuellere Version, kann man den Kernel auch aus den Git-Archiven herunterladen. Dazu installiert man

  • git-core

und führt folgenden Befehl aus (in diesem Beispiel für Jaunty) [3]:

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-jaunty.git 

Abhängig von der Verbindungsgeschwindigkeit kann das längere Zeit dauern, da mehrere hundert Megabyte geladen werden müssen.

Hat man bereits ein Kernel-Archiv kann man das auf einige Megabytes reduzieren mit

git clone --reference ubuntu-intrepid/ git://kernel.ubuntu.com/ubuntu/ubuntu-jaunty.git 

Nähere Informationen zur Verwendung von git für den Kernel findet man hier.

Für die weitere Anleitung wechselt man in das Verzeichnis mit dem Quellcode.

Eigene Variante erstellen

Dieser Schritt ist nicht unbedingt notwendig, denn man kann natürlich auch eine der originalen Varianten modifizieren, aber er ist sinnvoll, wenn man den eigenen Kernel mit dem originalen vergleichen will. In diesem Schritt wird eine Variante "variante" erstellt, die auf "generic" basiert. Außerdem wird angenommen, dass auf einem 64-Bit-System gearbeitet wird. Auf einem 32-Bit-System muss man "amd64" durch "i386" ersetzen.

Eigene Variante erstellen unter Hardy

Es müssen folgende Dateien und Verzeichnisse erstellt werden:

  • debian/binary-custom.d/variante/config.amd64 (Kernelkonfiguration der eigenen Variante)

  • debian/binary-custom.d/variante/rules

  • debian/binary-custom.d/variante/vars

  • debian/binary-custom.d/variante/patchset (Verzeichnis für Patche)

Das kann man mit folgenden Befehlen machen:

mkdir debian/binary-custom.d/variante
cat debian/config/amd64/config.generic debian/config/amd64/config >debian/binary-custom.d/variante/config.amd64
touch debian/binary-custom.d/variante/rules
touch debian/binary-custom.d/variante/vars
mkdir debian/binary-custom.d/variante/patchset 
Eigene Variante erstellen ab Intrepid

Zunächst muss man einige Dateien neu erzeugen [3]

cp debian/abi/2.6.28-11.41/amd64/generic debian/abi/2.6.28-11.41/amd64/variante
cp debian/abi/2.6.28-11.41/amd64/generic.modules debian/abi/2.6.28-11.41/amd64/variante.modules
cp debian/config/amd64/config.generic debian/config/amd64/config.variante 

Außerdem müssen einige Dateien geändert werden

  • debian/scripts/misc/getabis

  • debian/rules.d/amd64.mk

  • debian/control.stub

  • debian/control

Im Einzelnen:

debian/scripts/misc/getabis: Man sucht nach der Zeile:

getall amd64 generic server

und ersetzt sie durch

getall amd64 generic server variante

debian/rules.d/amd64.mk:

Man sucht nach der Zeile:

flavours        = generic server

und ersetzt sie durch

flavours        = generic server variante

debian/control.stub und debian/control:

In beiden Dateien kopiert man die drei Abschnitte, die mit folgenden Zeilen beginnen:

  • Package: linux-image-2.6.28-11-generic

  • Package: linux-headers-2.6.28-11-generic

  • Package: linux-image-debug-2.6.28-11-generic

Abschnitte werden dabei begrenzt durch Leerzeilen und in den kopierten Abschnitten ersetzt man "generic" durch "variante" in der Package-Zeile.

Kernel-Konfiguration ändern

Die Konfigurationsdateien des Kernels findet man unter debian/config/ARCH/, wobei ARCH für die Architektur steht, die man kompilieren will, z.B. "i386" oder "amd64". Änderungen der Datei config betreffen alle Varianten der jeweiligen Architektur, Änderungen der anderen Config-Dateien (z.B. config.generic) betreffen nur die eine Variante. Man kann die Änderungen mit einem Texteditor durchführen. Bequemer ist allerdings die Verwendung eines Konfigurationsprogramms.

Damit man keine Fehlermeldungen bekommt, muss man vorher noch ein paar Skripte ausführbar machen:

chmod +x debian/scripts/misc/* 

Will man alle Varianten aller Architekturen konfigurieren, verwendet man folgenden Befehl:

debian/rules editconfigs 

Um die Varianten einer Architektur zu ändern, verwendet man folgenden Befehl:

debian/scripts/misc/doconfig ARCH 

ARCH steht wiederum für die Architektur, z.B. i386, amd64.

Das Script verwendet zur Konfiguration die ncurses-basierte Oberfläche. Möchte man das GTK- oder Qt-Konfigurationsprogramm verwenden, kann man in dem Skript menuconfig durch xconfig oder gconfig ersetzen. Entweder mit einem Editor oder einem der folgenden Befehle:

( cd debian/scripts/misc && sed 's/menuconfig/xconfig/' doconfig >doconfig-qt ) 

für die Qt-Oberfläche oder

( cd debian/scripts/misc && sed 's/menuconfig/gconfig/' doconfig >doconfig-gtk ) 

für die GTK-Oberfläche und startet dann:

bash debian/scripts/misc/doconfig-qt ARCH 

oder

bash debian/scripts/misc/doconfig-gtk ARCH 

Nachdem ein Patch angewendet oder die Konfiguration geändert wurde, sollte man folgenden Befehl ausführen um sicherzustellen, dass die Konfiguration konsistent ist.

Für alle Architekturen:

debian/rules updateconfigs 

Oder nur für eine:

debian/scripts/misc/oldconfig ARCH 

Kompilieren und Pakete erstellen

Um alle Varianten der Architektur, auf der kompiliert wird, zu erstellen, verwendet man den Befehl:

AUTOBUILD=1 fakeroot debian/rules binary-debs 

Soll nur eine Variante erstellt werden, dann:

AUTOBUILD=1 NOEXTRAS=1 fakeroot debian/rules binary-VARIANTE 

Für selbst erstellte Varianten unter Hardy nimmt man folgenden Befehl:

AUTOBUILD=1 NOEXTRAS=1 fakeroot debian/rules custom-binary-VARIANTE 

VARIANTE ersetzt man dann durch z.B. "generic", "server" oder eine selbst erstellte Variante. Hat man mehr als einen Prozessorkern, lässt sich der Vorgang beschleunigen, indem man dem Befehl CONCURRENCY_LEVEL=2 (für zwei Prozessorkerne, ersetze 2 durch die tatsächliche Anzahl) voranstellt.

Hinweis: Die Quellen im Internet empfehlen, hier entweder die Anzahl der CPU-Kerne oder die Anzahl CPU-Kerne + 1 einzusetzen (bei Prozessoren mit Hyperthreading x2). Was auf der eigenen Maschine das beste Ergebnis bringt, sollte man einfach ausprobieren. Wenn man ABI-Fehler erhält, kann man die ABI-Prüfung abstellen, indem man skipabi=true voranstellt. Wenn man Fehler über nicht vorhandene Module erhält, kann man skipmodule=true voranstellen. Also insgesamt dann z.B.

CONCURRENCY_LEVEL=2 AUTOBUILD=1 NOEXTRAS=1 skipabi=true skipmodule=true fakeroot debian/rules binary-VARIANTE 

Nach erfolgreichem Ende findet man in seinem Verzeichnis das Header- und das Image-Paket bereit zur Installation.

Installieren

Achtung!

Vor der Installation sollte man darauf achten, dass der selbstkompilierte Kernel eine andere Version oder eine andere Variante hat als der laufende Kernel, damit man im Falle eines Fehlers den ursprünglichen noch zur Verfügung hat.

Installieren mit

sudo dpkg -i headers-paket image-paket 

Dabei werden ab Intrepid Treiber, die DKMS verwenden (z.B. für Grafikkarten oder Virtualbox) falls notwendig automatisch angepasst. Sollte dabei ein Fehler auftreten, kann es notwendig sein die restricted-modules neu zu bauen.

Skript

Um den Vorgang zu vereinfachen gibt es ein halbautomatisches Skript {dl}. Man speichert das Skript als make-ubuntu-kernel.sh in dem Verzeichnis, in dem man den Kernel erstellen will, und macht es ausführbar.

chmod +x make-ubuntu-kernel.sh 

Weitere Hinweise zur Benutzung erhält man mit

./make-ubuntu-kernel.sh 

Einen Kernel einer einzelnen Variante baut man mit

./make-ubuntu-kernel.sh VARIANTE 

Das Skript folgt dabei ungefähr den Schritten dieser Anleitung.

Die klassische Debian-Methode

Compiler und Tools installieren

Es müssen folgende Pakete installiert sein [1]:

  • build-essential

  • kernel-package

  • fakeroot

Und danach entweder

  • libncurses5-dev

für eine ncurses-basierte Oberfläche zur Konfiguration oder

  • libgtk2.0-dev

  • libglib2.0-dev

  • libglade2-dev

für die GTK-Oberfläche oder

  • libqt3-mt-dev

für die Qt-Oberfläche.

Eins davon sollte man nehmen, sonst wird es später arg langwierig. Wer ohnehin gelegentlich GTK-Programme kompiliert, hat mit der zweiten Möglichkeit eine komfortable Oberfläche, ansonsten ist ncurses eine sparsame aber benutzbare Möglichkeit.

Kernelquellen installieren

Die Quellen des Ubuntu-Kernels, der bereits einige Patches enthält, können als Paket

  • linux-source

  • linux-headers-generic (der Variante entsprechend, [5])

installiert werden [1].

Experten-Info:

Wer genau weiß, was er tut, kann auch einen sogenannten "Vanilla"-Kernel von kernel.org {en} als Basis nehmen.

Optional: Kernelpatches herunterladen

Wer den Kernel patchen will, weiß vermutlich, was er tut und welchen Patch er benötigt. Besonders komfortabel ist es, wenn der benötigte Patch in einem Paketrepository zu haben ist. Einige Patches finden sich beispielsweise in universe, das man gegebenenfalls erst freischalten muss [2]. Bei diesen ist wie bei allen Patches auf die richtige Versionsnummer zu achten, die meist erkennen lässt, für welche Kernelversion der Patch gedacht ist. Oft funktionieren aber auch ähnliche Versionen.

Kernelquellen auspacken

Die Kernelquellen befinden sich nun als tar.bz2-Archiv im Verzeichnis /usr/src. Um die Kernelquellen auszupacken, wechselt man in das Verzeichnis, in dem man den Kernel bauen will (z.B. ~/src/) und führt folgenden Befehl aus (Versionsnummer kann abweichen):

tar xjvf /usr/src/linux-source-2.6.28.tar.bz2
cd linux-source-2.6.28 

Optional: Kernel patchen

Patches, die über das Paketmanagement installiert wurden, befinden sich in einem Unterverzeichnis von /usr/src/kernel-patches/diffs. Sie liegen üblicherweise als gz- oder bz2-komprimierte Diff-Datei vor (.diff.gz oder .diff.bz2). Sie lassen sich mit folgendem Befehl einbauen:

zcat /usr/src/kernel-patches/diffs/<Patchverzeichnis>/<Patchdatei> | sudo patch -p1 

Bei bz2-Kompression ist zcat durch bzcat zu ersetzen.

Kernel konfigurieren

Die Konfiguration des Kernels wird in der Datei .config gespeichert. Eine gute Vorlage hierfür bietet die Konfiguration des bereits installierten Kernels. Sie wird ins aktuelle Verzeichnis kopiert:

cp /boot/config-<Kernelversion> .config 

Hinweis:

Alternativ kann die Konfiguration des laufenden Kernels meist auch aus einer komprimierten Datei in /proc gelesen werden. Dies ist im Standard-Kernel von Ubuntu nicht aktiviert, bei einem selbstkompilierten kann man dieses Feature aber aktivieren:

zcat /proc/config.gz | sudo dd of=.config 

Falls die config-Datei von einer älteren Kernelversion stammt, kann man mit dem Befehl

make oldconfig 

die Konfiguration auf die aktuelle Version "updaten". Dabei wird nach den Einstellungen für die neuen Kerneloptionen gefragt.

Alternativ kann man mit

make defconfig 

eine (fast) minimale Standardkonfiguration erzeugen. Danach muss man nur noch sehr wenig ändern.

Achtung!

Es wird nur Unterstützung für ext2 und ext3 konfiguriert, also unter "File Systems" korrigieren, falls man ein anderes Dateisystem verwendet.

Auf Basis dieser Konfiguration kann man nun eigene Einstellungen vornehmen. Je nach anfangs installierten Bibliotheken geht das mit

make menuconfig 

(ncurses),

make gconfig 

(GTK), oder

make xconfig 

(Qt).

Unter "general Setup - LOCALVERSION" kann dabei eine Bezeichnung angegeben werden, die die Zuordnung des Kernels später erleichtert. Im Makefile kann auch eine EXTRAVERSION eingestellt werden: sie erscheint an die Versionsnummer angehängt (z.B. 2.6.10-noscsi).

Kernel kompilieren

Nach Abschluss der Konfiguration kann der Kernel kompiliert werden. Der folgende Befehl erzeugt auch gleich einfach installierbare .deb-Pakete für kernel-image und kernel-headers:

export CONCURRENCY_LEVEL=3
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-BEZEICHNUNG kernel-image kernel-headers 

Der erste Befehl dient dazu, eine Dual Core CPU vollständig auszunutzen. Da der Kompilierungsprozess normalerweise nur einen Kern benutzt, verkürzt sich die benötigte Rechenzeit deutlich. Siehe dazu auch den Hinweis oben. Den Quellcode säubert man durch den zweiten Befehl, ohne diesen Befehl kann es zu Problemen kommen. Bei dem dritten Befehl kann die BEZEICHNUNG beliebig gewählt werden, sollte aber nicht mit den bereits vorhandenen Kerneln im System kollidieren. Ein Beispiel wäre der Name eines eingespielten Patches (z.B. für einen Pentium 4 mit hdaps hdaps).

Weitere Informationen findet man im Debian-Anwenderhandbuch und in der Manpage von make-kpkg.

Vor einem erneuten Kompiliervorgang kann man das Verzeichnis aufräumen mit:

make-kpkg clean 

und

make clean 

Wenn eine Fehlermeldung kommt, dass die Datei arch/i386/boot/bzImage fehlt, hilft der Aufruf

make clean bzImage && make-kpkg --initrd kernel_image && make && make-kpkg --initrd binary  

Alternativ: Allerdings ist eine initrd nicht zwingend notwendig, wenn man seine Hardware kennt (das tut man meist wenn man seinen eigenen Kernel kompiliert) und keine LVM/Raid/dm_crypt/USB/NFS/SMB/LDAP/etc.-Unterstützung braucht, um das root-Dateisystem zu mounten. In diesem Falle deaktiviert man in der Konfigurationsphase die Unterstützung für initrd und bindet die Treiber für das root-Laufwerk ( meist die ATAPI / IDE Treiber für die Festplatte ) fest und nicht als Modul ein. Hilfreich ist auch das feste Einbinden von USB wenn man eine USB-Tastatur und/oder -Maus benutzt. Will man eine externe Firewire-Festplatte schon beim Booten einbinden, müssen auch die Firewire-Treiber fest in den Kernel kompiliert werden. Danach startet man das Kompilieren ohne den Parameter --initrd.

Kernel installieren

Das erzeugte Kernelpaket kann nun mit dem folgenden Befehl installiert werden:

sudo dpkg -i ../kernel-image-<xxx>.deb 

Neustart und Test des neuen Kernels

Nach einem Neustart des Systems lässt sich der neue Kernel im Bootmenü auswählen.

Kernelgröße anschauen

Um zu überprüfen, ob der selbstgebackene Kernel größer oder kleiner als der alte ist, kann man die /boot/vmlinuz im Terminal [3] vergleichen.

ls -lh /boot/vmlinuz-2.6.12   # neuer Kernel 
-rw-r--r--  1 root root 1,1M 2005-12-29 12:14 /boot/vmlinuz-2.6.12
ls -lh /boot/vmlinuz-2.6.12-10-386  # alter Kernel 
-rw-r--r--  1 root root 1,2M 2005-12-22 14:14 /boot/vmlinuz-2.6.12-10-386

Wie man sieht, ist der neue Kernel um 0,1 MB kleiner...

Kernelcheck

Um einen Vanilla Kernel schnell und einfach zu kompilieren, gibt es das Programm Kernelcheck. Eine ausführliche Anleitung gibt es in einem englischsprachigen Blog {en}. In dem entstehenden Kernel können während der Konfiguration keine Patche integriert werden. Wenn man den Kompiliervorgang abbricht, kann man die entstehende Konfigurationsdatei gut als Grundlage für einen eigenen Kernel nutzen, der Quellcode befindet sich wie gewohnt im Ordner /usr/src.

restricted-modules aus den Quellen bauen

Quellen herunterladen

Die aktuelle Version der Quellen bekommt man mit:

sudo apt-get build-dep linux-restricted-modules-common
apt-get source linux-restricted-modules-common 

Im aktuellen Verzeichnis sollten jetzt diese Dateien zu finden sein (Versionsnummern können abweichen):

  • linux-restricted-modules_2.6.28-13.17.dsc: Beschreibung des Quellpaketes

  • linux-restricted-modules_2.6.28-13.17.tar.gz: Quellcode

  • linux-restricted-modules-2.6.28/: Verzeichnis mit entpacktem Quellcode

An diesen Dateien kann man ablesen, dass die restricted-modules die ABI-Nummer 13 haben. Der selbstgebaute Kernel muss die gleiche ABI-Nummer haben und muss bereits installiert sein, damit die restricted-modules gebaut werden können. Für die folgenden Schritte wechselt man in das erzeugte Verzeichnis, z.B.:

cd linux-restricted-modules-2.6.28/ 

Für die folgende Anleitung wird angenommen, dass auf einer 64-Bit-Architektur (amd64) kompiliert wird und die Variante des eigenen Kernels "variante" ist. Auf einer 32-Bit-Architektur ersetzt man "amd64" durch "i386".

Variante anpassen (bis Hardy)

Man muss zwei Dateien in einem Editor bearbeiten:

  • debian/rules

  • debian/control.stub.in

Im Einzelnen:

debian/rules: Man sucht die Zeile (natürlich mit der passenden Architektur)

ifeq "$(DEB_HOST_ARCH)" "amd64"

und ersetzt in diesem Abschnitt die Zeilen

flavours := $(addprefix $(kernel_abi_version)-,generic openvz rt server xen)

durch:

flavours := $(addprefix $(kernel_abi_version)-,generic openvz rt server xen variante)

Außerdem muss noch eine weitere Zeile geändert werden. Man sucht

binary-arch: install build-udebs

und ersetzt sie durch:

binary-arch: install # build-udebs

Das verhindert das Erstellen von udeb-Paketen, die man meistens nicht braucht und die häufig Fehler verursachen. Optional kann man noch nach den Zeilen

FGLRX   := 1
NVIDIA  := 1
MADWIFI := 1
BCMWL   := 1
FRITZ   := 1
LTMODEM := 1
VMWARE  := 0
VMDESCHED := 1

suchen und bei den nicht benötigten Treibern "1" durch "0" ersetzen.

debian/control.stub.in: Man sucht den Abschnitt, der mit folgender Zeile beginnt:

Package: linux-restricted-modules-@@ABIVER@@-generic

Diesen Abschnitt kopiert man und ersetzt alle "-generic" durch "-variante".

Variante anpassen (ab Intrepid)

Man erzeugt die zwei Dateien debian/control.d/vars.variante und debian/config/amd64/config.variante:

cp debian/control.d/vars.generic debian/control.d/vars.variante
cp debian/config/amd64/config.generic debian/config/amd64/config.variante 

Kompilieren und Pakete erstellen

Zuerst erstellt man die Datei debian/control neu:

fakeroot debian/rules debian/control 

Jetzt kann man eine einzelne Variante bauen mit:

fakeroot debian/rules binary-arch arch=amd64 flavours="variante" 

Alle Varianten baut man mit (Unter Hardy scheint nur diese Möglichkeit zu funktionieren):

fakeroot debian/rules binary-arch 

Das fertige Paket installiert man mit:

sudo dpkg -i linux-restricted-modules-2.6.28-13-variante_2.6.28-13.17_amd64.deb 

Diese Revision wurde am 4. Februar 2010 um 06:53 Uhr von noisefloor erstellt.
Dieser Seite wurden folgende Begriffe zugeordnet: System

Passwort vergessen?