Si votre organisation déploie des solutions IoT, vous savez que le développement de systèmes embarqués est un peu différent du développement standard d'un ordinateur de bureau. Le faible coût de Linux est intéressant pour les développeurs IoT, c'est pourquoi il est souvent choisi pour le développement embarqué plutôt que des noyaux propriétaires coûteux. Il n'est pas rare que les développeurs travaillent dans un environnement similaire à l'appareil cible à l'aide d'une machine virtuelle, mais le développement sur une VM peut s'avérer délicat. Au lieu de cela, les développeurs peuvent travailler avec des distributions spécialement conçues pour les systèmes embarqués.
Par rapport aux systèmes d'exploitation embarqués propriétaires, Linux est peu coûteux ; il permet de faire appel à de multiples fournisseurs de logiciels, de développement et d'assistance ; il dispose d'un noyau stable et facilite la lecture, la modification et la redistribution du code source. Pour toutes ces raisons et bien d'autres encore, Linux est devenu l'option de choix pour les systèmes embarqués.
Mais lorsqu'il s'agit de déployer Linux dans un appareil, il existe de nombreuses options. Lorsqu'ils conçoivent des appareils de bureau ou d'entreprise, les développeurs optent généralement pour une distribution telle qu'Ubuntu afin d'imiter au mieux l'environnement de déploiement, avec l'aide d'outils tels que VirtualBox et Docker. Cette configuration n'est cependant pas adaptée à la programmation de systèmes embarqués. L'environnement de développement est très différent, et le résultat de la compilation doit comprendre une image logicielle complète pour l'appareil cible : le noyau, les pilotes de périphériques, les bibliothèques, les logiciels d'application, peut-être même le chargeur d'amorçage.
En ce qui concerne les distributions Linux pour le développement embarqué, de nombreuses personnes commencent par une distribution de bureau, telle que Debian ou Red Hat, et suppriment les composants inutiles jusqu'à ce que l'image installée corresponde à l'appareil cible. Il s'agit d'une méthode naturelle, car de nombreux développeurs Linux sont des utilisateurs de Linux de bureau et peuvent accéder à leur gamme habituelle de paquets d'exécution. Une option consiste à attacher un écran et un clavier à l'appareil cible et à développer directement comme cela. Cette approche peut toutefois s'avérer délicate. Les distributions de bureau ne sont pas conçues pour les systèmes à faibles ressources, et l'ajout et la suppression manuels de paquets peuvent s'avérer difficiles et sources d'erreurs.
Qu'est-ce que Linux embarqué ?
L'informatique automobile, les appareils médicaux, l'internet des objets (IoT) et l'automatisation des usines ne sont que quelques-uns des systèmes embarqués fonctionnant sous Linux embarqué. Nous savons que les ordinateurs fonctionnent à l'aide d'un matériel spécifique (par exemple, le processeur, la mémoire, la carte mère), et les systèmes embarqués fonctionnent également à l'aide de microprocesseurs et de contrôleurs, mais à une plus petite échelle. Ces appareils ont besoin d'un système d'exploitation qui utilise moins de ressources, et les développeurs doivent pouvoir déployer le système d'exploitation à partir de leur bureau.
Linux embarqué pour les développeurs IoT en raison de son faible coût, de son code source ouvert, de ses exigences de stockage légères et de sa capacité à fonctionner avec moins de ressources. C'est une option stable, ce qui est essentiel pour les organisations qui déploient des systèmes utilisés par plusieurs consommateurs. Les risques de panne du système d'exploitation sont inexistants. Par exemple, le système d'exploitation Android est basé sur Linux et détient 87 % du marché mondial.
Linux embarqué est-il un RTOS ?
Un système d'exploitation en temps réel (RTOS) propriétaire peut être une alternative intéressante à Linux embarqué, mais il présente ses propres difficultés. Lorsque les développeurs recherchent des plateformes et des méthodes de développement IoT, ils sont amenés à choisir entre Linux embarqué et un RTOS. Il existe de nettes différences entre les deux, et il convient donc de faire un choix judicieux avant d'opter pour l'un ou l'autre.
Les RTOS peuvent être plus conviviaux pour les développeurs, mais pour les applications d'entreprise où vous souhaitez prendre en charge des personnalisations ou vous intégrer à d'autres projets de développement, Linux embarqué offre un environnement d'intégration plus intuitif. Un RTOS est conçu pour les applications sensibles au temps. À moins que votre système ne soit soumis à des événements critiques sensibles au facteur temps, un système Linux embarqué offre plus de flexibilité aux développeurs.
Quelle est la différence entre Linux et Linux embarqué ?
La plupart des développeurs savent qu'il faut compiler le code source pour le système cible. Lorsqu'ils développent pour des systèmes embarqués, les développeurs écrivent du code sur un ordinateur de bureau, mais le déploient dans un autre environnement en utilisant des chaînes d'outils multiplateformes. Les déploiements de systèmes embarqués sont très différents de ceux des ordinateurs de bureau. Les ordinateurs de bureau utilisent des architectures de microprocesseurs 8086, alors que les systèmes intégrés peuvent utiliser plusieurs microprocesseurs, généralement ARM, 8051, PIC et AVR.
Voici quelques autres différences entre Desktop Linux et Embedded Linux :
- Les systèmes embarqués consomment moins d'énergie et fonctionnent généralement sur batteries.
- Les systèmes embarqués sont beaucoup plus compacts.
- De nombreux systèmes intégrés alimentent des dispositifs critiques tels que les systèmes d'alerte sanitaire, les équipements médicaux, les machines nucléaires et la sécurité domestique.
- Un système Linux embarqué ne contient que les composants nécessaires pour fonctionner sur le processeur cible plutôt que tous les pilotes et bibliothèques possibles pour fonctionner sur une myriade de composants installés sur un ordinateur de bureau.
Conseils d'experts : Que lire ensuite ?
- La sécurité de l'IdO commence au niveau du système d'exploitation - découvrez les meilleures options open-source qui alimentent les projets IdO dans Linux pour l'IdO
- Vous utilisez un système d'exploitation en fin de vie ? Découvrez les risques de conformité, de coût et de sécurité que vous ne pouvez pas vous permettre d'ignorer avec la détection de la fin de vie des systèmes d'exploitation.
- Les 5 meilleurs outils d'administration Linux : Découvrez les utilitaires open-source qui rationalisent l'automatisation, la surveillance et l'application de correctifs dans notre guide des outils open-source.
- Plongée en profondeur dans les capteurs IoT: Découvrez comment les dispositifs IoT et l'informatique de pointe collaborent avec l'inférence pour optimiser la production et la qualité.
Quel est l'exemple d'un système d'exploitation Linux embarqué ?
Le noyau Linux est open source et permet à quiconque de le modifier et de le distribuer sous sa forme altérée. Plusieurs versions de Linux pour ordinateurs de bureau sont disponibles sur le marché, tout comme plusieurs versions de Linux embarqué. Les développeurs sont libres de travailler avec leur propre version personnalisée de Linux, mais il est beaucoup plus pratique de travailler avec une version existante et stable.
Nous avons déjà mentionné le système d'exploitation Android. Android est un système Linux embarqué développé par Google et publié sous licence open source, ce qui permet à d'autres développeurs de le modifier et de le distribuer. Debian est un exemple de distribution Linux de bureau qui dispose également d'une version embarquée sur les appareils Raspberry Pi. Raspberry est le système d'exploitation basé sur Debian utilisé pour faire fonctionner l'appareil informatique compact Raspberry Pi.
Pourquoi Linux est-il utilisé dans un système embarqué ?
Les développeurs choisissent Linux comme système d'exploitation cible pour les systèmes embarqués pour diverses raisons. La première est que Linux est totalement personnalisable. Les développeurs peuvent librement prendre le noyau Linux et créer leur propre distribution du système d'exploitation ou prendre une distribution existante et y apporter de petites modifications pour créer leur propre version.
Linux étant gratuit, son coût de démarrage est faible pour les nouveaux développeurs qui souhaitent simplement explorer et démarrer. Plus il y a de développeurs qui travaillent avec Linux, plus il y a de chances qu'il soit intégré dans les systèmes.
Enfin, il est largement utilisé, ce qui lui permet d'être mieux supporté par les développeurs tiers. Si l'objectif est de construire un système que d'autres développeurs pourraient intégrer dans leurs propres projets, Linux sera plus intuitif.
Comment choisir un système d'exploitation Linux embarqué ?
Le choix d'un système d'exploitation Linux embarqué dépend fortement de vos objectifs, du fonctionnement de l'appareil cible, du délai de mise sur le marché et de la réactivité requise. De nombreux développeurs choisissent simplement Android, parce qu'il est largement utilisé et compris, mais voici quelques questions à se poser pour vous aider à choisir le bon système d'exploitation :
- Le timing est-il critique ? Si votre application nécessite une synchronisation précise, il convient d'utiliser un système d'exploitation en temps réel. Linux n'est pas un RTOS, mais des extensions telles que RTLinux peuvent être envisagées.
- La taille de la mémoire et la puissance du processeur sont-elles limitées ? Un noyau Linux typique pèse 1,5 Mo, ce qui peut être trop important pour certains systèmes. Il est possible d'utiliser un noyau Linux personnalisé contenant uniquement les composants nécessaires à la fonctionnalité de l'application.
- Les performances du réseau sont-elles importantes ? Les applications mobiles qui utilisent Android ont des capacités de mise en réseau, mais Android n'est pas nécessaire si la mise en réseau est l'objectif principal. OpenWRT/LEDE est une alternative conçue spécifiquement pour les performances réseau.
- Y aura-t-il une interface utilisateur graphique ? L'interface graphique préinstallée d'Android peut être une bonne option pour les systèmes qui dépendent fortement de l'interface utilisateur.
- Le délai de mise sur le marché est-il court ? Comprendre l'histoire de Linux et choisir une version bien établie peut aider à réduire le temps de développement. Ubuntu est couramment utilisé pour des lancements plus rapides.
Assurer la sécurité des appareils IoT (sans perturbations)
KernelCare IoT envoie des correctifs de sécurité automatisés, sans redémarrage, aux appareils connectés sans avoir à les mettre hors ligne - votre écosystème IoT reste donc sécurisé et ininterrompu.
Quelle est la meilleure distribution Linux pour le développement embarqué ?
Les développeurs ont besoin d'un environnement qui leur permette d'écrire du code et de le compiler pour le système d'exploitation cible. Ils pourraient utiliser une machine virtuelle et configurer la distribution cible, mais il est beaucoup plus pratique et confortable de travailler avec des outils qui s'installent sur la machine locale et se déploient sur plusieurs plates-formes. Voici quelques excellentes distributions Linux pour le développement embarqué :
Yocto

