Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation d'OS Assembleur Discussion :

Compilation du noyau en C et du bootloader.


Sujet :

Programmation d'OS Assembleur

  1. #1
    Nouveau Candidat au Club
    Compilation du noyau en C et du bootloader.
    Bonjour,
    Je suis actuellement le cours de Michelizza sur le développement d'OS.
    Jusque là j'ai un peu de mal avec la mémoire qui n'est, je trouve, que vaguement abordée. (On donne du code et il n'est malheureusement que très peu expliqué)
    Je ne comprend déjà pas vraiment les schémas sur la mémoire mais ce n'est pas vraiment le problème.
    Une fois que le noyau à été entièrement écrit en C j'arrive à 'linker' (si c'est le bon mot) les fichiers objets avec
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    gcc -c kernel.c
    gcc -c screen.c
    ld --oformat binary -Ttext 1000 kernel.o screen.o -o kernel.bin

    Mais le fichier qui est générer est bien trop grand (4M) alors que les fichiers objet ne dépassent pas les 3K.
    J'utilise la commande suivante pour créer l'image disque.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    cat *.bin /dev/zero | dd of=floppy.img bs=512 count=2880

    Voici mon problème, je lance le fichier img avec VirtualBox mais seulement le bootloader s'exécute, la suite du programme (chargement du noyau) plante.
    Si vous voulez vérifier le code je l'ai posté sur mon github. (ce n'est qu'une copie presque identique aux codes du cours original)
    Je rajouterai également que je suis ce cours pour en apprendre plus sur le fonctionnement d'un ordinateur.
    Merci d'avance.

  2. #2
    Nouveau Candidat au Club
    Pour préciser ma demande, le fichier image ne pouvant dépasser la taille de 2.8MB je doute que mon noyau qui fait 4MB une fois linker puisse être contenue dans le fichier image.
    Comment puis-je donc remédier à cela ?
    Merci.

  3. #3
    Membre confirmé
    j'ai parcourus le programme du bootloader et il n'y as rien qui semble clocher. par contre la limite de ton fichier c'est pas 2.88Mo mais 1.44Mo-512o (une disquette moins le bootsecteur) et en plus le bootloader ne charge que 50 secteurs soit 25600 octets
    par contre je suis pas un spécialiste du C donc je comprend pas ce qui ne vas pas dans le noyau

  4. #4
    Nouveau Candidat au Club
    Citation Envoyé par bifur Voir le message
    j'ai parcourus le programme du bootloader et il n'y as rien qui semble clocher. par contre la limite de ton fichier c'est pas 2.88Mo mais 1.44Mo-512o (une disquette moins le bootsecteur) et en plus le bootloader ne charge que 50 secteurs soit 25600 octets
    par contre je suis pas un spécialiste du C donc je comprend pas ce qui ne vas pas dans le noyau
    Merci.
    En fait, la seul chose qui semble clocher c'est que le code binaire produit par le compilateur C est de 4M, ce qui ne rentre bien évidemment pas dans une disquette. Je me demande donc comment je peut générer une image iso qui serait démarrable avec VirtualBox. J'ai beau essayé avec la commande dd mais comme l'auteur n'explique pas comment faire je suis coincé.

    Je me demande d'ailleurs pourquoi utiliser des fichiers image qui sont limité ? Pour être compatible avec bochs et qemu ?

  5. #5
    Responsable Systèmes

    Que donne la commande :
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutor...s/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Nouveau Candidat au Club
    Citation Envoyé par chrtophe Voir le message
    Que donne la commande :
    J'obtiens ceci:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    	n'est pas un exécutable dynamique