¿Qué es una imagen de software?

Debido a la redacción que estás utilizando, me parece que estás hablando de un software que se va a ejecutar en algún tipo de sistema embebido en contraposición a un software que se va a desplegar como una aplicación de escritorio u otra variante.

Antes de poder ejecutar un programa en una pieza específica de hardware, hay varios pasos que hay que seguir para convertir el código fuente que escribiste en algo que realmente pueda ser interpretado por una máquina.

Tu código fuente está escrito en un lenguaje que tiene cierta sintaxis y semántica y que es legible para ti, mientras que un procesador espera y entiende sólo 1s y 0s.

Cuando se trabaja con lenguajes compilados hay una serie de herramientas que cuando se utilizan en un orden específico y se alimentan con las entradas correctas producirán lo que comúnmente se conoce como una imagen de software. Esta imagen de software es lo que finalmente se cargará en el objetivo.

Dependiendo de tu hardware y de cómo construyas tu cadena de herramientas, las herramientas para producir la imagen de software variarán, pero seguro que vas a necesitar un preprocesador, un compilador y un enlazador.

El código fuente se pasa al preprocesador que resolverá algunas cosas (macros, includes, directivas del preprocesador y otras), en este punto tienes un archivo intermedio que todavía es legible para ti. Luego, el archivo preprocesado se pasa al compilador que generará un archivo objeto. Tienes que decirle al compilador cómo y qué archivos tomar para producir los archivos objeto correctos.

Por último, el enlazador combinará los distintos archivos de objetos del paso anterior de la forma que le indiques y producirá la imagen binaria como resultado (el enlazador se encargará de enlazar las librerías y otras cosas que no se hayan podido resolver en la fase de compilación).

Instalar o probar una imagen de software significa cargar la imagen binaria que produjo en el último paso en el hardware de destino. La carga se realiza normalmente copiando la imagen en un almacenamiento de memoria no volátil.

Esta es una amplia descripción del proceso y no pretende ser exhaustiva.