Ein Betriebssystem in Rost.
Um das Betriebssystem zu bauen, verwenden Sie nightly Rostbau. Dies ist aufgrund der Verwendung einiger instabiler Flaggen und Eigenschaften erforderlich, die nur im nightly Build erhältlich sind.
Hinweis: Das Ziel wurde im
.cargo/config.tomlangegeben.
cargo buildHINWEIS: Wenn Sie für benutzerdefiniertes Ziel kompilieren, können Sie das Ziel mit dem Flag
--target <target>überschreiben.
cargo build --target x86_64-fractal_os.json Um ein bootfähiges Bild zu erstellen, verwenden wir die Abhängigkeit von Bootloader. Daneben werden wir bootimage -Tool verwenden, um den Kernel und den Bootloader zu kompilieren und diese miteinander zu verknüpfen.
Stellen Sie sicher, dass Sie BootImage installiert haben.
cargo install bootimageHinweis: Um den Bootimage auszuführen und den Bootloader zu erstellen, müssen Sie die
llvm-tools-preview-Rustup-Komponente installieren lassen.
rustup component add llvm-tools-previewNachdem die Abhängigkeiten und Werkzeuge installiert wurden, können Sie Fracht -Bootimage ausführen, um ein bootfähiges Festplattenbild zu erstellen.
cargo bootimageNachdem Sie eine bootfähige Bilddatei generiert haben, können Sie Fractal auf einem Emulator wie QEMU problemlos ausführen.
qemu-system-x86_64 -drive format=raw,file=target/x86_64-fractal_os/debug/bootimage-fractal_os.binSie können es auch mit einem Frachtläufer mit Hilfe von Bootimage Runner ausführen.
cargo runDas obige zeigt auf den letzten Build des bootfähigen Bildes und startet eine Instanz von QEMU. Sie können auch ein spezifisches Ziel bereitstellen und die QEMU -Optionen durchlaufen.
cargo run --target < target > -- [QEMU options] Alles nach dem -- wird an Qemu übergeben.
Um das benutzerdefinierte Test -Framework für Fractalos auszuführen, können Sie den Cargo -Testbefehl ausführen.
cargo testDadurch werden alle Einheiten und Integrationstests durchgeführt.
HINWEIS: Die Integrationstests befinden sich im Verzeichnis
/tests, während Unit-Tests in den Beton-Implementierungsdateien/srcBeton in sich geschlossen sind.
Der Kernel verwendet die Kiste compiler_builtins zusammen mit seiner mem -Implementierung. Die Funktionen sind jedoch ziemlich unoptimiert. Derzeit gibt es eine offene PR gegen dieses Problem. Daher muss dies entweder unsere eigene Implementierung von Funktionen wie memcmp und memcpy oder Warten verwenden, bis diese PR zusammengeführt wird.
Als Software -Ingenieur mit einem Hintergrund in EEE (Electric and Electronic Engineering) finde ich immer gerne heraus, was die Dinge zum Ticken bringt, und wie kann man besser herausfinden, wie die Betriebssysteme mit der Hardware zusammenarbeiten und die Software anders ist, als Ihre eigenen zu schreiben?
Gleichzeitig lerne ich auch Rost. Ich finde es sehr angenehm.
Dies sind nur einige wichtige Wesentliche, die auf dem Weg sind, umgesetzt zu werden. Nicht in Ordnung.