linux-kernel embedded-linux u-boot

linux kernel - Imagen vs zImage vs uImage



linux-kernel embedded-linux (1)

¿Cuál es la diferencia entre ellos?

Sé que u-boot necesita un kernel en formato uImage.

El sistema que uso primero arranca desde el cargador de la etapa 1 y luego llama a u-boot. Quiero descartar u-boot y arrancar directamente desde el cargador de la etapa 1. ¿Qué tipo de imagen del kernel tengo que usar?


¿Cuál es la diferencia entre ellos?

Imagen : el archivo de imagen binario genérico del kernel de Linux.

zImage : una versión comprimida de la imagen del kernel de Linux que se extrae automáticamente.

uImage : un archivo de imagen que tiene un contenedor U-Boot (instalado por la utilidad mkimage ) que incluye el tipo de sistema operativo y la información del cargador.
Una práctica muy común (por ejemplo, el típico Makefile del kernel de Linux) es usar un archivo zImage. Dado que un archivo zImage es autoextraíble (es decir, no necesita descompresores externos), la envoltura indicaría que este kernel no está "comprimido" aunque en realidad sí lo está.

Tenga en cuenta que el autor / mantenedor de U-Boot considera el uso (generalizado) de usar un zImage dentro de un uImage cuestionable:

En realidad, es bastante estúpido usar una imagen z dentro de una imagen u. Es mucho mejor usar una imagen normal (sin comprimir) del kernel, comprimirla usando solo gzip, y usarla como carga para mkimage. De esta manera, U-Boot realiza la descompresión en lugar de incluir otro descompresor en cada imagen del núcleo.

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

¿Qué tipo de imagen del kernel tengo que usar?

Podrías elegir lo que quieras programar.
Por economía de almacenamiento, probablemente debería elegir una imagen comprimida sobre la no comprimida.
Tenga en cuenta que ejecutar el kernel (presumiblemente el kernel de Linux) implica algo más que cargar la imagen del kernel en la memoria. Dependiendo de la arquitectura (por ejemplo, ARM) y la versión del kernel de Linux (por ejemplo, con o sin DTB), hay registros y buffers de memoria que deben estar preparados para el kernel. En una instancia, también hubo una inicialización de hardware que U-Boot realizó y tuvo que ser replicada.

APÉNDICE

Sé que u-boot necesita un kernel en formato uImage.

Eso es preciso para todas las versiones de U-Boot que solo tienen el comando bootm .
Pero las versiones más recientes de U-Boot también podrían tener el comando bootz que puede arrancar un zImage.