L'informatique embarquée a pris un essor remarquable ces dernières années grâce à l'émergence de nouveaux microcontrôleurs de la famille ARM en particulier, de circuits programmables de type FPGA performants, et de dispositifs embarqués tels que le smartphone. Ces nouvelles technologies matérielles permettent de développer de nouveaux systèmes (passerelles ou gateway, dispositifs pour le motion-control ou le biomédical, plates-formes multimédia, etc.) avec de nouvelles applications utilisant toute sorte de dispositifs embarqués tels que des modules de communication, des capteurs, des accéléromètres, des modules GPS, etc.
Dans un avenir proche, il ne sera pas rare de développer sur des architectures mixtes (CPU-DSP-FPGA) où le partitionnement des ressources matérielles jouera un rôle important. Le développement d'application sur des systèmes embarqués nécessite toutefois une connaissance judicieuse des architectures matérielles et des microcontrôleurs, ainsi que les mécanismes logiciels dits de "bas niveau".
La maîtrise des interactions logicielles-matérielles est cruciale. L'environnement d'exécution dans lequel tourne les applications doit souvent faire l'objet d'une attention particulière, puisqu'il doit être capable de gérer les interactions matérielles, respecter des contraintes temps-réel, assurer la sécurité inter-application, garantir l'isolement des applications, etc. De plus, les applications deviennent de plus en plus complexes car elles doivent souvent communiquer, réagir "vite" et supporter différentes configurations matérielles parfois de manière dynamique (reconfiguration à la volée). Les couches logicielles apparaissant traditionnellement au niveau d'un système d'exploitation doivent également fournir les abstractions nécessaires aux applications afin de faciliter avant tout le développement de celles-ci et de gérer la complexité matérielle.
C'est pourquoi ce module d'approfondissement propose de traiter certains aspects liés à l'informatique de bas niveau (appelé aussi informatique technique) dans un contexte de systèmes embarqués, en examinant le coeur (ou noyau) de l'OS Linux, très largement répandu pour ce type de développement. Plus particulièrement, une étude plus approfondie portera sur les trois techniques particulières suivantes:
- L'émulation logicielle au niveau processeur et périphérique
- Le fonctionnement de pilotes périphériques (drivers)
- La virtualisation embarquée