Yocto, également connu sous le nom d'Openembedded, est une option très populaire de distro Linux pour les systèmes embarqués qui n'est pas destinée à l'ordinateur de bureau. Yocto est soutenu par une armée de passionnés de l'open source, quelques grands noms de la technologie et de nombreux fabricants de semi-conducteurs et de cartes. Un projet Yocto rassemble les binaires d'exécution de la cible, les paquets et le SDK de la cible. Il est facilement extensible par couches, qui ajoutent des fonctionnalités et des caractéristiques. L'architecture modulaire de Yocto le rend très flexible et fournit une priorité de couche bien définie et une capacité d'annulation. De nouvelles versions apparaissent tous les six mois et la documentation est toujours complète.* Le seul inconvénient de Yocto est qu'il peut être difficile à prendre en main pour les débutants.
Buildroot

Buildroot vise à être une version plus légère de Yocto. Buildroot ne prend pas en charge la gestion des paquets sur la cible et désactive tous les paramètres de compilation optionnels pour tous les paquets. Vous ne pouvez pas installer de nouveaux paquets dans un système en cours d'exécution. Cela laisse un petit système ; si petit que beaucoup de gens appellent Buildroot simplement un générateur de firmware (puisque les images sont principalement fixées au moment de la construction). Un projet Buildroot rassemble l'image du système de fichiers racine et tout autre fichier auxiliaire nécessaire au déploiement de Linux, le noyau, le chargeur de démarrage et les modules du noyau, ainsi que la chaîne d'outils utilisée pour compiler tous les binaires cibles. Le principal avantage de Buildroot est qu'il est assez facile à apprendre, en particulier parce qu'il utilise des Makefiles normaux et le langage Kconfig. Le principal inconvénient est que la nature minimale de Buildroot rend la personnalisation difficile.
OpenWRT/LEDE

