
利用できない場合、/proc/config.gz
実行中のカーネルが圧縮後に使用できる解凍アルゴリズムをどのように知ることができますかcpio
initramfs
?
gzip
カーネルを構築するときにアルゴリズムを使用できない場合でも、アルゴリズムは常に使用できますかCONFIG_DECOMPRESS_GZIP
?y
答え1
圧縮アルゴリズムは以下で宣言されます。lib/decompress.c
。 Gzip は以下に定義されています。lib/decompress_inflate.c
カーネルがコンパイルされたときにのみCONFIG_DECOMPRESS_GZIP
存在し、特別な状態を取得できません。y
利用可能な圧縮アルゴリズムのリストは次のとおりです。compressed_formats
構造。定義されているため、static
他のソースファイルでは使用できません。したがって、これを使用する唯一の関数はdecompress_method
関数lib/decompress.c
自体です。したがって、カーネルにサポートされているアルゴリズムテーブルを使用させる唯一の方法は、適切な2バイトマジックシーケンスで始まる項目を解凍し、関数がアルゴリズム名を返すことを確認することです。
/proc/kallsyms
カーネルシンボルリスト()を検索すると、どの解凍機能がサポートされているかを確認できます。機能はそれ自体では識別されないため、シンボル名のリストを作成する必要があります。
</proc/kallsyms cut -d " " -f 3 |
grep -xF -e gunzip -e bzip2 -e unlzma -e unxz -e unlzo -e unlz4
答え2
奇妙な勝利:
samveen@x230:~ $ awk '/^name/{n=$3}/^type/{if($3=="compression"){print n}}' </proc/crypto
lz4
lzo-rle
lzo
deflate
compress_null
説明する:
/proc/crypto
ラベル付きカーネルアルゴリズムを印刷しますtype
compression
。
注:/proc
はいいつも次のように使用できます。すべて linux
initrd
あるいは、コンテナを介したカーネルベースの環境docker
なので、この方法はすべての最新のカーネルで動作する必要があります。
警告:
答え3
sys/power/tuxonice/compression ディレクトリに移動すると、どのタイプの圧縮があるかを確認できます。そこにはアルゴリズムと呼ばれるファイルが含まれており、これには解凍タイプが含まれています。私にとってはlzoで書かれています。