ClickCease Quelle est la meilleure distribution Linux pour le développement embarqué ?

Quelle est la meilleure distribution Linux pour le développement embarqué ?

Joao Correia

1er décembre 2022 - Évangéliste technique

Si votre entreprise 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 de bureau. Le faible coût de Linux est attrayant pour les développeurs IoT, c'est pourquoi il est souvent le choix pour le développement embarqué par rapport aux noyaux propriétaires coûteux. Il n'est pas rare que les développeurs travaillent dans un environnement similaire à celui de l'appareil cible à l'aide d'une machine virtuelle, mais le développement sur une VM peut être 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 à plusieurs fournisseurs de logiciels, de développement et de support, il dispose d'un noyau stable et il facilite la lecture, la modification et la redistribution du code source. Pour ces raisons et bien d'autres, 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, les options sont nombreuses. Lorsqu'ils conçoivent des ordinateurs de bureau et des périphériques d'entreprise, les développeurs optent généralement pour une distribution telle qu'Ubuntu pour imiter au mieux l'environnement de déploiement, avec l'aide d'outils comme 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 construction doit comprendre une image logicielle complète pour le périphérique cible : le noyau, les pilotes de périphériques, les bibliothèques, les logiciels d'application, voire le chargeur de démarrage.

En ce qui concerne les distributions Linux pour le développement embarqué, de nombreuses personnes commencent par une distribution de bureau, comme Debian ou Red Hat, et suppriment les composants inutiles jusqu'à ce que l'image installée soit adaptée au périphérique cible. C'est une façon naturelle de procéder car beaucoup de 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 au périphérique cible et à développer directement de cette manière. 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 être un travail difficile et source 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 en utilisant du matériel spécifique (par exemple, CPU, mémoire, carte mère), et les dispositifs de systèmes embarqués fonctionnent également avec des microprocesseurs et des contrôleurs, mais à une plus petite échelle. Ces dispositifs ont besoin d'un système d'exploitation qui utilise moins de ressources, et les développeurs doivent être en mesure de déployer le système d'exploitation à partir de leur bureau.

Embedded Linux est souvent le choix des développeurs IoT en raison de son faible coût, de son code open-source, de ses exigences légères en matière de stockage et de sa capacité à fonctionner avec moins de ressources. Il s'agit d'une option stable, ce qui est essentiel pour les organisations qui déploient des systèmes utilisés par plusieurs consommateurs. Les risques de plantage du système d'exploitation sont inexistants. Par exemple, le système d'exploitation Android est basé sur Linux et détient 87 % des parts du marché mondial, et le système d'exploitation est très fiable.

Linux embarqué est-il un RTOS ?

 

Un système d'exploitation en temps réel (RTOS) propriétaire peut constituer une alternative intéressante à Linux embarqué, mais il s'accompagne de ses propres difficultés. Lorsque les développeurs recherchent des plates-formes et des méthodes de développement IoT, ils sont confrontés aux options de Linux embarqué ou d'un RTOS. Il existe des différences distinctes entre les deux, et vous devez donc choisir avec soin avant de vous marier à 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 vous n'ayez un système qui présente des événements critiques sensibles au 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 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 ciblent les architectures à microprocesseur 8086, mais les systèmes embarqués peuvent cibler 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 batterie.
  • Les systèmes embarqués sont beaucoup plus compacts.
  • De nombreux systèmes embarqué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é contient juste 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.

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 le bureau sont sur le marché, tout comme plusieurs versions de Linux embarqué sont disponibles. 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 déjà 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 la 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 possède également une version embarquée sur les appareils Raspberry Pi. Raspberry est le système d'exploitation basé sur Debian utilisé pour alimenter le dispositif informatique compact Raspberry Pi.

Pourquoi Linux est utilisé dans un système embarqué ?

 

Les développeurs choisissent Linux comme système d'exploitation cible de leurs systèmes embarqués pour diverses raisons. La première est que Linux est complètement 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 ajouter de petits changements qui créent leur propre version.

Linux est gratuit, il a donc un faible coût de démarrage pour les nouveaux développeurs qui veulent juste explorer et se lancer. Plus il y a de développeurs qui travaillent avec Linux, plus il a de chances d'être intégré dans les systèmes.

Enfin, il est largement utilisé, ce qui le rend 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, de l'exploitation du dispositif cible, du délai de mise sur le marché et de la réactivité requise. De nombreux développeurs optent simplement pour Android, car il est largement utilisé et compris, mais voici quelques questions à prendre en compte pour vous aider à choisir le bon OS :

  • Le timing est-il critique ? Si vous avez une application qui nécessite un timing précis, un système d'exploitation en temps réel doit être utilisé. 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 fait 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 le principal objectif. Une alternative conçue spécifiquement pour les performances réseau est OpenWRT/LEDE.
  • Y aura-t-il une interface utilisateur graphique ? L'interface graphique préinstallée d'Android pourrait ê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 ? Une distribution Linux plus courante permettra de réduire le temps de développement. Ubuntu est couramment utilisé pour des lancements plus rapides.

Quelle est la meilleure distribution Linux pour le développement embarqué ?

 

Les développeurs ont besoin d'un environnement qui leur permette d'écrire facilement du code et de le compiler sur 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 grandes distributions Linux pour le développement embarqué :

 

Yocto 

 

yoctoprojet-logo-ffd39db2