OpenWRT/LEDE vise à produire des images binaires pour les dépôts de paquets accessibles par le réseau. Il est principalement utilisé pour les micrologiciels personnalisés des routeurs grand public. Si vous avez besoin d'un micrologiciel de remplacement pour un appareil commercial, en particulier si votre conception intégrée est axée sur les réseaux, OpenWRT/LEDE devrait être votre solution. Cependant, il impose des décisions politiques importantes et inflexibles à votre conception. Si vous avez besoin d'une personnalisation importante, nous recommandons plutôt Buildroot ou Yocto.
* Plus d'informations sur les avantages : https://www.embitel.com/blog/embedded-blog/why-yocto-is-a-framework-of-choice-for-creation-of-embedded-linux-distributions
Comment appliquer les mises à jour de sécurité aux systèmes embarqués (et pourquoi) ?
La mise à jour de vos applications sur les systèmes embarqués est délicate. Un mauvais scénario de correctif peut conduire vos clients à avoir un appareil "bricolé". Des mises à jour non sécurisées peuvent entraîner la compromission de l'appareil. Vous pourriez compter sur les utilisateurs pour patcher manuellement les microprogrammes, mais les utilisateurs prennent rarement le temps de le faire ou savent même que les mises à jour sont importantes. Cela a également pour conséquence de compromettre le système. Par exemple, des appareils IoT non corrigés ont été à l'origine de l'une des plus grandes attaques par déni de service distribué (DDoS). En fait, les attaques IoT ont augmenté de 300 % en 2019. Il est clair que les correctifs et les mises à jour sont essentiels à la sécurité de l'appareil et de ses utilisateurs.
Les communications doivent toujours être chiffrées sur le réseau, a/iot-attacks-increased-300-percent-2019 et une signature numérique doit être utilisée pour s'assurer qu'un attaquant ne modifie pas les fichiers de correctifs. Les communications cryptées et les signatures numériques empêchent les attaques de type "man-in-the-middle" et préviennent les manipulations. Le processus général de déploiement des mises à jour logicielles est le suivant :
- En utilisant un canal sécurisé, interroger un système central pour déterminer si une mise à jour est disponible.
- Assurez-vous que la mise à jour actuelle est compatible avec la version installée.
- Téléchargez le correctif en utilisant un canal sécurisé pour éviter une attaque de type "man-in-the-middle".
- Valider que le fichier n'est pas corrompu à l'aide d'un contrôle d'intégrité (par exemple, la somme de contrôle).
- Vérifier que la signature numérique est valide.
- Décrypter le fichier.
- Extraire tous les fichiers compressés.
- Effectuez toutes les opérations préalables à l'installation, telles que la création de sauvegardes en vue d'un retour en arrière.
- Installer le correctif.
- Effectuer toutes les opérations de post-installation telles que le nettoyage des fichiers d'installation.
- Vérifiez que l'installation s'est déroulée correctement et, si ce n'est pas le cas, procédez à un retour en arrière.
Comment appliquer les mises à jour de sécurité aux systèmes embarqués sans redémarrage ?
Le processus ci-dessus est standard pour les mises à jour, mais la plupart des correctifs nécessitent un redémarrage du système. Le redémarrage d'un appareil interrompt l'utilisateur et peut couper des systèmes critiques. Par exemple, le redémarrage d'un routeur principal peut entraîner des temps d'arrêt importants et une corruption des données sur un réseau d'entreprise.
Au lieu de forcer un redémarrage, il est possible d'effectuer un livepatching. Le livepatching résout plusieurs problèmes liés aux mises à jour des systèmes embarqués. Il élimine le besoin de redémarrage et le risque de faire disjoncter un appareil en raison de l'échec des mises à jour. Les développeurs n'ont plus besoin de créer un service de correction personnalisé pour les systèmes Linux embarqués, ni de compter sur les utilisateurs pour mettre à jour manuellement les applications.
Il y a trois façons principales de mettre à jour Linux sans redémarrer : en utilisant la ligne de commande, en utilisant l'outil kexec , ou en utilisant une solution livepatch. Ces trois solutions, y compris les solutions tierces et les étapes de la mise à jour, sont abordées dans cet article de blog.
Conclusion
Pour tout développeur à la recherche d'un environnement pour les systèmes embarqués, Linux est une option populaire avec plusieurs solutions, plateformes, distributions et outils disponibles. Le système d'exploitation que vous choisirez déterminera la plupart des options de votre environnement, mais une chose est sûre : vous aurez toujours besoin d'un moyen de patcher et de mettre à jour vos appareils. Pour éviter de faire disjoncter les appareils des clients tout en les gardant à jour, l'application de correctifs en direct (live patching) est la meilleure solution. Les correctifs en direct garantissent la sécurité des systèmes de vos clients tout en leur donnant la possibilité de redémarrer lorsqu'ils le jugent nécessaire.
Faire un essai gratuit de KernelCare SimplePatch

