Un minuscule système d'exploitation PC x86 PC basé sur un noyau monolithique avec des fonctionnalités de type Unix, écrits dans un sous-ensemble de C ++.
Veuillez noter: cette méta-documentation est toujours un travail en cours :-)
Un minuscule système d'exploitation de bureau, avec des fonctionnalités de type Unix, qui est écrit dans un sous-ensemble C ++ compréhensible pour les étudiants de première année TI à Hogeschool Utrecht, de sorte qu'il pourrait être utilisé dans un contexte éducatif.
Dans la mesure du possible, les performances et les caractéristiques sont sacrifiées pour réduire la complexité et augmenter la lisibilité. Cela devrait aider le logiciel à être plus compréhensible pour une utilisation dans un contexte éducatif. Néanmoins, les sujets importants des cours d'oscroges à l'utrecht Hogeschool doivent être mis en œuvre.
Bien qu'il devrait bien démarrer sur le matériel réel, Rikaios est développé avec un émulateur ou une machine virtuelle à l'esprit - le matériel pris en charge est intentionnellement limité pour la simplicité.
Un avertissement obligatoire: le système d'exploitation peut faire fondre votre carte mère et manger votre souris pour animaux de compagnie lorsqu'il est exécuté sur du matériel réel, pas de garantie, yada yada, veuillez lire l'avertissement dans le fichier de licence avant de l'exécuter sur votre ordinateur familial.
Voir le répertoire ./AUX. Ne vous attendez pas à quoi que ce soit flashy - c'est actuellement toutes les captures de terminal série!
Le système d'exploitation avec son ensemble de fonctionnalités actuel a été développé dans une période d'environ 6 mois de février à juillet 2019.
Rikaios n'est pas encore un substitut Linux complet ;-)
Il existe certaines fonctionnalités qui ont besoin de travail ou qui sont actuellement travaillées (voir également la section contributive):
grep -ERn 'TODO|FIXME|XXX' src/kernel/src src/kernel/include src/user/Notez que l'objectif de Rikaios est de rester petit: une pile de réseau ou un pilote USB par exemple ne sera probablement pas considéré pour la mise en œuvre.
Vous avez besoin que ce logiciel soit installé (sur un hôte Linux-ish) pour construire et exécuter Rikaios:
Les numéros de version doivent être récents, en particulier pour Clang, LLVM et LLD. Un Dockerfile Arch Linux est fourni (grâce à @peikos) qui comprend des versions compatibles des dépendances ci-dessus.
Vous pouvez utiliser GCC au lieu de Clang / LLVM si vous le souhaitez, à condition que vous ayez un Cross-Toolchain GCC pour i686-elf. Voir src/kernel/Makefile pour plus de détails sur la façon de changer de chaîne d'outils.
| Annuaire | Description |
|---|---|
/src/boot | Bootloader (Bootsctor et Stage2) |
/src/boot/utils | Installateur de chargeur de démarrage |
/src/kernel | Code du noyau |
/src/kernel/include | En-têtes de noyau exposés à l'utilisateur |
/src/kernel/include/os-std | Bibliothèque standard du système d'exploitation (mathématiques, conteneurs, etc.) |
/src/user | Logiciel Userland |
/src/user/libsys | Bibliothèque du système Userland C ++ |
/src/disk | (FAT32) Système de fichiers disponible pour le système d'exploitation |
| Makefile | Description |
/src/Makefile | Construit tout, crée des disques de démarrage et exécute des émulateurs |
/src/boot/Makefile | Construire un chargeur de démarrage et un installateur |
/src/kernel/Makefile | Construit le noyau |
/src/user/Makefile | Construit l'utilisateur |
Chaque makefile ci-dessus comprend (si disponible) un fichier Makefile.local dans le même répertoire. Cela vous permet de remplacer tous les noms et chemins exécutables de chaîne d'outils et d'ajouter éventuellement des cibles supplémentaires.
N'oubliez pas de passer -j 4 (ou plus) à faire pour augmenter les performances de construction sur les systèmes multicore.
Cela construit le noyau et le chargeur de démarrage et crée un disque de démarrage qui est exécuté avec le virtualiseur / émulateur Qemu. Une connexion série au système d'exploitation est ouverte dans le terminal à partir duquel vous exécutez la commande de fabrication.
faire du disque et faire fonctionner
Actuellement, le Shell OS et le pilote TTY n'ont pas de capacités de mise en ligne de ligne sophistiquées et de support historique de ligne de commande. Pour plus de commodité, vous pouvez envelopper Qemu avec rlwrap pour utiliser les installations d'édition de ligne du côté hôte des choses (fortement recommandée):
faire un disque && rlwrap -a faire fonctionner
Pour s'exécuter dans VirtualBox, procédez comme suit:
vdi :faire vdi
Alors:
disk.vdi en tant que disque IDEVous devriez maintenant pouvoir démarrer la machine virtuelle via VirtualBox.
Notez que les E / S en série peuvent être difficiles à travailler. La version OS actuelle n'interagit pas beaucoup avec l'écran et le clavier / souris par défaut.
Une fois que vous avez le système en cours d'exécution, vous devriez voir une invite dans le terminal série (si vous avez connecté un moniteur, un écran d'éclaboussure peut également apparaître). Vous pouvez interagir avec le système d'exploitation à l'aide du terminal série. Pour commencer, essayez la commande help .
Un certain nombre de programmes utilitaires sont fournis sur le disque. Affichez les programmes installés en tapant ls bin (en supposant que vous êtes toujours dans le répertoire /disk0p1 ). Tous les programmes ELF dans /disk0p1/bin peuvent être exécutés sous forme de commandes sans taper le chemin complet (pensez-y comme un répertoire $PATH implicite). De même, tous les fichiers ELF dans le répertoire de travail, comme forth.elf , peuvent être exécutés simplement en tapant leur nom.
Pour voir comment les utilitaires fonctionnent ou pour ajouter le vôtre, consultez le fichier ReadMe dans le répertoire src/user de ce référentiel.
En appuyant sur ESC sur le clavier (dans la fenêtre vidéo, et non sur le terminal série) permettra au shell du noyau, un utilitaire de débogage intégré. Cela peut être utilisé pour imprimer diverses statistiques et informations sur les processus en cours d'exécution et la mémoire (voir la commande help à Kshell).
Vous pouvez déboguer le noyau avec Qemu ou Bochs:
Voir ./src/gdbrc pour les options de démarrage (vous pouvez remplacer ce chemin de fichier dans un Makefile.local ).
faire un disque et faire du débogage
Voir ./src/bochsrc pour les options de configuration (vous pouvez remplacer ce chemin de fichier dans un Makefile.local ).
faire du disque et faire des bochs
ld.lld: erreur: Impossible de trouver la bibliothèque -lclang_rt.builtins-i386
locate clang_rt.builtins )kernel/Makefile.local , avec contenu: LD_BUILTIN_DIR += /the/directory/containing/the/clang/lib Je comprends que la documentation accessible au public est actuellement limitée, alors n'hésitez pas à ouvrir un problème ou à m'envoyer un e-mail.
Veuillez ouvrir un problème GitHub / Gitlab afin que nous puissions nous assurer qu'aucun effort n'est dupliqué :-)
Un processus pour cela devrait être officialisé dans les semaines à venir - il y a des problèmes / fonctionnalités ouverts sur qui peut certainement être travaillé, avec divers degrés de difficulté / taille. Je vais documenter ceci bientôt ™.
Ce projet est concédé sous licence Apache 2.0. Veuillez consulter ./LIMENSE pour plus d'informations.
Ce système d'exploitation a été écrit à partir de zéro, avec seulement l'exception suivante: