La big picture !
Créer un noyau n’est pas une mince affaire, on ne sait donc pas trop comment s’y prendre au début ! Je vous rassure, plus tard on ne sait toujours pas, …
L’idée de cette section est alors de proposer une vision un peu générale, en survolant les principaux éléments, mais sans rentrer dans le détail d’aucun d’entre eux.
Au commencement, il y a le matériel
Lorsqu’on envisage de réaliser un système d’exploitation, c’est que l’on souhaite exploiter un système, non ? Donc la première chose dont on a besoin, c’est d’une bonne connaissance de ce système cible.
La première (et pour le moment unique) cible de ManuX, c’est un PC à base de microprocesseur Intel i386. Je ne rentrerai pas dans la description de ce système physique, largement documenté de nos jours, et je suppose que vous avez donc une assez bonne connaissance de
-
son architecture générale ;
-
le fonctionnement de son micro processeur ;
-
sa gestion de la mémoire, des entrées-sorties, des périphériques, …
Nous reparlerons un peu de chacun de ces éléments en temps utiles.
Grâce à cette connaissance, nous sommes capables d’écrire du code qui permette d’exploiter notre système cible.
Ça pourrait glisser, on met les chaînes
Un système d’exploitation, c’est du logiciel. Vous allez me dire que “Real progammers use cat > a.out” je suppose, mais cette fois je vous propose qu’on se la joue un peu plus confort !
Nous allons donc faire le choix d’utiliser un langage de programmation de haut niveau pour écrire ce logiciel, et je vous propose (impose ?) le langage C. Comme tout ne peut pas être écrit en C, il nous faudra également utiliser de l’assembleur.
Il nous faut donc un compilateur C, un assembleur, et un éditeur de liens. Si nous avons peur de devoir déboguer notre code, il nous faudra également des outils pour ça.
En ce qui concerne ManuX, une chaîne de compilation C fondée sur gcc (ou clang) plus un assembleur comme nasm feront très bien l’affaire. Nous décrirons cela dans la section dédiée aux outils.
Grâce à ces outils, nous voilà équipés pour compiler le code que nous venons d’écrire afin qu’il puisse être exécuté sur notre système cible.
Chargez !
Nous voila bien partis, … nous avons un système matériel et nous avons écrit du code (un noyau, aussi minimaliste soit-il), que nous avons compilé de sorte à l’exécuter sur le système.
Mais pour cela, il faut “charger le noyau”, c’est-à-dire faire en sorte qu’il se trouve quelque part (a priori dans la mémoire vive du système) pour que le microprocesseur l’exécute.
Ce travail, peu gratifiant et assez technique, est très dépendant de notre cible matérielle.
En ce qui concerne ManuX, nous utiliserons deux ou trois méthodes classiques sur un (vieux) PC. Nous décrirons cela plus précisément dans la section Chargement en mémoire et boot.
Grâce à cette nouvelle étape, youpi, nous allons enfin pouvoir exécuter notre noyau sur le système cible !
Hello word !
Maintenant