HN vorgestellt: Banan-OS, ein von Grund auf neu geschriebenes Unix-ähnliches Betriebssystem
(github.com/Bananymous)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 sindBANAN(benutzerdefinierter Bootloader) undGRUB. -
Um mit UEFI zu starten, setze die Umgebungsvariable
BANAN_UEFI_BOOT=1. Außerdem mussOVMF_PATHauf 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_zumfpathin.zshrchinzugefü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.
- 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.
- Der Nachrichtentext muss die Änderungen und die Gründe dafür im Detail erläutern.
-
Alle Commits müssen die in
.pre-commit-config.yamldefinierten Pre-Commit-Hooks bestehen. Anleitungen zum Einrichten von pre-commit finden sich unter pre-commit.com.
1 Kommentare
Hacker-News-Kommentare
cat doom1.wadzum Absturz gebracht wurde