La principale caractéristique de ces processeurs est la très faible consommation d'énergie, et leur intégration avec les circuits périphériques sur une même puce nommée SOC (System On Chip).
Parmi ces processeurs on trouve les compatibles x86 comme le SOC Geode ou encore la famille des SOC ARM.
Il existe également des processeurs softcore intégrés dans les FPGA.
Ce sont des circuits de faible taille et de faible consommation adaptés aux systèmes embarqués de capacité de quelques 1Mo à quelques 10Go. On trouve des mémoires flash sous la forme de circuit intégré ou encore de carte microSD.
Les circuits périphériques peuvent être intégrés avec le processeur sur le SOC, ou bien des circuit intégrés externes au SOC. On trouve :
Il existe plusieurs techniques de démarrage adaptées à l'embarqué dont :
Certains systèmes embarqués disposent d'interfaces graphiques qui vont de l'afficheur LCD à l'interface HDMI
On trouve donc le système Xwindow de linux ou encore des applications graphiques adaptées comme QT qui dispose de licences libres ou commerciales
Sur les systèmes embarqués ne disposant pas d'interface graphique, l'interaction se fait via le réseau : page web, terminal texte sécurisé, ...
Ces modes de communications nécessitent un serveur ssh pour le terminal texte sécurisé, ou encore un serveur web pour l'accès via un navigateur.
On ne peut pas installer des serveurs web utilisés par les serveurs informatiques standards, mais des serveurs dit légers comme : Boa , thttpd, ou encore lighttpd qui est le plus utilisé et disponible sur la plupart des linux embarqués.
En l'absence d'interface graphique, il est également possible d'utiliser des navigateurs en mode texte comme lynx ou links
Un cross-compilateur est un compilateur qui produit le code d'un processeur qui n'est pas celui de la machine sur laquelle il est utilisé. La machine sur laquelle est exécuté le programme est la "machine cible" et la machine sur laquelle est compilé le code est la "machine hôte". Il existe un cross-compilateur par processeur, qui est, sous linux, de la famille gnu gcc ou g++. Il faut donc installer un compilateur par plateforme cible. L'environnement de cross-compilation doit disposer de toutes les librairies partagées nécessaires au format du processeur cible, ainsi que tous les fichiers de définitions, également adaptés au processeur cible.
Le programme exécutable produit ne peut pas être exécuté sur la machine hôte, mais transféré sur la machine cible. Ce transfert se fait en général avec la commande scp de ssh. Ensuite il faut se connecter en terminal avec ssh sur la machine cible pour exécuter ce programme.
Afin d'éviter de saisir le mot de passe à chaque commande ssh ou scp, on peut crée une clé sur la machine hôte avec les commandes suivantes :
ssh-keygen ssh-agent -s ssh-copy-id utilisateur@adresseipcible
Pour une utilisation personnelle, il faut valider les réponses par défaut ou bien ne pas répondre en validant chaque question. Après avoir terminé ces trois commandes, la connexion ssh ne demandera plus de mot de passe.
Exemple de fichier Makefile pour la cross-compilation avec un seul fichier source
USER=utilisateur IP=adresseipcible CC=XXXXXX-gcc CFLAGS= -Wall LDFLAGS= EXEC=hello SRC= $(wildcard *.c) OBJS= $(SRC:.c=.o) all: $(EXEC) $(EXEC): $(OBJS) $(CC) -o $@ $^ $(LDFLAGS) %.o: %.c $(CC) -c -o $@ $< $(CFLAGS) upload: scp $(EXEC) $(USER)@$(IP): clean: rm *.o $(EXEC)
Exemple de fichier Makefile pour la cross-compilation avec plusieurs fichiers sources
USER=utilisateur IP=adresseipcible CC=XXXXXX-gcc CFLAGS= -Wall LDFLAGS= EXEC=hello SRC= $(wildcard *.c) OBJS= $(SRC:.c=.o) all: $(EXEC) $(EXEC): $(OBJS) $(CC) -o $@ $^ $(LDFLAGS) %.o: %.c $(CC) -c -o $@ $< $(CFLAGS) upload: scp $(EXEC) $(USER)@$(IP): clean: rm *.o $(EXEC)
utilisateur est le nom de connexion sur le système embarqué, adressipcible est l'adresse ip ou le nom du système embarqué sur le réseau, XXXXXX-gcc est à remplacé par le nom du cross-compilateur.
Il convient également d'ajouter les accès aux fichiers de définitions supplémentaires dans la ligne CFLAGS et les accès et noms de librairies supplémentaires dans la ligne LDFLAGS.