En raison de la formulation que vous utilisez, il me semble que vous parlez d'un logiciel qui va être exécuté sur une sorte de système embarqué, par opposition à un logiciel qui va être déployé comme une application de bureau ou une autre variante.
Avant de pouvoir exécuter un programme sur un matériel spécifique, il y a plusieurs étapes à suivre pour convertir le code source que vous avez écrit en quelque chose qui peut effectivement être interprété par une machine.
Votre code source est écrit dans un langage qui possède une certaine syntaxe et une certaine sémantique et qui est lisible pour vous, alors qu'un processeur n'attend et ne comprend que des 1 et des 0.
Lorsque vous travaillez avec des langages compilés, il existe une série d'outils qui, lorsqu'ils sont utilisés dans un ordre spécifique et alimentés par les bonnes entrées, produiront ce qui est communément appelé une image logicielle. Cette image logicielle est ce que vous allez finalement charger dans la cible.
Dépendant de votre matériel et de la façon dont vous construisez votre chaîne d'outils, les outils pour produire l'image logicielle vont varier, mais à coup sûr vous allez avoir besoin d'un préprocesseur, d'un compilateur et d'un éditeur de liens.
Le code source est passé au préprocesseur qui va résoudre certaines choses (macros, includes, directives de préprocesseur et autres), à ce stade vous avez un fichier intermédiaire qui vous est encore lisible. Ensuite, le fichier prétraité est transmis au compilateur qui va générer un fichier objet. Vous devez indiquer au compilateur comment et quels fichiers prendre afin de produire les bons fichiers objets.
Enfin, l'éditeur de liens combinera les différents fichiers objets de l'étape précédente de la manière que vous lui indiquerez et produira l'image binaire en conséquence (l'éditeur de liens s'occupera de la liaison des bibliothèques et d'autres choses qui n'ont pas pu être résolues dans la phase de compilation).
Installer ou tester une image logicielle signifie charger l'image binaire que vous avez produite à la dernière étape dans le matériel cible. Le chargement se fait normalement en copiant l'image dans un stockage en mémoire non volatile.
Ceci est une description générale du processus et n'a pas vocation à être exhaustive.