Mon premier système d'exploitation alimenté par la caféine.
Ceci est un projet d'apprentissage, nous verrons jusqu'où cela va. Quand je dis "alimenté par la caféine", je veux littéralement dire de la caféine, pas un nouveau cadre de construction de système d'exploitation. Mais ce serait un nom assez cool pour un cadre de construction du système d'exploitation.
J'exécute ce projet dans Ubuntu18.04 LTS. J'utilise une version distante à l'aide de Visual Studio sur PC, mais vous pouvez simplement utiliser le makefile directement sur une machine Ubuntu. Mon système d'exploitation fonctionne actuellement dans une machine virtuelle à Ubuntu. Je ne recommanderais pas l'exécution de ce "sur métal" car les erreurs peuvent brique l'ordinateur par Permintaly modifiant les bios et les données ROM. Voici les packages que j'ai installés afin de faire fonctionner ce projet:
Le MakeFile produira un fichier ISO dans le même emplacement avec le même nom à chaque fois qu'il est exécuté. Dans VirtualBox, j'ai fait une machine virtuelle nommée Caffeineos avec 512 Mo de RAM, pas de VDK / VMDK et avec le support optique pointant sur le fichier ISO et la case "Live CD" coché.
Même si le fichier ISO changera avec chaque version, la machine virtuelle ira toujours au même emplacement pour trouver l'ISO et le démarrer à partir de celui-ci.
En ce moment, j'ai un kernal bootable. Il ne fait que l'imprimer le nom du système d'exploitation. Jusqu'à présent, j'ai suivi les totaux, mais très peu couvrent quoi que ce soit au-delà de ce point. Aucun que j'ai trouvé, utilisez C ++, seulement C.
Je recherche quelle est la prochaine partie du noyau que je devrais construire ensuite. Je suppose que c'est une mémoire dynamique. Actuellement, je réalise la sortie en utilisant une adresse VGA pour écrire du texte à l'écran. Je n'ai pas encore compris l'entrée. Comme je l'ai dit, les tutoriels ne dépassent pas vraiment le système d'exploitation "Hello World" bootable.
J'ai détecté le RAM et obtenu des valeurs qui font du sence (faible mem ~ = 640kb, bas + hi ~ = 512 Mo), donc je suis vraiment heureux. J'ai également pu obtenir une chaîne du chargeur de démarrage en jetant un uint32_t dans un const char * et en imprimant le tableau sur le pointeur. J'utilise la spécification multiboot.h du site gnu.org. Le fichier multiboot.h contient des déclarations Emmpty Struct et Typedef qui correspondent aux blocs de l'info que le chargeur de démarrage (GRUB2.02) envoie via le multiboot_info_t *. En connaissant les blocs, je peux lancer les pointeurs dans les données dont j'ai besoin du chargeur de démarrage.