Webinaire en vedette : Tests d'API améliorés par l'IA : une approche de test sans code | Voir le séminaire
Aller à la section
Que sont les systèmes embarqués ?
Les systèmes embarqués sont avec nous depuis des lustres. Lisez la suite pour savoir ce qu'ils sont, certains problèmes de sécurité des systèmes embarqués et comment des tests appropriés peuvent aider à les rendre sûrs et sécurisés.
Aller à la section
Aller à la section
Introduction aux systèmes embarqués
Systèmes embarqués sont des systèmes informatiques basés sur des microprocesseurs, généralement intégrés à un système ou à un produit, qui ont un rôle opérationnel dédié. En d’autres termes, les systèmes embarqués sont les « intelligences » cachées derrière tous les appareils que nous utilisons, les voitures que nous conduisons, les avions dans lesquels nous volons et les trains dans lesquels nous voyageons.
Plutôt que d'être constitués de composants distincts tels que des ordinateurs de bureau, des serveurs et d'autres domaines informatiques similaires, les systèmes intégrés sont intégrés à des produits et incluent du matériel et des logiciels intégrés.
Comment sont utilisés les systèmes embarqués ?
Ce qui est intéressant avec les systèmes embarqués, c'est l'étendue des applications. Ils vont des petits contrôleurs dans les appareils domestiques intelligents aux systèmes avioniques dans les avions aux grands commutateurs de réseau qui composent nos réseaux de télécommunications. Cela les rend également difficiles à concevoir et à développer. Les contraintes du produit prévu ont un impact sur l'enveloppe de performances du matériel et des logiciels embarqués.
Les systèmes embarqués sont omniprésents mais relativement inconnus de la plupart des consommateurs. Les automobiles modernes ont jusqu'à 100 millions de lignes de code en eux et la plupart ne sont pas dans le système d'infodivertissement. Une grande partie des logiciels et du matériel d'une voiture moderne se trouve dans les divers microcontrôleurs et unités de commande du moteur qui contrôlent et surveillent les fonctionnalités modernes.
L'architecture des systèmes embarqués
Les systèmes embarqués se composent de matériel et de logiciels comme mentionné ci-dessus. Ils sont souvent utilisés dans des applications qui nécessitent à la fois de détecter quelque chose de physique dans l'environnement et de contrôler quelque chose en réponse.
Un exemple simple est un système CVC avec un contrôleur de thermostat intégré. Un tel système détecterait la température ambiante et actionnerait le chauffage ou la climatisation. Il peut nécessiter une forme de communication via une interface réseau et afficher la température sur un écran LCD (interface homme/machine ou IHM.)
De tels systèmes sont souvent appelés «temps réel» ou « événementiel » car ils doivent réagir en temps opportun aux événements du monde réel. Selon le type et la criticité de l'application, il est important de réagir aux événements à un moment précis. Les systèmes critiques pour la sécurité comme les freins antiblocage (ABS) dans une voiture doivent réagir en quelques millisecondes. De tels systèmes sont appelés « temps réel dur », ce qui signifie qu'ils doivent respecter les délais requis ou qu'une défaillance s'est produite. Les systèmes avec des délais plus souples sont appelés « temps réel souple ». Dans la plupart de ces cas, ces systèmes fonctionnent sur une sorte de système d'exploitation en temps réel (RTOS).
Voici un exemple simple d'architecture de système embarqué :
L'utilisation d'une architecture de microcontrôleur est également unique aux systèmes embarqués. Contrairement aux systèmes de bureau ou de serveur, les microcontrôleurs ont généralement toute la RAM, la ROM et les E/S sur une seule puce. Ces contrôleurs ont souvent les capacités d'E/S requises pour interagir avec les capteurs et les actionneurs et s'intégrer au réseau et à d'autres dispositifs de communication.
Limites matérielles des systèmes embarqués
Les systèmes embarqués fonctionnent sur du matériel conçu pour répondre aux limitations du produit dans lequel ils sont utilisés. Le matériel est souvent spécifié pour atteindre des objectifs commerciaux (par exemple, le coût) et techniques. Ces produits peuvent se compter en millions d’unités et fonctionner pendant des décennies, ce qui implique la nécessité d’une fiabilité et d’une qualité à la fois matérielles et logicielles.
Contraintes sur le matériel
Les contraintes courantes sur le matériel du système embarqué sont :
- Puissance de traitement limitée
- Mémoire
- Stockage
Ces contraintes limitent les performances et la complexité de l'application que le matériel peut prendre en charge. À son tour, cela augmente les défis de conception et de développement, en particulier lorsque l'on essaie d'intégrer plus de fonctionnalités.
Les contraintes matérielles du système embarqué sont déterminées par les exigences commerciales qui ont souvent un impact sur la rentabilité du produit final.
- Coût de la nomenclature. Un matériel moins complexe est moins cher à l'achat et offre des marges bénéficiaires plus élevées. Cependant, à mesure que la complexité logicielle augmente, elle dépasse rapidement la capacité matérielle. Le passage à des processeurs à plus grande échelle signifie des coûts de nomenclature (BOM) plus élevés et des impacts logiciels importants.
- Taille et poids. Les produits finaux sont limités par la taille et le poids, ce qui peut avoir un impact sur la sélection du matériel. Un matériel plus complexe peut nécessiter des cartes de circuits imprimés, des alimentations et une dissipation thermique plus grandes.
- Consommation d'énergie. Les systèmes embarqués se trouvent souvent dans des équipements fonctionnant sur batterie où la consommation d'énergie est étroitement gérée. Ils peuvent également se trouver dans des systèmes haut de gamme où la chaleur est un problème.
Les exemples de matériel cible incluent de petits microcontrôleurs tels que :
- L'omniprésent 8 bits 8051
- MCU PIC16 de Microchip
- ST Micro STM32 Microcontrôleur ARM Cortex 32 bits
- Systèmes embarqués sur puce (TI OMAP ou l' Raspberry Pi)
- Systèmes 64 bits multiprocesseurs à grande échelle basés sur des processeurs ARM, Intel et AMD
Logiciels de Systèmes Embarqués
La plupart des efforts d'ingénierie sont consacrés aux logiciels des systèmes embarqués. En fait, la plupart des fabricants ont besoin d'un groupe de logiciels pour développer les applications embarquées dans leurs produits. En plaisantant, les PDG de ces sociétés plaisantent : « Nous sommes une société de logiciels se faisant passer pour un fabricant de widgets. »
La réalité est que les logiciels sont devenus un domaine clé de différenciation et d’innovation sur de nombreux marchés, y compris dans les entreprises dont le produit principal n’est pas le logiciel.
Tout comme pour le matériel, la complexité du logiciel dépend de l'application visée qui peut varier considérablement. Cependant, il existe trois grandes catégories dans lesquelles la plupart des logiciels embarqués s'intègrent :
- Petite échelle
- Échelle moyenne
- Grande échelle
Petite échelle, "Bare Metal"
Ces applications reposent généralement sur des microcontrôleurs 8 et 16 bits sans système d'exploitation formel, également appelés bare metal. Les applications contrôlent généralement un seul sous-système basé sur quelques capteurs. Ils peuvent ne pas être connectés à un réseau et fonctionner de manière autonome. Le contrôle de haut niveau se situe ailleurs, par exemple avec un système de contrôle de supervision et d'acquisition de données (SCADA), généralement doté d'un matériel et de logiciels beaucoup plus complexes.
Échelle moyenne
Ces systèmes utilisent souvent des systèmes d'exploitation intégrés commerciaux ou open source qui sont également souvent en temps réel (RTOS). Ces systèmes d'exploitation fournissent les bibliothèques d'abstraction matérielle, de multitraitement, de multithreading, de réseau et d'interface nécessaires. Les exemples comprennent FreeRTOS, VxWorkset QNX, et dans certains cas, Linux embarqué. Les applications peuvent aller d'applications en temps réel critiques pour la sécurité, telles que l'avionique d'avion, aux routeurs sans fil et aux systèmes CVC.
Habituellement, le matériel est constitué de microcontrôleurs et de SoC 32 bits avec plus de RAM et de flash que les systèmes à petite échelle. Cependant, la complexité des logiciels est bien plus élevée dans cette catégorie, les applications comportant des dizaines de milliers à un million de lignes de code (LOC) ou plus.
Grande échelle
Les systèmes de cette catégorie sont généralement très complexes avec de multiples fonctionnalités et capacités. Ils fonctionnent souvent sur du matériel de type serveur doté de multiprocesseurs. Les applications nécessitent souvent un traitement en temps réel et peuvent toujours utiliser un RTOS ou Linux haut de gamme. Les exemples incluent les commutateurs et les routeurs de réseau d'entreprise et les systèmes de dorsale de réseau de télécommunication, le traitement boursier et le contrôle du trafic aérien. Ces systèmes sont très complexes, interconnectés avec des bases de code de plusieurs millions de lignes de code.
Malgré la variété des applications, il existe certaines caractéristiques communes telles que la nature dédiée des applications. Les systèmes embarqués fonctionnent souvent toute l’année, 24 heures sur XNUMX. Ils partagent également la nécessité d’être fiables, sûrs, économes en énergie et rentables à fabriquer. Plus que jamais, il est nécessaire de les sécuriser, ce dont nous parlerons plus tard.
Applications des systèmes embarqués
Les applications des systèmes embarqués sont trop nombreuses pour être énumérées, mais les exemples évidents de haut niveau incluent :
- Appareils de sauvetage comme les stimulateurs cardiaques
- Applications critiques telles que le contrôle de vol dans les avions et l'assistance automatisée à la conduite
- Logiciel qui exécute des gadgets et des appareils domestiques intelligents
Nos smartphones, tablettes, montres connectées et téléviseurs intelligents sont tous des systèmes embarqués ! Voici d'autres applications qui s'exécutent sur des systèmes embarqués :
- L'automatisation industrielle.
- Commandement et contrôle des centrales nucléaires, de la production et de la distribution d'électricité.
- Puissance, chaleur et lumière pour maintenir l'économie en marche.
- Logiciels critiques pour la sécurité dans les trains, les avions et voitures.
- Tours, concentrateurs, commutateurs et routeurs de télécommunication pour les opérations Internet et de télécommunications.
- Les armes sophistiquées, les avions de combat, les chars et les missiles ont des systèmes intégrés en leur cœur.
En effet, 98 % des microprocesseurs produits dans le monde sont utilisés dans des systèmes embarqués.
Qu'est-ce qui n'est pas intégré ?
Aussi omniprésents que soient les systèmes embarqués, il existe encore de nombreux systèmes et logiciels qui ne le sont pas. Tous les logiciels de bureau tels que les logiciels de productivité, les navigateurs Web et les jeux vidéo ne sont pas considérés comme intégrés. Les logiciels d'entreprise, l'infrastructure cloud et les systèmes backend ne sont pas non plus intégrés.
Habituellement, s'il fonctionne sur du matériel générique tel qu'un PC ou un serveur classique, il n'est pas considéré comme intégré. Physiquement, les applications ne sont pas regroupées avec le matériel comme une seule et indissociable. Par exemple, les PC peuvent être livrés avec le système d'exploitation Microsoft Windows, mais ce système d'exploitation peut être remplacé et supprimé sans altérer la fonction principale du PC. Les logiciels non intégrés sont généralement des logiciels d'application pouvant s'exécuter sur divers matériels, à distance ou localement.
Problèmes de sûreté et de sécurité pour les systèmes embarqués
Les systèmes embarqués jouent un rôle important dans les dispositifs critiques pour la sécurité et la sûreté. Les produits tels que les stimulateurs cardiaques et les contrôleurs de frein ABS ne peuvent pas échouer. Des vies dépendent du bon fonctionnement de ces appareils, tout le temps. Des échecs très médiatisés tels que le Thérac 25 incident où des patients ont subi une surdose massive de radiations ou Catastrophe de la fusée Ariane 5 causé par une erreur de débordement d'entier.
La sécurité est désormais une préoccupation majeure à mesure que de plus en plus de systèmes embarqués sont mis en ligne, connectés via Internet (l'Internet des objets). Cette interconnexion crée de nouvelles fonctionnalités et opportunités et ouvre la porte aux attaques. Une litanie de problèmes de sécurité dans les appareils IoT est documentée par notre propre Code Curmudgeon dans son Salle de la honte IoT. Les appareils non sécurisés ne sont pas sûrs, la sécurité et la sûreté doivent donc être considérées de la même manière dans ces appareils critiques.
Comment rendre les systèmes embarqués sûrs et sécurisés ?
La seule façon de s'assurer que les systèmes embarqués sont sûrs et sécurisés est de vers les tests. Plus précisément, grâce à une vérification rigoureuse et validation tout au long du cycle de développement. Cela inclut avant le développement du logiciel, dans l'analyse des besoins précoces et jusqu'à la fin de vie.
Il existe des normes spécifiques qui doivent être suivies par les industries où la sécurité est une préoccupation majeure, notamment les suivantes :
- Automobile (ISO 26262)
- Aviation (DO-178C)
- Équipement médical (IEC 62304)
- L'automatisation industrielle (IEC 61508)
- Chemin de fer (EN 50128)
Les fabricants de ces appareils doivent respecter les normes et prouver par des audits qu'ils font preuve de diligence raisonnable et ont répondu à toutes les préoccupations en matière de sécurité et de sûreté. Ce type de développement matériel et logiciel prend du temps et est coûteux à construire et à tester, mais il est essentiel pour garantir un comportement correct lors du déploiement.
Assurer la sûreté et la sécurité des systèmes embarqués
Les systèmes embarqués, en particulier les systèmes embarqués critiques en matière de sûreté et de sécurité, ne peuvent pas échouer. S’ils le font, les conséquences sont désastreuses. Des vies seront perdues ou des personnes subiront des blessures graves. Il existe également un risque de dommages matériels. Les tests logiciels sont donc essentiels.
Les tests logiciels garantissent que le système embarqué est sûr, sécurisé et fiable. Les tests contribuent également à la certification de ces faits. Les normes de sécurité fonctionnelle mentionnées dans la section précédente fournissent des conseils et recommandent des méthodes de test telles que l'analyse de code statique, les tests unitaires, les tests d'intégration, les tests de système, les tests de régression, la couverture du code structurel et de nombreux autres types d'analyse des dangers, d'analyse des menaces et d'évaluation des risques. activités pour garantir le système embarqué le plus sûr et le plus sécurisé possible.
De nombreux systèmes embarqués sont également soumis à des exigences de certification imposées par les agences de réglementation fédérales. Les États-Unis ont la FDA pour les dispositifs médicaux, la FAA pour l’avionique, la NHTSA pour les véhicules automobiles, la FRA pour le transport ferroviaire, et bien d’autres encore. Ces agences imposent des réglementations qui assurent la sécurité du public. De plus, les entreprises elles-mêmes recherchent la qualité, car les rappels, les poursuites et les longs litiges peuvent détruire une entreprise.