Photo d'un PiKVM V4 Plus (https://pikvm.org/products/)
Note: Ce stage s'inscrit dans la continuité directe de mon stage de BUT2.
J'ai effectué mon stage de troisième année de BUT GEII chez Kontron Modular Computers, dans la continuité directe de mon stage de BUT2. L'objectif était d'aller plus loin dans l'automatisation des tests de BIOS, firmwares et systèmes d'exploitation, en centralisant les interfaces matérielles et en intégrant les outils développés précédemment dans un environnement de test.
Ce stage m'a permis de passer d'un prototype fonctionnel (PiKVM-Utils) à une solution déployée et maintenable, intégrée au framework de test de l'entreprise et adaptée à des campagnes de validation à grande échelle.
J'ai repensé l'architecture du banc de test pour centraliser toutes les interfaces sur un seul PiKVM, basé sur un Raspberry Pi CM4. Cette évolution a permis de regrouper la gestion de la ligne série, du contrôle d'alimentation (powerswitch), du flux vidéo HDMI et de l'USB OTG sur une seule plateforme, simplifiant la maintenance et la reproductibilité des tests.
Pour garantir la robustesse, j'ai modifié le système d'exploitation du PiKVM (PiKVM-OS) afin d'y intégrer nativement la gestion des lignes série (via Telnet), des multiprises pilotables (powerswitch), et d'assurer la persistance des configurations grâce à des scripts d'installation automatisés.
ENV{ID_PATH_TAG}=="plateform-fd500000_pcie-pci-0000_01_00_0-usb-0_1_2_3_3_1_1_0", SYMLINK+="ttyPort17"
La gestion des ports série a nécessité la création de règles udev spécifiques pour garantir une identification stable des ports, même après redémarrage ou rebranchement matériel.
J'ai intégré la librairie PiKVM-Utils comme sous-module du framework de test Python interne à Kontron. Ce framework, basé sur unittest, permet de séquencer des plans de tests complexes, de générer automatiquement des rapports et de mutualiser les routines de test entre différents projets matériels.
Pour cela, j'ai enrichi la configuration YAML du framework afin de décrire précisément la présence et les paramètres des PiKVM, rendant l'intégration transparente pour les utilisateurs et facilitant la réutilisation des scripts sur de nouveaux systèmes.
J'ai également développé un gestionnaire web pour les powerswitchs en Python-Flask, déployé via Gunicorn et intégré au reverse proxy Nginx du PiKVM. Cette interface permet de piloter à distance l'alimentation des machines à tester, tout en restant compatible avec les outils existants.
J'ai automatisé l'exécution de plans de tests bas-niveau, notamment sur les firmwares (PBIT, UEFI), en développant des scripts capables de naviguer dans les menus du BIOS, de vérifier l'intégrité des options et de flasher des firmwares à distance. L'utilisation de décorateurs Python a permis de clarifier la documentation des tests et de distinguer les tests automatiques des tests nécessitant une intervention humaine.
J'ai également conçu KDeployer, un outil de déploiement automatisé s'appuyant sur la configuration du framework de test. Il permet de préparer et d'installer des systèmes d'exploitation ou des firmwares sur les machines cibles, en exploitant l'USB OTG du PiKVM pour simuler une clé USB bootable.
Ce stage m'a permis de maîtriser la centralisation des interfaces matérielles sur une plateforme unique, la modification d'une distribution Linux embarquée (PiKVM-OS), l'intégration de services web légers (Flask, Gunicorn, Nginx) et la gestion avancée de configurations pour des campagnes de tests automatisés.
J'ai pu valider la robustesse de la solution en conditions réelles, sur des plans de tests comprenant plusieurs dizaines de cas, et en assurant la traçabilité et la reproductibilité des résultats. Les perspectives d'amélioration identifiées concernent la standardisation des formats de sortie des firmwares pour faciliter l'automatisation, et l'extension de la solution à d'autres environnements matériels.