Photo d'un PiKVM V4 Plus (https://pikvm.org/products/)
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.
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.
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).
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.
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.
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.
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.
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.