Obwohl ich nicht als maintainer dienen werde, möchte ich hier
einige Infos weitergeben, die ich mir bei der Implementierung
des LZMA-Supports in U-Boot und Kernel-JFFS2 angeeignet habe.
Auf der Dbox2 werden Kernel 2.4.37.6 und 2.6.26.8 ( > 2.6.26
geht nicht, da arch/ppc nicht mehr existiert) verwendet.
U-Boot fungiert als second-stage-Bootloader, der vom Dbox-
Bootloader aufgerufen wird. Für den s-s-Bootloader sind 128 KB
im Flash reserviert, diese Partition beinhaltet nur U-Boot, muss
aber mit
mkflfs erstellt werden, da der Dbox-Bootloader dieses
spezielle Format erwartet. Imho sollte mkflfs ebenfalls in Mainline
U-Boot integriert werden.
Für beide Kernel wird Squashfs 3.0 mit optionalem LZMA 4.40
verwendet. Neuere LZMA-Versionen für Squashfs 3.0 sind mir
nicht bekannt. Neuere Squashfs-Versionen sind für Kernel 2.4
nicht verfügbar, deshalb wird auch bei Kernel 2.6 Squashfs 3.0
eingesetzt, damit U-Boot Kernel-unabhängig booten kann.[1]
Mainline U-Boot beinhaltet keinen Squashfs-Support, im Tuxbox-
CVS gibt es den passenden Squashfs 3.0-LZMA 4.40-Support.
Für JFFS2 wird LZMA 4.65 in beiden Kernel-Versionen verwendet.
In der Praxis kann ein JFFS2-only-Image mit LZMA-Kompression
oder ein Squashfs-LZMA-Image mit JFFS2 (ohne LZMA)-/var-
Partition genutzt werden. Theoretisch kann in einem Squashfs-
LZMA-Image auch /var LZMA-komprimiert sein, dazu müsste
U-Boot beide LZMA-Bibliotheken (4.40 für Squashfs zum Laden
des Kernels von der Root-Partition, 4.65 für JFFS2 zum Laden der
Logos und boot.conf) beinhalten. Das ist praktisch
nicht möglich,
da für U-Boot nur 128 KB Platz im Flash reserviert sind, allerdings
LZO-komprimiert. Wenn beide LZMA-Bibliotheken, Squashfs
und JFFS2 in U-Boot integriert sein sollen, wird U-Boot zu groß.
Für den praktischen Betrieb gibt es drei verschiedene Varianten
von U-Boot in Abhängigkeit des verwendeten Root-Dateisystems.
JFFS2, immer mit LZMA-Unterstützung
Squashfs, ohne LZMA
Squashfs, mit LZMA
Ein JFFS2-U-Boot beinhaltet immer LZMA-Unterstützung, einmal
zum Entpacken LZMA-komprimierter Kernel-Images (sind nur für
JFFS2-Images verfügbar, nicht in Squashfs-Images wegen des o.g.
Platzproblems). Die LZMA-Unterstützung für JFFS2 wird von U-Boot
selbst zur Verfügung gestellt, es handelt sich um Version 4.65.
Möglich ist die permanente LZMA-Unterstützung durch die Tatsache,
dass U-Boot und der Kernel erkennen können, ob ein JFFS2-Datei-
systemblock zlib- oder LZMA-komprimiert ist, indem LZMA als
neue JFFS2-Kompressionsmethode deklariert wird, die parallel
zu anderen Methoden existieren kann:
linux/include/linux/jffs2.h
Das ist für den LZMA-Support in Squashfs 3.0 leider nicht möglich,
da LZMA 4.40 mit
Code: Alles auswählen
#ifdef CONFIG_SQUASHFS_LZMA
[neuer LZMA-Code]
#else
[alter zlib-Code]
#endif
arbeitet und somit zwei Squashfs-Versionen von U-Boot (und Kernel)
notwendig macht, einmal mit und einmal ohne LZMA-Unterstützung.
[1] Auf der Dbox2 können beim Flashupdate nur bestimmte Partitionen
aktualisiert werden, d.h. U-Boot muss mit Kernel 2.4 und 2.6
zurechtkommen, da ein Image-Update nur für die root-Partition
möglich ist.