Algoritmos de compactação são declarados em lib/decompress.c
. O Gzip é definido em lib/decompress_inflate.c
e não recebe nenhum status especial; ele só estará lá se CONFIG_DECOMPRESS_GZIP
for y
quando o kernel for compilado.
A lista de algoritmos de compactação disponíveis é o compressed_formats
estrutura. Como está definido como static
, não está disponível em outros arquivos de origem. A única função que o utiliza é, portanto, a função decompress_method
em lib/decompress.c
. Portanto, a única maneira de obter um kernel para usar a tabela de algoritmos suportados é tentar descompactar algo que comece com a seqüência mágica apropriada de dois bytes e ver se essa função retorna o nome do algoritmo.
Você pode dizer quais funções de descompactação são suportadas, pesquisando a lista de símbolos do kernel ( /proc/kallsyms
). As funções não são identificadas como tal, então você precisa assar na lista de nomes de símbolos.
</proc/kallsyms cut -d " " -f 3 |
grep -xF -e gunzip -e bzip2 -e unlzma -e unxz -e unlzo -e unlz4