GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso dimostrare in pratica il tipo di compressione del kernel?

La tua citazione su Wikipedia,

Sebbene ci sia l'idea sbagliata popolare che il bz prefisso significa che viene utilizzata la compressione bzip2 [...], non è così.

dice l'opposto della tua teoria:il bz in bzImage non ha alcuna relazione con bzip2 e bzImage non deve essere compresso con bzip2 . Infatti, la modalità di compressione predefinita del kernel è ancora gzip , e ci sono poche ragioni per usare bzip2 al giorno d'oggi — è più lento di LZMA e xz ma non si comprime altrettanto bene.

Per determinare in modo definitivo quale compressione è stata utilizzata per una data immagine del kernel, senza bisogno di eseguirla o trovarne la configurazione, puoi seguire l'approccio utilizzato dal extract-vmlinux del kernel stesso script:

  • cerca la firma del compressore nell'immagine:

    • gunzip :\037\213\010
    • xz :\3757zXZ\000
    • bzip2 :BZh
    • lzma :\135\0\0\0
    • lzo :\211\114\132
    • lz4 :\002!L\030
    • zstd :(\265/\375
  • prova a estrarre i dati dall'immagine, iniziando dall'offset di qualsiasi firma che hai trovato;

  • controlla che il risultato (se presente) sia un'immagine ELF.

Ho adattato lo script qui in modo che riporti solo il tipo di compressione. Non lo includo qui perché è concesso in licenza solo con GPL 2.


Puoi vedere quali metodi di compressione sono supportati dal tuo kernel. Solo uno può essere selezionato, quindi questo dimostrerà qual è.

Qui sto usando gzip:

$ zgrep CONFIG_KERNEL_ /proc/config.gz
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_XZ is not set
# CONFIG_KERNEL_LZO is not set
# CONFIG_KERNEL_LZ4 is not set

Linux
  1. Linux:come trovare le implementazioni delle chiamate di sistema del kernel Linux?

  2. Linux:come determinare quale modulo contamina il kernel?

  3. Come trovare il tipo di un file Img e montarlo?

  4. Come pulire le cache utilizzate dal kernel Linux

  5. Come trovare la versione di un modulo del kernel compilato?

Come il kernel Linux gestisce gli interrupt

Come compilare un kernel Linux nel 21° secolo

Come controllare la versione del kernel in Linux

Come compilare un kernel - Il modo Debian

Come trovare il tipo di filesystem montato in Linux

Come aggiornare il kernel su CentOS 8.0