Image vs zImage vs uImage

Quelle est la différence entre eux?

Je sais que u-boot a besoin d’un kernel au format uImage.

Le système que j’utilise en premier depuis le chargeur de la phase 1, puis il appelle u-boot. Je veux supprimer U-Boot et démarrer directement depuis le chargeur de la phase 1. Quel type d’image de kernel dois-je utiliser?

Quelle est la différence entre eux?

Image : le fichier d’image binary du kernel Linux générique.

zImage : une version compressée de l’image du kernel Linux auto-extractible.

uImage : fichier d’image doté d’un wrapper U-Boot (installé par l’utilitaire mkimage ) qui inclut le type de système d’exploitation et les informations sur le chargeur.
Une pratique très courante (par exemple le Makefile du kernel Linux typique) consiste à utiliser un fichier zImage. Comme un fichier zImage est auto-extractible (c.-à-d. Qu’il n’a pas besoin de décompresseurs externes), le wrapper indiquerait que ce kernel n’est “pas compressé” même s’il l’est réellement.


Notez que l’auteur / mainteneur de U-Boot considère l’utilisation (répandue) de l’utilisation d’un zImage dans un uImage douteuse:

En fait, c’est assez stupide d’utiliser un zImage dans un uImage. Il est préférable d’utiliser une image de kernel normale (non compressée), de la compresser en utilisant simplement gzip, et de l’utiliser comme fichier poayload pour mkimage. De cette façon, U-Boot fait le décompactage au lieu d’inclure un autre décompresseur avec chaque image du kernel.

(cité de https://lists.yoctoproject.org/pipermail/yocto/2013-October/016778.html )


Quel type d’image de kernel dois-je utiliser?

Vous pouvez choisir ce que vous voulez programmer.
Pour une économie de stockage, vous devriez probablement choisir une image compressée sur l’image non compressée.
Attention, l’exécution du kernel (sans doute le kernel Linux) implique plus que le simple chargement de l’image du kernel en mémoire. Selon l’architecture (par exemple, ARM) et la version du kernel Linux (avec ou sans DTB, par exemple), il existe des registres et des mémoires tampons à préparer pour le kernel. Dans un cas, l’initialisation matérielle effectuée par U-Boot devait être répliquée.

ADDENDA

Je sais que u-boot a besoin d’un kernel au format uImage.

C’est exact pour toutes les versions de U-Boot qui ont uniquement la commande bootm .
Mais les versions plus récentes de U-Boot pourraient aussi avoir la commande bootz qui peut démarrer un zImage.