2 Punkte von GN⁺ 2024-12-06 | 1 Kommentare | Auf WhatsApp teilen

banan-os

Dieses Projekt ist ein in C++ geschriebenes Hobby-Betriebssystem und unterstützt die Architekturen x86_64 und i686. Es bietet im Vergleich zu anderen Produkten oder bestehenden Open-Source-Projekten eine einzigartige Lernerfahrung.

Funktionen

  • Allgemein

    • Ring3-User-Space
    • SMP (Multicore-Verarbeitung)
    • linearer Framebuffer (VESA und GOP)
    • Netzwerk-Stack
    • Laden von ELF-Executables
    • AML-Interpreter (teilweise)
    • grundlegende grafische Umgebung
      • Terminal-Emulator
      • Statusleiste
      • Programmstarter
      • einige nützliche Apps
    • dynamisches ELF-Linking
    • Copy-on-Write-Speicher
      • File-Mapping
      • anonymes Mapping
  • Treiber

    • NVMe-Datenträger
    • ATA-(IDE-, SATA-)Datenträger
    • E1000- und E1000E-NICs
    • RTL8111/8168/8211/8411-NICs
    • PS2-Tastatur (alle Scancode-Sets)
    • PS2-Maus
    • USB
      • Tastatur
      • Maus
      • Massenspeicher
      • Hubs
    • virtio-Geräte (Netzwerk, Speicher)
  • Netzwerk

    • ARP
    • ICMP
    • IPv4
    • UDP
    • TCP (teilweise und mit Bugs)
    • Unix-Domain-Sockets
    • SSL
  • Dateisysteme

    • virtuelles Dateisystem
    • Ext2
    • FAT12/16/32
    • Dev
    • Ram
    • Proc
    • Sys
    • 9P
  • Bootloader-Unterstützung

    • GRUB
    • benutzerdefinierter BIOS-Bootloader
    • benutzerdefinierter UEFI-Bootloader

Codestruktur

Jede Hauptkomponente und Bibliothek hat ihr eigenes Unterverzeichnis. Jedes Verzeichnis enthält ein include-Verzeichnis mit allen Header-Dateien dieser Komponente. Alle Header werden mit absoluten Pfaden eingebunden.

Build

Benötigte Pakete

  • apt (getestet auf 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

Kompilierung

  • Um die Toolchain für dieses Betriebssystem zu bauen, kann der folgende Befehl ausgeführt werden. Dieser Schritt muss nur einmal durchgeführt werden und kann lange dauern.

    • ./bos toolchain
  • Um das Betriebssystem selbst zu bauen, kann einer der folgenden Befehle ausgeführt werden. Für das Erstellen/Ändern des Disk-Images sind Root-Rechte erforderlich.

    • ./bos qemu
    • ./bos qemu-nographic
    • ./bos qemu-debug
    • ./bos bochs
  • Kernel oder Disk-Image können auch gebaut werden, ohne sie auszuführen.

    • ./bos kernel
    • ./bos image
  • Um für eine andere Architektur zu bauen, setze die Umgebungsvariable BANAN_ARCH=_arch_ (z. B. BANAN_ARCH=i686).

  • Um den Bootloader zu ändern, setze die Umgebungsvariable BANAN_BOOTLOADER. Unterstützte Werte sind BANAN (benutzerdefinierter Bootloader) und GRUB.

  • Um mit UEFI zu starten, setze die Umgebungsvariable BANAN_UEFI_BOOT=1. Außerdem muss OVMF_PATH auf das richtige OVMF gesetzt werden (Standard: /usr/share/ovmf/x64/OVMF.fd).

  • Wenn das Disk-Image beschädigt ist oder neu erstellt werden soll, kann _build/banan-os.img_ manuell gelöscht oder der folgende Befehl ausgeführt werden.

    • ./bos image-full
  • Es wird auch ein Shell-Completion-Skript für zsh erzeugt. Die Datei _script/shell-completion/zsh/_bos_ kann nach /usr/share/zsh/site-functions/ kopiert oder _script/shell-completion/zsh_ zum fpath in .zshrc hinzugefügt werden.

Mitwirken

  • Das Upstream-Projekt wird auf einem privaten Server gehostet, daher ist das Zusammenführen von Beiträgen nicht so einfach wie auf GitHub. Wenn du auf GitHub einen PR sendest, kann der Diff heruntergeladen und manuell angewendet werden. Auf Wunsch kann auch ein Konto auf dem privaten Git-Server bereitgestellt werden. In diesem Fall bitte per E-Mail oder Discord Kontakt aufnehmen.

  • Da es in erster Linie um eine Lernerfahrung geht, bitte vor dem Hinzufügen neuer Funktionen zuerst per E-Mail, Discord, Issue usw. Kontakt aufnehmen. Wenn ohne Rückfrage ein PR zu einer Aufgabe eingereicht wird, die bereits geplant war, ist die Wahrscheinlichkeit hoch, dass der PR geschlossen wird. Bugfixes sind jederzeit willkommen.

  • Commit-Messages müssen wie folgt formatiert sein.

    1. Die erste Zeile muss im Format " Subject: Description " stehen, wobei Subject den betroffenen Bereich (Kernel, Shell, BuildSystem usw.) angibt und Description eine kurze Beschreibung der Änderung ist. Die erste Zeile darf höchstens 72 Zeichen lang sein.
    2. Der Nachrichtentext muss die Änderungen und die Gründe dafür im Detail erläutern.
  • Alle Commits müssen die in .pre-commit-config.yaml definierten Pre-Commit-Hooks bestehen. Anleitungen zum Einrichten von pre-commit finden sich unter pre-commit.com.

1 Kommentare

 
GN⁺ 2024-12-06
Hacker-News-Kommentare
  • Es wird gelobt, dass der USB-Treiber von Grund auf selbst implementiert wurde. Erwähnt wird, dass das System durch die Eingabe von cat doom1.wad zum Absturz gebracht wurde
  • Der Projektname gefällt. Gefragt wird, was von den umgesetzten Dingen am schwierigsten war und ob es ernsthafte Hindernisse gab
  • Es wird angemerkt, dass der bei Ankündigungen neuer OS-Kernel üblicherweise enthaltene Satz fehlt
  • Das Projekt wird als sehr cool angesehen. Gefragt wird, wie viele Stunden pro Woche in das Projekt investiert werden und ob das Studentenprofil bedeutet, dass es sich um einen Universitätsstudenten handelt. Falls ja, wird gefragt, ob im Rahmen des Studiums an dem OS gearbeitet wurde
  • Es besteht Interesse daran, wie der Entwicklungsprozess abläuft. Gefragt wird, ob es in einer VM oder auf echter Hardware läuft. Außerdem wird gefragt, was während der Entwicklung gelernt wurde und wie Entwicklungsaufzeichnungen geführt werden
  • Es wird anerkannt, dass sehr viel Arbeit nötig war. Gefragt wird, welche Herausforderungen besonders herausstachen
  • Das Projekt wirkt wie eines mit einem unerwarteten Funktionsumfang. Gefragt wird, ob geplant ist, weitere Software zu portieren
  • Das Projekt wird als cool angesehen. Als alternativer Name für einen Fork wird "PlatanOS" vorgeschlagen
  • Es wird als sehr beeindruckende Leistung angesehen, und auch der Projektname gefällt
  • Zu dem coolen Nebenprojekt wird gratuliert. Es werden Tipps zu Einstiegspunkten oder Materialien für Menschen erbeten, die ein ähnliches Projekt versuchen möchten