Neptun OS ist eine Windows -NT -Persönlichkeit für das Sel4 Microkernel. Es implementiert das, was Microsoft als "NT Executive", die obere Ebene des Windows -Kernel NTOSKRNL.EXE , als Benutzerprozess unter dem Sel4 Microkernel nennt. Die NT-Exekutive implementiert die sogenannte NT Native API, die native System-Call-Schnittstelle von Fenstern, auf denen die bekanntere Win32-API aufgebaut wird. Diese sind dem Benutzermodus über Stubfunktionen in NTDLL.DLL mit Namen wie NtCreateProcess ausgesetzt. Der NT -Manager ist auch dafür verantwortlich, eine Programmierschnittstelle zu Gerätetreibern auszusetzen. Diese Schnittstelle enthält Funktionen wie IoConnectInterrupt und IoCallDriver . Unsere Architektur ermöglicht es Gerätefahrern, in separaten Benutzerspace -Prozessen auszuführen und über Standard -SEL4 -IPC -Primitiven mit dem NT -Executive -Prozess zu kommunizieren.
Das eventuelle Ziel des Neptun OS -Projekts ist es, genügend NT -Semantik so zu implementieren, dass ein ReactO -Benutzerland unter Neptune OS sowie die meisten ReactO -Kernel -Treiber portiert werden kann. Theoretisch sollten wir in der Lage sein, eine binäre Kompatibilität mit nativen Windows -ausführbaren Funktionen zu erreichen, vorausgesetzt, unsere Implementierung der NT Native API ist ausreichend treu. Wir sollten auch in der Lage sein, mit Windows-Geräte-Treibern und Dateisystemtreibern ein hohes Maß an Quellcode-Portabilität zu erzielen, obwohl wir aufgrund der architektonischen Unterschiede zu Windows/ReactOs, die dieses Ziel nicht realistisch machen, keine vollständige Quellcodekompatibilität für Linien für die Line-für-Linie anstreben. Weitere Informationen finden Sie im Abschnitt Dokumentation.
Der aktuelle Status des Projekts besteht darin, dass wir genügend NT-Executive-Komponenten implementiert haben, um einen einigermaßen vollständigen Dateisystemstapel mit Read-Ahead- und Writ-Back-Caching-Unterstützung zu unterstützen, das den FAT12/16/32-Dateisystem-Treiber fatfs.sys und einen Floppy Controller-Treiber fdc.sys enthält. Wir haben auch einen grundlegenden Tastatur -Treiberstack, der den Tastaturklassen -Treiber kbdclass.sys und den PS/2 -Port -Treiber i8042prt.sys enthält. Diese ermöglichen es uns, eine grundlegende Eingabeaufforderung ntcmd.exe aus dem ReactOS -Projekt auszuführen, das die meisten gemeinsamen Shell -Befehle wie pwd , cd , copy , move , del , mount und umount unterstützt. Wir schließen auch einen beep.sys -Treiber ein, der den PC -Lautsprecher nervig klingt.
Das gesamte System passt in einen Floppy und kann aus Release V0.2.0002 heruntergeladen werden. Sie können eine kurze Demo auf YouTube ansehen. Sie können es auch selbst bauen. Siehe den Abschnitt zum Gebäude.
Für die nächste Veröffentlichung planen wir, den ATA/AHCI -Treiberstack von Reactos zu portieren, damit wir die meisten Pata/SATA -Festplatten unterstützen können. Wir planen auch, eine Festplatten -Benchmark -Suite zu schreiben/portieren, damit wir nachweisen können, dass ein Mikrokernel -Design nicht zu inakzeptablen Leistungsstrafen führt.
Für i386 Systeme (sollte wahrscheinlich i686 genannt werden):
enable_paging in sel4/src/arch/x86/32/head.S ).Für AMD64 -Systeme:
fsgsbase -Anweisung erstellt. Dies wird nur auf der Ivy Bridge und später auf der Ivy Bridge unterstützt. Um AMD64 -Builds auf früheren CPUs auszuführen, können Sie die FSGSBase -Anweisung in private/ntos/cmake/sel4.cmake deaktivieren. Außerdem benötigen wir CMPXCHG16B, was seit Nehalem und möglicherweise früher verfügbar ist (frühere Core 2 -Prozessoren benötigen möglicherweise ein Mikrocode -Update). Für amd64 -Maschinen wurde ThinkPad X230 zur Arbeit getestet.
Sie müssen unter Linux erstellen (SEL4 erstellt in keinem anderen Betriebssystem). Sie benötigen die folgenden Python -Abhängigkeiten und wahrscheinlich mehr.
jinja2
future
ply
setuptools
six
lxml
Sie benötigen auch cmake , clang , llvm und lld als grundlegende Toolchain. clang ist ein nativer Cross -Compiler, der sowohl ELF- als auch PE -Ziele erzeugen kann. GCC wird nicht unterstützt, kann aber theoretisch zur Arbeit gemacht werden. Sie benötigen sowohl eine Elf Toolchain als auch eine PE -Toolchain (und wahrscheinlich eine Menge Geduld), wenn Sie GCC zum Laufen bringen möchten. Sie benötigen auch den windmc , der der PE -Nachrichtenressourcencompiler von mingw ist. Schauen Sie sich build.sh für das Build -Skript an. Die bevorzugte Clang -Version ist 15, aber die jüngsten Versionen sollten alle funktionieren. Sie benötigen auch das cpio -Dienstprogramm für den Aufbau des InitcPio. Schließlich benötigen Sie für den Boot -Floppy und den Boot -ISO die folgenden Tools: syslinux (für Boot -Floppy), grub und xorriso (für Boot -ISO) und mtools (für beide).
Es wird empfohlen, eine Sprachserver-fähige IDE zu verwenden, um den Quellcode zu durchsuchen. Das getestete Setup ist das lsp-mode Paket auf emacs mit clangd als Sprachserver. Das Skript build.sh generiert die Datei compile_commands.json für clangd . Sie müssen JQ für diesen Zweck installieren.
Klonen Sie zuerst das Projekt (Stellen Sie sicher, dass Sie git clone --recurse-submodules verwenden, da wir den SEL4-Kernel als Submodul einschließen) und dann laufen
./build.sh [amd64] [release]
Wenn Sie amd64 nicht angeben, ist es ein i686 -Build. Wenn Sie keine release angeben, ist es ein Debug -Build. Zum Erstellen von Stiefelfloppies geben Sie an
./mkfloopy.sh [amd64] [release]
Zum Erstellen von Start -ISOs tippen Sie auf
./mkiso.sh [amd64] [release]
Um mit QEMU zu simulieren, laufen Sie
./run.sh [direct|iso|uefi] [amd64] [release] [extra-qemu-args]
Wenn Sie direct angeben, lädt QEMU den SEL4 -Kernel und das NTOS -Bild direkt (mit -kernel und -initrd ). Wenn Sie iso oder uefi angeben, wird die von mkiso.sh erstellte Boot -ISO geladen. Die uefi -Option konfiguriert auch QEMU zum Laden der UEFI -Firmware, die eine gute High -Definition -FrameBuffer -Konsole bietet. Andernfalls wird der von mkfloppy.sh erstellte Stiefelfloppy verwendet. Zusätzliche Argumente werden an Qemu übergeben. Um den i386 -Release -Build mit dem in QEMU aktivierten PC -Lautsprecher auszuführen, können Sie beispielsweise Folgendes übergeben (dies setzt voraus, dass Sie eine aktuelle QEMU -Version verwenden und PulseAudio haben).
./run.sh release -machine pcspk-audiodev=snd0 -audiodev pa,id=snd0
Der Debug -Build kann langsam langsam ausgeführt werden, insbesondere wenn Sie die serielle Anschlussprotokollierung einschalten. Sie können die Protokollierung ausschalten, indem Sie den Master -Header des NT -Exekutivprojekts ändern (siehe private/ntos/inc/ntos.h ).
Wir verwenden die LLVM-Toolchain, damit die theoretisch Cross-Compiling einfach ohne besondere Handhabung funktionieren sollte. In der Praxis stützt sich das Linker -Skript für die endgültige SEL4 -Kernel -ausführbare Datei auf i386 / amd64 auf Funktionen, die nur der Gnu LD -Linker unterstützt. Daher können wir den LLVM -Linker (LLD) nicht verwenden, um den SEL4 -Kernel zu verknüpfen. Dies bedeutet, dass Sie die GNU LD-Vernetzer für das Ziel-Triple i686-pc-linux-gnu und x86_64-pc-linux-gnu benötigen, die an dem üblichen Ort ( /usr/bin ) installiert sind ( /USR /bin), damit clang sie bei der Verknüpfung des SEL4-Kernels korrekt finden kann. Der PE-Teil der Toolchain ist vollständig in sich geschlossen und erfordert kein spezielles Handling beim Kreuzverbinden (es ist bereits eine Kreuz-Toolchain, da wir Fenster auf einem Linux-Host abzielen).
Cross-Compiling wird an Archlinux getestet, das auf Loongarch64 (LOONGSON 3A5000-Prozessor) mit llvm-14 ausgeführt wird, und scheint den richtigen Code zu generieren. Bitte öffnen Sie ein Problem, wenn Sie auf ein Problem stoßen.
Beachten Sie, dass der von MKISO.SH generierte Start-ISO, der von mkiso.sh generiert wurde, nicht als grub-mkrescue Kopie für die von Mkiso.sh erzeugte Boot-ISO-ISO-ISO, die die Startdateien der nativen Plattform in die ISO kopieren kann, wenn Ihr Grub für die native Plattform erstellt wird. Um dies zu beheben, bauen Sie das GRUB-Paket für i686/AMD64 zusammen (oder führen Sie einfach die endgültige ISO-Generation auf einem i686/AMD64-System aus).
Die Dokumentationen befinden sich im docs -Verzeichnis. Für Entwickler und diejenigen, die das Innenleben von Neptun OS verstehen möchten, lesen Sie den Developer-Guide.md , der mit einem architektonischen Überblick über das Betriebssystem beginnt und die verschiedenen Entwurfsentscheidungen einzelner OS-Komponenten erläutert. Es enthält auch den Treiberporting -Handbuch für diejenigen, die Treiber von Reactos portieren möchten.