我怎么知道什么解压算法被编译进了 linux 内核?

Mat*_*nco 8 compression initramfs proc sysfs linux-kernel

如果/proc/config.gz不可用,我怎么知道正在运行的内核能够在压缩文件上使用哪些解压缩算法cpio initramfs

gzip算法是否始终可用,即使在构建内核时CONFIG_DECOMPRESS_GZIP不可用y

Gil*_*il' 4

压缩算法在 中声明lib/decompress.c。Gzip 是在 中定义的lib/decompress_inflate.c,并且没有获得任何特殊地位;仅当编译内核时CONFIG_DECOMPRESS_GZIP它才会存在。y

可用压缩算法的列表是compressed_formats结构。由于它被定义为static,因此它在其他源文件中不可用。因此,唯一使用它的函数就是decompress_method函数lib/decompress.c本身。因此,让内核使用支持的算法表的唯一方法是尝试解压缩以适当的两字节魔术序列开头的内容,并查看该函数是否返回算法名称。

您可以通过搜索内核符号列表(/proc/kallsyms)来判断支持哪些解压函数。这些函数没有这样标识,因此您需要烘焙符号名称列表。

</proc/kallsyms cut -d " " -f 3 |
grep -xF -e gunzip -e bzip2 -e unlzma -e unxz -e unlzo -e unlz4
Run Code Online (Sandbox Code Playgroud)