Bref rappel sur l’UEFI
- L’UEFI charge le bootloader de l’OS via le firmware stocké dans la ROM de la carte mère.
- Une nouvelle norme, l’UEFI, a été introduite pour dépasser les limites du BIOS.
- L’UEFI exécute les bootloaders dans un environnement 64 bits et fournit diverses API.
Démarrage réseau
- Certains bootloaders peuvent charger l’OS via le réseau au lieu d’un périphérique local.
- Le firmware UEFI inclut une pile réseau, ce qui permet d’exécuter des applications dans l’environnement de pré-amorçage.
Réseau en Rust dans l’UEFI
- Implémenter le protocole TCP de l’UEFI en Rust a été la partie la plus délicate du projet.
- L’utilisation du protocole TCP de l’UEFI est complexe et implique un état global, des callbacks, des buffers scatter-gather, etc.
- Le code Rust a été testé avec soin afin d’éviter les fuites mémoire et les UAF (Use-After-Free) dans les buffers de réception TCP.
Prise en charge du curseur
- La souris n’est pas indispensable pour un client IRC, mais elle améliore l’expérience utilisateur.
- Le Simple Pointer Protocol de l’UEFI est utilisé pour lire les mouvements de la souris et les clics.
Modélisation des messages IRC
- La modélisation des messages IRC a été une tâche simple et agréable.
- IRC utilise un format de lignes textuel dont seule une partie est standardisée.
Utiliser libgui dans l’UEFI
- Faire tourner une boîte à outils GUI dans l’UEFI a été relativement simple, car beaucoup de travail avait déjà été fait pour rendre la boîte à outils GUI Rust d’axle utilisable dans d’autres contextes.
- Après avoir fourni une implémentation UEFI de
AwmWindow, il devient possible d’utiliser l’essentiel des fonctionnalités de libgui, comme la gestion des événements, le rendu des polices et la composition des couches.
Barre de défilement
- Comme la vue défilante affiche principalement du texte, la fonctionnalité de barre de défilement a été réimplémentée dans Rust libgui.
Rendu du texte dans une vue défilante
- Quelques changements ont été nécessaires dans la manière de rendre le texte dans une vue défilante.
- La vue défilante gère les données de pixels à l’aide d’un canevas extensible basé sur des « tuiles ».
Améliorations de libgui
- Chaque nouvelle application graphique est l’occasion d’améliorer le système et les API.
- Pendant le développement de UEFIRC, quelques ajustements et corrections ont été ajoutés à libgui.
Totalement inutile
- UEFIRC n’est en réalité pas très utile en pratique, et ce projet est une plaisanterie complexe.
- Si vous avez des reproches à faire à la pile TCP/IP de l’UEFI, cet outil vous permet de les exprimer.
Avis de GN⁺
- Ce projet consiste à développer en Rust un client IRC graphique fonctionnant dans l’environnement UEFI, une tentative originale qui permet de discuter et de lire des messages avant même le démarrage du système.
- L’implémentation réseau, qui exploite à la fois la complexité de l’UEFI et la sûreté mémoire de Rust, peut constituer un support d’apprentissage important en programmation système.
- L’utilité réelle de cette technologie peut prêter à débat, mais elle offre un cas intéressant pour explorer les possibilités de développement d’applications dans l’environnement UEFI.
- En combinant la complexité du modèle de programmation UEFI et la sûreté de Rust, ce projet peut aider à mieux comprendre la programmation bas niveau.
- Le projet est publié en open source, ce qui en fait une bonne ressource de référence et d’usage pour les développeurs intéressés.
1 commentaires
Avis Hacker News
Retour d’expérience d’un développeur ayant créé un client IRC graphique s’exécutant dans l’environnement de pré-amorçage UEFI
Remarque sur l’idée fausse selon laquelle le système d’exploitation serait le niveau le plus bas de la pile logicielle
Réaction aux questions sur l’objectif du projet
Réaction d’un ami du développeur face au projet
Admiration pour l’accessibilité et la documentation de l’API UEFI
Avis personnel sur l’accélération de la souris
Mention des promesses initiales de l’UEFI
Comparaison avec d’autres projets de bootloader
Éloges pour la visualisation de l’article
Possibilités d’applications musicales en environnement bare metal