HN dévoile Banan-OS, un système d’exploitation de type Unix écrit from scratch
(github.com/Bananymous)banan-os
Ce projet est un système d’exploitation amateur écrit en C++, prenant en charge les architectures x86_64 et i686. Il offre une expérience d’apprentissage originale par rapport à d’autres produits ou projets open source existants.
Fonctionnalités
-
Général
- Espace utilisateur Ring3
- SMP (multiprocessing symétrique)
- framebuffer linéaire (VESA et GOP)
- pile réseau
- chargement des exécutables ELF
- interpréteur AML (partiel)
- environnement graphique de base
- émulateur de terminal
- barre d’état
- lanceur de programmes
- quelques applications utiles
- édition de liens dynamique ELF
- mémoire copy-on-write
- mapping de fichiers
- mapping anonyme
-
Pilotes
- disques NVMe
- disques ATA (IDE, SATA)
- NIC E1000 et E1000E
- NIC RTL8111/8168/8211/8411
- clavier PS2 (tous les jeux de scancodes)
- souris PS2
- USB
- clavier
- souris
- stockage de masse
- hubs
- périphériques virtio (réseau, stockage)
-
Réseau
- ARP
- ICMP
- IPv4
- UDP
- TCP (partiel et bugué)
- sockets de domaine Unix
- SSL
-
Systèmes de fichiers
- système de fichiers virtuel
- Ext2
- FAT12/16/32
- Dev
- Ram
- Proc
- Sys
- 9P
-
Prise en charge des bootloaders
- GRUB
- bootloader BIOS personnalisé
- bootloader UEFI personnalisé
Structure du code
Chaque composant principal et chaque bibliothèque possède son propre sous-répertoire. Chaque répertoire contient un dossier include regroupant tous les fichiers d’en-tête du composant correspondant. Tous les en-têtes sont inclus via des chemins absolus.
Build
Paquets requis
-
apt (testé sur Ubuntu 22.04)
build-essential,git,ninja-build,texinfo,bison,flex,libgmp-dev,libmpfr-dev,libmpc-dev,parted,qemu-system-x86,cpu-checker
-
pacman
base-devel,git,wget,cmake,ninja,parted,qemu-system-x86
Compilation
-
Pour construire la toolchain de ce système d’exploitation, vous pouvez exécuter la commande suivante. Cette étape ne doit être effectuée qu’une seule fois et peut prendre du temps.
./bos toolchain
-
Pour construire le système d’exploitation lui-même, vous pouvez exécuter l’une des commandes suivantes. Les privilèges root sont nécessaires pour créer/modifier l’image disque.
./bos qemu./bos qemu-nographic./bos qemu-debug./bos bochs
-
Il est également possible de construire le kernel ou l’image disque sans les exécuter.
./bos kernel./bos image
-
Pour compiler pour une autre architecture, définissez la variable d’environnement
BANAN_ARCH=_arch_(par ex.BANAN_ARCH=i686). -
Pour changer de bootloader, définissez la variable d’environnement
BANAN_BOOTLOADER. Les valeurs prises en charge sontBANAN(bootloader personnalisé) etGRUB. -
Pour démarrer en UEFI, définissez la variable d’environnement
BANAN_UEFI_BOOT=1. Il faut aussi définirOVMF_PATHvers le bon OVMF (valeur par défaut :/usr/share/ovmf/x64/OVMF.fd). -
Si l’image disque est corrompue ou si vous souhaitez en recréer une, vous pouvez supprimer manuellement
_build/banan-os.img_ou exécuter la commande suivante../bos image-full
-
Un script de complétion shell pour zsh est également généré. Vous pouvez copier le fichier
_script/shell-completion/zsh/_bos_vers/usr/share/zsh/site-functions/ou ajouter_script/shell-completion/zsh_àfpathdans votre.zshrc.
Contribution
-
L’upstream étant hébergé sur un serveur personnel, fusionner des contributions n’est pas aussi simple que sur GitHub. Si vous envoyez une PR sur GitHub, il est possible de télécharger le diff et de l’appliquer manuellement. Si vous le souhaitez, un compte peut être fourni sur le serveur git personnel. Dans ce cas, merci de prendre contact par e-mail ou via Discord.
-
Comme il s’agit avant tout d’une expérience d’apprentissage, merci de prendre d’abord contact par e-mail, Discord, issue, etc., avant d’ajouter de nouvelles fonctionnalités. Si vous envoyez une PR sans avoir échangé au préalable sur un travail que j’avais prévu, il est très probable qu’elle soit fermée. Les corrections de bugs sont toujours les bienvenues.
-
Les messages de commit doivent être formatés comme suit.
- La première ligne doit suivre le format " Sujet: Description ", où Sujet désigne la zone concernée (Kernel, Shell, BuildSystem, etc.) et Description une brève explication de la modification. La première ligne doit faire 72 caractères maximum.
- Le corps du message doit expliquer en détail ce qui a été modifié et pourquoi.
-
Tous les commits doivent passer les hooks pre-commit définis dans
.pre-commit-config.yaml. Pour les instructions de configuration de pre-commit, consultez pre-commit.com.
1 commentaires
Commentaires sur Hacker News
cat doom1.wadPlatanOScomme nom alternatif pour un fork