Créer un OS

Fermé
neo - 12 avril 2011 à 18:36
 neo - 13 avril 2011 à 20:16
Bonjour,


J'ai créée avec quelques amis une "base" d'OS : celui-ci prends en charge une interface rudimentaire et fonctionne tel le Terminal sous Linux ! Cependant, je souhaiterais connaitre la démarche pour créer une image bootable de ce dernier. Je précise que ce dernier est en language C...

<Linux Debian Squeeze>

4 réponses

Bonjour à toi,

Je n'ai pas très bien compris ce que tu veux faire mais je te préviens, il faut de bonnes connaissances en informatique bas niveau pour faire ce qui suit. Je peux déjà te dire que tu ne perviendra certainement jamais au bout de ta "base d'OS". Pour te donner une idée, le noyau de Linux dépasse les 6 millions de lignes de code (juste le kernel et sans les commentaires, les lignes vides...). Même avec un groupe d'amis, ce ne sera jamais fini. Mais il peut y avoir d'autres intérets à essayer.

Pour créer ton secteur de boot, je te conseille d'utiliser un émulateur (simulateur) car si tu fais une faute, ton PC sera innaccessible. Sauf si tu fais ça sur un autre disque que celui qui supporte ton système actuel (bouh Linux :).

Tu aurais pu prendre VirtualPC si tu avais Windows. Mais il en existe deux autres qui sont un peu vieux mais bon. Tu as le choix entre :
- Bochs : http://bochs.sourceforge.net/
- Qemu : http://wiki.qemu.org/Main_Page
Il en existe sûrement d'autre mais je ne connais pas.

Pour le début je te conseille de créer une disquette (virtuelle) de boot (3.5 pouces 1440Ko). Ensuite lorsque tout sera finalisé, tu pourra passé à un véritable MBR.

Je n'ai pas bien compris exactement où tu en es mais tu parles d'un code en C. Au cas où tu n'aurais pas encore codé les secteurs d'amorçage ou disquette de boot, je te rappelle qu'ils doivent être codés en ASM avec le jeu d'instructions compatible de ton processeur.
1er cas
Ensuite, c'est le secteur d'amorçage qui lance le noyau (kernel) que j'imagine tu n'as pas codé toi même. Puis le shell, les pilotes... Tu dois aussi créé ton propre système de fichier s'il n'est pas inclus dans le noyau. Ensuite, tu pourra lancé ton joli programme codé en C depuis ton nouvel OS.
2ème cas
Si tu ne veux pas créer tout l'OS, tu peux simplement écrire les secteurs d'ammorçage et copier le fichier "programme.obj" sur ton disque dur sans formatage. Ton secteur d'ammorçage devra bien sur pointer sur le point d'entrée de ton programme. Note: Je ne sais pas trop comment agencer ça dans le cas ou ton projet contient plusieurs sources (plusieurs fichiers ".obj") mais je suppose que c'est pareil.
Cette dernière solution échoura peut-être si :
- Ton programme fait appel à une bibliothèque standard.
- Il fait appel à une bibliothèque dynamique.
- Il fait appel à une fonction système.
- Il fait appel à une bibliothèque statique.
- Je n'exclue pas d'autres causes.
Peut-être que certains des points ci-dessus peuvent se solutionner, mais ça dépend des cas.
Il y peut-être des options de compilation spécifiques pour que le fichier ".obj" puisse être utilisé directement. A confirmer.

Voilà, bonne chance.
0
Je précise que j'ai créer les bases de mon OS, notamment le kernel ! Il me manque juste de créer les fichiers relatifs au lancement et à l'arrêt su système (power et poweroff sous Linux), ainsi que le secteur de boot. Je précise que cet OS est 100% en C, du moins pour le kernel ; l'interface sera rudimentaire, tel un Terminal, mais en aucun cas une interface graphique poussée : j'ai envie de programmer, mais pas que ce projet me casse les pieds :-)
J'ai créé mes librairies dynamiques et elles sont agencées ; mes gros problèmes, sont : le boot, le "power" et "poweroff", car je ne sais pas du tout comment les faire...

Merci d'avance pour vos réponses :-)

PS: ce projet est avant tout à but éducatif ; je le réalise avec d'autres étudiants afin de partager ma passion de l'info, et souhaite (oh là là, ca vas être dur :-)) créer ce petit OS pour faire comprendre comment marche un système d'exploitation !
0
Je n'ai pas très bien compris comment vous avez codé le kernel. Est-ce un executable?
Je pense qu'il doit contenir une partie en ASM pour que le secteur de boot y accède facilement. Ensuite il faut gérer les interruptions systèmes. Pour ton problème démarrage, de mise en veille et d'arret, cherche dans les intéruptions du BIOS (dsl, mais c'est pas du C, c'est de l'assembleur, l'étage au dessous du C et passage obligé:-) (int 19h pour redemarrer, pour les autres, je ne sais pas.)
0
Bonjour,

Je n'avais pas compris que tu avais créé le kernel.

Si ton kernel fait appel à des bibliothèque dynamique, il échoura puisque c'est lui qui s'occupe, entre autres, de charger les DLL. Il faut donc que tu trouve un autre format pour ton édition des liens : les fichiers *.sys si ton compilateur te propose cette option.

Pour écrire les secteurs de lancement, ça va dépendre du support que tu choisira, je te conseille une disquette. Tu dois impérativement les coder en ASM.

Ce que j'ai dis tiens toujours, utilise Bochs ou Qemu pour simuler.

Moi aussi je suis étudiant, et j'avais trouvé un site assez complet, une fois qu'on a réussi à faire marcher le truc (je me souviens que c'était galère): http://a.michelizza.free.fr/pmwiki.php?n=TutoOS.TutoOS

Tu l'aura donc compris, il faut créé une image de disquette avec ton code ASM généré. Dans le simulateur tu choisis ton image comme support de lancement.
0
OK je te remercie ! Ton aide ma été plus précieuse que celle de mon enseignante, qui soit dit en passant, n'est pas très experte (LOL un comble pour un prof d'info)... Eh ben je sens que j'ai pas finis le boulot...

PS: Je croyait que tout ce qui touchait au boot était en C... j'avais tord !

MRC de ta rep et du site web, impec ;-)
0
lol, je suis en 2ème année d'ingé, je latte ta prof. Elle est vraiment nulle. Si t'as besoin d'aide n'hésite pas. J'ai déjà fait (mais pas fini), mais à la fin, c'est moche, jte préviens.
0
Je suis en école de physique... Pas trop la branche me diras-tu ! Mais l'amour (du C !? O_o) donne des ailes, comme on dit, hein :-)
Enfin, je lui en veux pas trop... c'est pas une "vrai" prof : elle comprenait pas pourquoi lorsqu'elle mettait deux scanf("%c",&...) à la suite, ça merdouillait sur le deuxième ! LOL cocotte, vide ton buffer ! :-)
0