2 points par GN⁺ 2024-12-06 | 1 commentaires | Partager sur WhatsApp

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 sont BANAN (bootloader personnalisé) et GRUB.

  • Pour démarrer en UEFI, définissez la variable d’environnement BANAN_UEFI_BOOT=1. Il faut aussi définir OVMF_PATH vers 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_ à fpath dans 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.

    1. 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.
    2. 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

 
GN⁺ 2024-12-06
Commentaires sur Hacker News
  • Salue le fait que le pilote USB ait été implémenté entièrement from scratch. Mentionne avoir fait planter le système en tapant cat doom1.wad
  • Aime le nom du projet. Demande quelle a été la partie la plus difficile à implémenter et s’il y a eu des obstacles majeurs
  • Mentionne qu’il manque la phrase traditionnellement incluse dans les annonces de nouveaux noyaux d’OS
  • Trouve le projet très cool. Demande combien d’heures par semaine sont consacrées à ce projet et si le profil étudiant signifie étudiant à l’université. Si oui, se demande si le travail sur l’OS a été fait dans le cadre des études
  • Se demande comment le développement se déroule. Demande si cela tourne dans une VM ou sur du matériel réel. Demande ce qui a été appris pendant le développement et comment le journal de développement est tenu
  • Reconnaît qu’un énorme travail a été nécessaire. Se demande quels ont été les défis les plus marquants
  • Pense que c’est un projet avec un ensemble de fonctionnalités inattendu. Demande s’il est prévu de porter davantage de logiciels
  • Trouve le projet cool. Propose PlatanOS comme nom alternatif pour un fork
  • Considère cela comme une réalisation très impressionnante et aime aussi le nom du projet
  • Félicite pour ce chouette side project. Demande des conseils sur un point de départ ou des ressources pour les personnes qui voudraient tenter un projet similaire