Un système d'exploitation écrit en rouille.
Pour construire le système d'exploitation, assurez-vous d'utiliser la construction de rouille nightly . Cela est nécessaire en raison de l'utilisation de certains drapeaux et propriétés instables qui ne sont disponibles que dans la construction nightly .
Remarque: La cible a été spécifiée dans
.cargo/config.toml.
cargo buildRemarque: Si la compilation pour la personnalité a une cible, vous pouvez remplacer la cible à l'aide de l'indicateur
--target <target>.
cargo build --target x86_64-fractal_os.json Pour créer une image de démarrage, nous utilisons la dépendance du chargeur de démarrage. Parallèlement, nous utiliserons l'outil bootimage pour compiler le noyau et le chargeur de démarrage et les lierons ensemble.
Assurez-vous que BootImage est installé.
cargo install bootimageRemarque: Pour exécuter BootImage et construire le chargeur de démarrage, vous devez installer le composant rustup
llvm-tools-preview.
rustup component add llvm-tools-previewUne fois les dépendances et les outils installés, vous pouvez exécuter Cargo BootImage pour créer une image de disque de démarrage.
cargo bootimageAprès avoir généré un fichier d'image de démarrage, vous pouvez facilement exécuter Fractal sur un émulateur tel que Qemu.
qemu-system-x86_64 -drive format=raw,file=target/x86_64-fractal_os/debug/bootimage-fractal_os.binVous pouvez également l'exécuter avec un Runner Cargo à l'aide de BootImage Runner.
cargo runCe qui précède pointera vers la dernière version de l'image bootable et démarrera une instance de Qemu. Vous pouvez également fournir une cible spécifique et passer par des options QEMU.
cargo run --target < target > -- [QEMU options] Tout après le -- sera transmis à Qemu.
Pour exécuter le cadre de test personnalisé pour Fractalos, vous pouvez exécuter la commande de test de cargaison.
cargo testCela exécutera tous les tests d'unité et d'intégration.
Remarque: Les tests d'intégration sont situés sous
/testsDirectory, tandis que les tests unitaires sont autonomes dans les fichiers d'implémentation concrète/src.
Le noyau utilise la caisse compiler_builtins avec son implémentation mem . Les fonctions sont cependant assez non optimisées. Il y a actuellement un RP ouvert par rapport à ce problème, donc cela doit utiliser notre propre implémentation de fonctions telles que memcmp et memcpy ou attendre que ce PR soit fusionné.
En tant qu'ingénieur logiciel avec une arrière-plan en EEE (génie électrique et électronique), j'aime toujours savoir ce qui fait que les choses cochent et quelle meilleure façon de savoir comment les systèmes d'exploitation fonctionnent avec tout le matériel, et le logiciel est autre que d'écrire le vôtre?
En même temps d'explorer ce qui fait tous les éléments d'un système d'exploitation propre, j'apprends également la rouille. Je le trouve très agréable.
Ce ne sont que des éléments essentiels qui sont sur le point d'être mis en œuvre. Pas dans l'ordre.