Une option non bureautique très populaire de distro Linux pour les systèmes embarqués est Yocto, également connue sous le nom d'Openembedded. Yocto est soutenu par une armée d'enthousiastes de l'open source, quelques grands noms de la technologie et de nombreux fabricants de semi-conducteurs et de cartes. La construction d'un projet Yocto regroupe les binaires d'exécution de la cible, le flux de 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é de remplacement. De nouvelles versions apparaissent tous les six mois et la documentation est toujours complète.* Le seul inconvénient de Yocto est peut-être qu'il peut être difficile à prendre en main pour les débutants.

 

Buildroot 

 

buildroot

Buildroot vise à être une version plus légère de Yocto. Buildroot ne supporte pas la gestion des paquets sur la cible, et désactive tous les paramètres optionnels de compilation 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 microprogrammes (car les images sont pour la plupart fixées au moment de la construction). La construction d'un projet Buildroot regroupe 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 ; et la chaîne d'outils utilisée pour construire tous les binaires cibles. Le principal avantage de Buildroot est qu'il est assez facile à apprendre, surtout 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 

 

fusionner.svg

OpenWRT/LEDE est destiné à produire des images binaires pour les dépôts de paquets accessibles par le réseau. Il est principalement utilisé pour les microprogrammes personnalisés des routeurs grand public. Si vous avez besoin d'un micrologiciel de remplacement pour un appareil commercial, surtout si votre conception intégrée est axée sur les réseaux, OpenWRT/LEDE devrait être votre choix. Cependant, il impose des décisions stratégiques importantes et inflexibles sur votre conception. Si vous avez besoin d'une personnalisation importante, nous recommandons Buildroot ou Yocto à la place.

* 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 mise à jour peut faire en sorte que vos clients se retrouvent avec un appareil "bricolé". Des mises à jour non sécurisées pourraient aboutir à un appareil compromis. Vous pourriez compter sur les utilisateurs pour corriger manuellement les microprogrammes, mais ceux-ci prennent rarement le temps de le faire ou savent même que les mises à jour sont importantes. Cela se traduit également par un système compromis. Par exemple, les appareils IoT non patchés ont été responsables de l'une des plus grandes attaques par déni de service distribué (DDoS). D'ailleurs, 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 cryptées sur le réseau, et une signature numérique doit être utilisée pour garantir qu'un attaquant ne modifie pas les fichiers de correction. Les communications cryptées et les signatures numériques empêchent les attaques de type "man-in-the-middle" et empêchent la falsification. Le flux de travail général pour déployer les mises à jour logicielles est le suivant :

 

  1. En utilisant un canal sécurisé, interroger un système central pour déterminer si une mise à jour est disponible.
  2. Assurez-vous que la mise à jour actuelle est compatible avec la version installée.
  3. Téléchargez le correctif en utilisant un canal sécurisé pour éviter une attaque de type "man-in-the-middle".
  4. Validez que le fichier n'est pas corrompu en utilisant un contrôle d'intégrité (par exemple, la somme de contrôle).
  5. Vérifiez que la signature numérique est valide.
  6. Décryptez le fichier.
  7. Extraire tous les fichiers compressés.
  8. Effectuez toutes les actions de pré-installation telles que la création de sauvegardes pour un rollback.
  9. Installez le patch.
  10. Effectuez toutes les actions de post-installation telles que le nettoyage des fichiers d'installation.
  11. Vérifiez que l'installation s'est bien déroulée et, dans le cas contraire, effectuez un retour en arrière.

Comment appliquer les mises à jour de sécurité aux systèmes embarqués sans redémarrage ?

 

Le flux de travail 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 pourrait couper des systèmes critiques. Par exemple, le redémarrage d'un routeur principal peut entraîner un temps d'arrêt important et la corruption de données sur un réseau d'entreprise.

Au lieu de forcer un redémarrage, on peut 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 la possibilité de bloquer 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 Linux embarqué, et ils ne doivent plus 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 méthodes, y compris les solutions tierces et les étapes de mise à jour, sont abordées dans cet article de blog.

 

Conclusion

 

Pour tout développeur à la recherche d'un environnement dans 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 un grand nombre de vos options d'environnement, mais une chose est claire : vous avez toujours besoin d'un moyen de patcher et de mettre à jour vos appareils. Pour éviter de bloquer les appareils des clients tout en les maintenant à jour, l'application de correctifs en direct est la meilleure solution. L'application de correctifs en direct permet de sécuriser les systèmes de vos clients tout en leur donnant la possibilité de redémarrer lorsqu'ils le jugent nécessaire.

Obtenez un essai GRATUIT de 7 jours avec assistance de KernelCare 

Résumé
Nom de l'article
Quelle est la meilleure distribution Linux pour le développement embarqué ?
Auteur
Nom de l'éditeur
TuxCare
Logo de l'éditeur

Prêt à moderniser votre approche de correction des vulnérabilités avec la correction automatisée et non perturbatrice de KernelCare Enterprise ? Planifiez un chat avec l'un de nos experts en sécurité Linux !

PARLEZ À UN EXPERT

Devenez rédacteur invité de TuxCare

Commencer

Courrier

Rejoindre

4,500

Professionnels de Linux et de l'Open Source
!

S'abonner à
notre lettre d'information
Courrier

Rejoindre

4,500

Professionnels de Linux et de l'Open Source
!

S'abonner à
notre lettre d'information
fermer le lien