Patchen eines Kernels
Zur Navigation springen
Zur Suche springen
Patchen eines Kernels
- Aufsteigende Upgrades eines Kernels werden als Patches veröffentlicht.
- Wenn du zum Beispiel die Kernelversion 2.4.14 verwendest und es einen Patch namens patch-2.4.15.gz gibt, der für den 2.4er Kernel bestimmt ist, kannst du deinen Kernel auf Version 2.4.15 aktualisieren, indem du diesen Patch anwendest.
- Der Gedanke hinter dieser Technik ist leicht verständlich. Ein vollständiger Quellbaum des Linux-Kernels ist etwa 70-80 MByte groß.
- Wenn für jede kleine Änderung der gesamte Quellbaum aus dem Netz heruntergeladen werden müsste, wäre das mit erheblichem Aufwand verbunden, obwohl sich vielleicht nur 100 Textzeilen im Quelltext zwischen den beiden Versionen unterscheiden.
- Ein Patch enthält nur die Beschreibung der Unterschiede zwischen den verschiedenen Versionen und ist daher wesentlich kleiner.
patch
- Das Programm 'patch' ist nun in der Lage, solche Patches anzuwenden und die entsprechenden Aktualisierungen im vorhandenen Quelltext vorzunehmen.
- Betrachten wir das oben genannte Beispiel und gehen den Vorgang durch.
- In der Regel werden Patches mit Kompressionsprogrammen komprimiert, um die Ladezeit zu reduzieren. Dabei werden sowohl das klassische gzip als auch das modernere bzip verwendet, das eine bessere Kompressionsrate bietet.
- Anhand der Dateierweiterung lässt sich erkennen, welche Version verwendet wurde:
Erweiterung Bedeutung
Die entsprechenden Programme werden weiter unten auf dieser Seite genauer beschrieben.
| Dateiendung | Beschreibung |
|---|---|
| Keine | Unkomprimiert |
| .gz | Mit gzip komprimiert |
| .bz | Mit bzip komprimiert |
| .bz2 | Mit bzip2 komprimiert |
- Unser Patch heißt patch-2.4.15.gz und ist daher mit gzip komprimiert.
- Das Programm 'patch' (patch(1)) ist nicht in der Lage, selbst zu dekomprimieren, daher müssen wir entweder den Patch vor der Anwendung dekomprimieren oder ihn über eine Pipe zur Dekomprimierung an patch(1) weiterleiten.
- Es ist jedoch ratsam, vor dem Patchen eine Sicherungskopie der aktuellen Kernel-Dateien zu erstellen.
- Dazu kannst du zunächst mit 'make clean' alle Objektdateien (.o) löschen und anschließend mit 'tar' ein entsprechendes Backup-Archiv erstellen:
cd /usr/src/linux
make clean
cd ..
tar -czvf kernelbackup.tgz linux
- Nun haben wir im Falle eines Fehlers eine vollständige Sicherungskopie in der Datei 'kernelbackup.tgz'.
Pfadlevel
- Damit das Programm 'patch' überhaupt weiß, in welchem Verzeichnis es arbeiten soll, muss der Pfadlevel angegeben werden.
- Hier haben wir zwei Möglichkeiten. Entweder wechseln wir zum Verzeichnis '/usr/src' und rufen das Programm mit
- zcat patch-2.4.15.gz | patch -p0
auf oder wir wechseln direkt in das Verzeichnis '/usr/src/linux_x.xx.xx' (wobei die 'xx' natürlich durch die Versionsnummern ersetzt werden müssen) und schreiben
- zcat patch-2.4.15.gz | patch -p1
Mit der Option '-p0' oder '-p1' wird also der Pfadlevel angegeben.