BUT2 - Développement d'un outil de test automatique BIOS/Firmware - Kontron (8 sem.)


Stage BUT2 - Outil de test automatique BIOS/Firmware
Photo d'un PiKVM V4 Plus

Photo d'un PiKVM V4 Plus (https://pikvm.org/products/)

Entreprise :
Nom : Kontron Modular Computers SAS
Secteur : Systèmes embarqués, informatique industrielle
Lieu : La Garde (83)
Stage :
Année : 2023-2024
Durée : 8 semaines
Sujet : Automatisation des tests BIOS, firmware et OS
Compétences développées :
Python avancé : Programmation orientée objet, gestion d'API, automatisation
Traitement du signal : OCR, analyse de flux vidéo, décodage ligne série
Systèmes embarqués : Interaction hardware/software, USB OTG, SSH/Telnet
Tests et validation : Développement de routines de test, cartographie BIOS
Logo Kontron


Contexte et objectifs

J'ai réalisé mon stage de deuxième année de BUT GEII chez Kontron Modular Computers, une entreprise spécialisée dans les systèmes embarqués industriels. L'objectif principal était de concevoir un outil logiciel permettant d'automatiser les tests de conformité sur les BIOS, firmwares et systèmes d'exploitation des cartes électroniques développées par l'entreprise.

Le besoin d'automatisation est né de la complexité et du volume des tests à effectuer sur ces systèmes, notamment lors des phases de validation et de mise à jour. L'enjeu était de fiabiliser et d'accélérer ces procédures.

Architecture technique

Pour répondre à ces besoins, j'ai mis en place une architecture de test s'appuyant sur plusieurs interfaces matérielles et logicielles. Le cœur du système repose sur un PiKVM (Raspberry Pi dédié au contrôle KVM sur IP), connecté à la machine cible via HDMI, USB OTG (émulation clavier/souris/clé USB) et une ligne série RS-232 pour la communication bas niveau.

Architecture et interactions du système de test
Architecture et interactions du système de test

Le banc de test permet ainsi de piloter la machine cible à distance, de récupérer l'affichage du BIOS ou du shell UEFI, et d'injecter des séquences de touches ou des fichiers binaires pour les opérations de flash ou de boot. L'ensemble des échanges est orchestré via des protocoles réseau sécurisés (SSH, Telnet, HTTPS, WebSocket).

Développements logiciels

J'ai développé une librairie Python nommée PiKVM-Utils, structurée autour d'une architecture orientée objet. Cette librairie encapsule la gestion des différentes interfaces (vidéo, série, OTG) et propose des méthodes génériques pour interagir avec le BIOS et le firmware de la cible.

Architecture et interactions du système de test
Diagramme de classes simplifié de PiKVM-Utils (Lien vers le Diagramme de classes complet)

La récupération de l'affichage du BIOS s'effectue soit par capture d'écran (analyse OCR du flux vidéo), soit par décodage des trames de la ligne série. Pour l'OCR, j'ai utilisé Tesseract et mis en place une chaîne de prétraitement d'image (OpenCV) pour améliorer la fiabilité de la reconnaissance, notamment sur des caractères pixelisés et faiblement contrastés.

Architecture et interactions du système de test
Chaîne de traitement vidéo

La gestion de la ligne série nécessite un décodage des séquences d'échappement ANSI pour reconstruire l'état du terminal et extraire les options du BIOS. J'ai également implémenté des routines pour l'émulation de périphériques USB (clavier, clé USB virtuelle) via l'API du PiKVM, permettant par exemple de flasher un firmware ou de booter un OS sans intervention humaine.

Analyse scientifique et validation

J'ai validé la robustesse de l'outil en comparant les résultats obtenus par OCR et par ligne série, en mesurant la précision de la reconnaissance des options et la capacité à naviguer automatiquement dans les menus du BIOS. Les tests ont montré que la ligne série offre une fiabilité supérieure, mais l'OCR reste indispensable pour les cartes dépourvues de sortie série.

J'ai également mis en place des scripts de cartographie automatique du BIOS, permettant d'extraire l'ensemble des options et de détecter les différences entre deux versions de firmware. L'intégration de routines de vérification par hash SHA256 a permis de sécuriser les transferts de fichiers lors des opérations de flash à distance.

Bilan et perspectives

Ce stage m'a permis de maîtriser l'automatisation de tests sur systèmes embarqués, en combinant des compétences en développement Python, traitement du signal (OCR, analyse série) et interaction hardware/software. J'ai pu livrer un outil réutilisable, documenté et adaptable à d'autres environnements de test.

Pour aller plus loin, j'ai identifié des pistes d'amélioration, notamment la centralisation des interfaces sur un seul Raspberry Pi, l'optimisation de la chaîne OCR et l'intégration de la librairie dans un framework de test complet. Cette expérience a renforcé mon intérêt pour la validation logicielle et les systèmes embarqués industriels.