Linuxカーネルにどの解凍アルゴリズムがコンパイルされているかどうかはどうすればわかりますか?

Linuxカーネルにどの解凍アルゴリズムがコンパイルされているかどうかはどうすればわかりますか?

利用できない場合、/proc/config.gz実行中のカーネルが圧縮後に使用できる解凍アルゴリズムをどのように知ることができますかcpio initramfs

gzipカーネルを構築するときにアルゴリズムを使用できない場合でも、アルゴリズムは常に使用できますかCONFIG_DECOMPRESS_GZIPy

ベストアンサー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

おすすめ記事