15 Avenue du Rhin

Strasbourg, France

Contactez-nous

contact@openest.io

Comment mettre à jour un système embarqué ?

Dès les premières étapes de la conception d'un système embarqué, il est indispensable de prévoir le moyen de le mettre à jour.

Comment mettre à jour un système embarqué ?

Pourquoi mettre à jour votre système embarqué ?

Que ce soit pour le faire évoluer, par l’ajout de nouvelles fonctionnalités ou la correction de bugs mais également pour en assurer la sécurité.

En effet, pas une semaine ne passe sans que des failles ne soient découvertes dans les logiciels que nous utilisons. Ces failles peuvent être utilisées pour détourner des objets connectés, elles peuvent être ensuite exploitées pour lancer des attaques de dénis de service (ddos), perturber le fonctionnement d’une organisation ou voler des informations personnelles.

Pour toutes ces raisons, il est indispensable  de prévoir un dispositif de mise à jour du logiciel embarqué, le « firmware » des objets connectés.

Lorsqu’un ordinateur effectue des mises à jour, il demande à l’utilisateur de ne pas éteindre le système. C’est nécessaire car de nombreux fichiers sont copiés pendant le processus. En cas d’extinction impromptue, des fichiers et programmes peuvent êtres corrompus et les dépendances de logiciels dans un état incohérent. Pour un PC les conséquences sont limitées : l’utilisateur doit effectuer des opérations (pénibles) de maintenance manuelle.

Le même cas de figure sur un objet connecté peut l’empêcher définitivement de fonctionner. Sachant qu’il n’est pas acceptable de demander à un utilisateur d’effectuer des opérations de maintenance manuelle, l’objet doit retourner en maintenance chez le fabricant ou être mis au rebus. Il existe plusieurs approches pour éviter cette situation.

mises à jour A/B : une option fiable

Une solution couramment utilisée consiste à appliquer des mises à jour dites « A/B »: la mise à jour est appliquée dans un environnement séparé, habituellement sur une autre partition puis, lorsque tout est prêt, le système redémarre dans son nouvel environnement.

En cas de mise à jour incomplète, on continue d’utiliser le système stable et la mise à jour peut être effectuée plus tard. De plus, il devient possible de réutiliser l’ancien système dans le cas où le nouveau présente des instabilités.

mises à jour A/B : description pas à pas

Prenons l’exemple d’un objet connecté fonctionnant sous Linux. Il comprend les éléments suivants :
* un bootloader (typiquement u-boot)
* le noyau Linux (kernel)
* les applications systèmes (rootfs)
* les données utilisateurs

Le noyau et le rootfs sont contenus sur des partitions qui sont doublées :

Kernel A et Rootfs A sont utilisés

Le bootloader utilise la banque A pour démarrer le système.

Une banque est un ensemble de partitions et de fichiers qui fonctionnent ensemble.

Au commencement, le système utilise la banque A, le fichier de mise à jour est présent sur la partition de data. Généralement, il est téléchargé depuis un serveur sécurisé, vérifié, puis décompressé.

Le logiciel en charge de la mise à jour applique la nouvelle version sur la banque B : il copie le nouveau kernel sur la partition Kernel B, puis flashe l’image de la partition roots (le système) sur rootfs B. En cas d’extinction impromptue du système, la banque A reste utilisable à tout instant.

Mise à jour de la banque B

La mise à jour est en cours sur les partition kernel B et roofs B

Ensuite, la partition est vérifiée. Si elle n’est pas corrompue, la configuration du bootloader est changée afin qu’il pointe sur la banque B. Dans le cas contraire, la mise à jour sera retentée plus tard.

Le bootloader selectionne maintenant le kernel B et le rootfs B

État final de la table des partitions après la mise à jour.

Enfin, le système redémarre et le bootloader utilise la banque B. Si le système est fonctionnel, la banque B est « validée », sinon il est toujours possible de revenir sur la banque A.

Cette mise à jour est effectuée depuis la banque A vers la B. La prochaine se fera depuis la B vers la A.

mises à jour A/B : outils

Swupdate est un excellent outils de mise à jour pour les systèmes embarqués utilisant Linux. Il permet de décrire une archive contenant des fichiers, des images et des scripts. Cette description est utilisée lors de la mise à jour pour appliquer les changements nécessaires. Swupdate est disponible sous licence libre et dispose d’une documentation complète.

approches innovantes

Pour fini, si methode de mise à jour A/B à fait ses preuves, elle présente l’inconvénient d’obliger la mise à jour de partitions complètes. Des solutions comme les packages snap peuvent présenter un complément intéressant.

Openest