19 janvier 2023

Mise à jour OTA des systèmes embarqués

Remote over the air updating linux embedded system with SWUpdate
Partager sur facebook
Partager sur twitter
Partager sur linkedin
Article by : Mohamed BELOUARGA

L’ajout d’une fonctionnalité, la correction d’un bug ou d’une faille de sécurité sont des étapes clés dans le cycle de vie d’un logiciel, d’une librairie ou d’un firmware. Cependant, pour les architectes et les développeurs, l’exécution de ces tâches présente toujours des inconvénients techniques et une multitude de résultats indésirables possibles (plus de bugs, rollbacks, etc.).

Jusqu’à présent, l’industrie, et en particulier l’industrie des systèmes embarqués, continue d’envoyer ses techniciens sur place pour effectuer les mises à jour de leurs produits. Ces procédures prennent du temps, nécessitent une logistique lourde, sont coûteuses et sont donc souvent négligées, provoquant un grand mépris des clients et des utilisateurs.

Les mises à jour à distance, également appelées Over The Air (OTA), sont plus adaptées aux besoins futurs de la plupart des industriels, des fabricants et de leurs futurs produits.

Dans le cas de Linux embarqué, des mises à jour OTA sont disponibles.

Cet article traite des mises à jour à distance pour les systèmes Linux embarqués.

Les mises à jour OTA permettent d’apporter des modifications logicielles à un système sans entrer en contact physique avec ce dernier. Ces mises à jour peuvent être effectuées à l’aide de plusieurs solutions open-source, mais leur mise en œuvre n’est pas toujours simple.

Lorsque les fabricants étudient les options de mise à jour, la première solution qu’ils envisagent est la mise à jour par paquets. Cette solution est la moins adaptée aux systèmes embarqués pour plusieurs raisons :

  • Si la mise à jour ne se déroule pas comme prévu, vous ne pouvez pas effectuer un rollback.
  • Chaque composant doit être géré en fonction de ses dépendances
  • Les conflits de version : Dans un système de desktop, on peut se permettre d’avoir deux versions de la même bibliothèque, mais ce n’est pas le cas dans un système à faible capacité de mémoire.
  • La validation d’une mise à jour est une tâche très difficile. D’autant plus que plus les mises à jour sont nombreuses, plus la mise à jour devient compliquée et coûteuse. Il faut prévoir le passage de V1 à V2, de V2 à V3, mais aussi de V1 à V3 etc.

👉 Par exemple, Mender, Ostree, RAUC…

Néanmoins, il existe d’autres solutions qui peuvent éviter tous ces inconvénients, comme SWUpdate, Mender, OsTree, RAUC, etc.

Chaque solution a sa propre façon de gérer les mises à jour, nous ne parlerons que de la solution de Stefano Babic, SWUpdate, dans cet article.

#Swupdate est plus un framework que d'autres autres solutions

Contrairement à la solution de bout en bout Mender, qui vient avec ses exigences, ses contraintes et ses limites, SWUpdate peut créer une version personnalisée de Mender, en ajoutant ou en supprimant des fonctionnalités. En créant une solution de mise à jour qui correspondra parfaitement aux besoins du client.

L’inconvénient est que le fichier de mise à jour peut être considérable, ce qui augmentera les prix du réseau. Cependant, ce problème peut également être évité en utilisant des rootfs compressés lors de la mise à jour, ou en utilisant la mise à jour delta. Nous développerons cela plus tard.

Définir une stratégie de mise à jour

Avant de mettre en œuvre une solution de mise à jour, il faut définir une stratégie de mise à jour. Cette stratégie est conforme à la durée de vie d’un produit et est très difficile à modifier.

Voici quelques exemples de stratégie de mise à jour :

Double copy mode

  • Le mode double copie consiste à dupliquer les éléments, ce qui implique d’avoir : deux rootfs, deux kernels, deux DT (device tree), deux environnements de bootloader, etc.

La procédure de mise à jour se déroule comme suit. Pendant que le produit tourne sur rootfs1 et kernel1, swupdate met à jour rootfs2 ou kernel2 et redémarre ensuite sur rootfs2 et kernel2.

Si la mise à jour est réussie, le produit reste tel quel. Mais si ce n’est pas le cas (rootfs2 est corrompu ou kernel2 panique) le u-boot exécute un rollback pour revenir à rootfs1 et kernel1.

SWUpdate linux embedded system update double copy strategy

