Woher weiß ich, welche Dekomprimierungsalgorithmen in den Linux-Kernel integriert sind?

8

Wenn /proc/config.gznicht verfügbar, woher weiß ich, welche Dekomprimierungsalgorithmen der laufende Kernel auf einem komprimierten verwenden kann cpio initramfs?

Ist der gzipAlgorithmus immer verfügbar, auch wenn CONFIG_DECOMPRESS_GZIPdies ybeim Erstellen des Kernels nicht der Fall ist?

MattBianco
quelle

Antworten:

2

Komprimierungsalgorithmen werden in deklariert lib/decompress.c. Gzip ist in definiert lib/decompress_inflate.cund erhält keinen besonderen Status. es wird nur da sein , wenn CONFIG_DECOMPRESS_GZIPist , ywenn der Kernel kompiliert wird.

Die Liste der verfügbaren Komprimierungsalgorithmen ist die compressed_formatsStruktur. Da es als definiert ist static, ist es in anderen Quelldateien nicht verfügbar. Die einzige Funktion, die es verwendet, ist somit die decompress_methodFunktion an lib/decompress.csich. Die einzige Möglichkeit, einen Kernel dazu zu bringen, die Tabelle der unterstützten Algorithmen zu verwenden, besteht darin, zu versuchen, etwas zu dekomprimieren, das mit der entsprechenden magischen Zwei-Byte-Sequenz beginnt, und zu prüfen, ob diese Funktion den Algorithmusnamen zurückgibt.

Sie können feststellen, welche Dekomprimierungsfunktionen unterstützt werden, indem Sie die Liste der Kernelsymbole durchsuchen ( /proc/kallsyms). Die Funktionen sind nicht als solche gekennzeichnet, daher müssen Sie in der Liste der Symbolnamen backen.

</proc/kallsyms cut -d " " -f 3 |
grep -xF -e gunzip -e bzip2 -e unlzma -e unxz -e unlzo -e unlz4
Gilles 'SO - hör auf böse zu sein'
quelle
0

Sie können Ihren Komprimierungstyp kennenlernen, indem Sie in das Verzeichnis sys / power / tuxonice / compress gehen. Dort wird eine Datei mit dem Namen algorithm eingefügt, in der der Dekomprimierungstyp enthalten ist. Für mich wurde lzo geschrieben.

SPIELBASIS
quelle