Single rescue strategy

  • La stratégie de sauvetage simple utilise moins d’espace que le mode double copie en travaillant avec un rootfs et un kernel de sauvetage. Le kernel de secours est limité aux pilotes indispensables, et le rootfs de secours est limité aux bibliothèques nécessaires et à swupdate. Les autres rootfs et kernel sont le firmware de production.

Lorsqu’une mise à jour est prête, l’image redémarre sur l’image de secours et à partir de celle-ci, le rootfs et le kernel sont mis à jour. Une fois mis à jour, l’image redémarre sur le noyau et les rootfs de production.

Dans tous les cas, si la mise à jour échoue, le kernel et les rootfs de secours servent de backup.

SWUpdate linux embedded systems single rescue update strategy

Comme nous l’avons vu précédemment, SWUpdate étant un framework, ses seules limites sont celles de l’imagination de ses utilisateurs.

Bootloader interface

SWUpdate doit fonctionner avec le bootloader, ce qui signifie que lorsque le dispositif ou le produit doit modifier le rootfs, le bootloader modifiera la ligne de commande que le kernel doit recevoir. Ce qui rend cette relation vitale pour le système de mise à jour.

Maintenant que nous avons vu les stratégies de mise à jour, et l’interface du bootloader, voyons les différents outils que SWUpdate fournit pour envoyer une mise à jour.

 

Mangoose mode

L’interface pourrait ressembler à ceci :

SWUpdate en mode Mangoose inclut un serveur web intégré qui nous permet d’envoyer le fichier de mise à jour via une interface web.

Une fois SWUpdate correctement configuré, cette interface permet à l’utilisateur d’envoyer un fichier de mise à jour (.swu) à la cible. L’interface affiche également des informations telles que l’état de la mise à jour et les logs.

Surricata mode

SWUpdate en mode Surricata demande des mises à jour à un serveur externe, les télécharge et les installe, puis renvoi le résultat.

Principalement utilisé pour de grandes quantités de cartes, le mode Surricata centralise et gère les opérations du système de mise à jour. Du côté du serveur, on peut utiliser Eclipse hawkBit pour faire le suivi du statut d’un groupe de cartes.

Actuellement, seul Eclipse hawkBit est supporté, mais, grâce à la nature open-source de ces solutions, un serveur personnalisé peut être ajouté et faire office de solution de contournement.

Faire de SWupdate une partie intégrante de vos processus d'affaires

SWUpdate agissant comme un framework fournit aux utilisateurs de nombreuses autres fonctionnalités et outils. Par exemple, dans le cas où un utilisateur voudrait faire une mise à jour .swu en utilisant une autre application. Le fichier peut être envoyé au deamon SWUpdate en utilisant l’outil SWUpdate-client. En plus de cela, avec SWUpdate-progress, cette même application peut récupérer les données de progression de la mise à jour, ce qui permet un suivi externe.

De nombreuses autres fonctionnalités sont disponibles, et toutes sont très bien documentées.

Contrôleurs

Si vous avez un besoin spécifique, comme l’installation d’une certaine mise à jour ou la mise à jour d’un microcontrôleur lié à la cible, SWUpdate vous permet d’ajouter votre propre contrôleur.

MAJ signées

La sécurité reste importante pour SWUpdate. La capacité d’utiliser HTTPS avec le mode surricata en est déjà la preuve mais nous pouvons également signer les fichiers .swu. SWUpdate sera alors en mesure de vérifier que les mises à jour reçus proviennent d’une source fiable (clé privée/clé publique).

Résoudre le problème de la taille et de la bande passante

Mises à jour compressées

La partie la plus coûteuse d’une procédure de mise à jour est dans la plupart des cas le coût de la bande passante. La mise à jour d’un rootfs pour un grand nombre de cibles nécessite une grande quantité de bande passante. Pour résoudre et réduire les coûts, SWUpdate vous permet d’utiliser des rootfs compressés.

Mises à jour Delta

Le prix de la bande passante reste élevé même après compression, c’est pourquoi SWUpdate propose une autre solution basée sur les deltas.

Cette solution sera abordée dans un prochain article.

En conclusion, SWUpdate est un framework massif capable de résoudre de nombreuses situations spécifiques. Bien configuré, SWUpdate peut réduire vos coûts de mise à jour tout en rendant la mise à jour des systèmes basés sur Linux beaucoup plus simple pour vos équipes.

Si vous souhaitez en savoir plus sur SWUpdate et sur la manière dont il peut aider votre entreprise, vous pouvez contacter

Fabien LAHOUDERE, T&S Linux Practice Leader
Martin COUSSERANS, Business manager

Vous souhaitez faire partie de l'aventure ?