IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Créer un boot loader


Sujet :

Programmation d'OS Assembleur

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Points : 48
    Points
    48
    Par défaut Créer un boot loader
    Bonjour,

    J'essaie actuellement de créer un bootloader dans l'objectif d'appronfondir mes connaissances systèmes en développant un petit kernel sans aucune prétention particulière.

    Après avoir lu pas mal de docs, je suis tombé sur un tuto sur osdever.net qui devrait me permettre d'écrire un caractère sur la sortie standard. Le code compile mais le problème vient lorsque j'essaie de tester le binaire. La plupart des sites montrent des tests basés sur des disquettes mais je ne peux pas faire cela, car je n'ai pas de lecteur disquette ... J'aimerai donc tester mon bootloader à partir d'une image ISO que je créerai.

    Pour commencer, voici le code simpliste du bootloader :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    malves@bonobo ~/Work/OsDev/MyKernel/BootStrap $ cat BootStrap.S
    [BITS 16]
    [ORG 0x7C00]
    main:
            mov ah,0x0E
            mov bh,0x00
            mov bl,0x07
            mov al,65
            int 0x10
            jmp $
            times 510-($-$$) db 0
            dw 0xAA55
    Ma ligne de compilo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    malves@bonobo ~/Work/OsDev/MyKernel/BootStrap $ make
    nasm -f bin -o BootStrap.bin BootStrap.S
    mkisofs -R -b BootStrap.bin -no-emul-boot -boot-load-size 4 -boot-info-table -o BootStrap.iso BootStrap.bin
    I: -input-charset not specified, using utf-8 (detected in locale settings)
    Size of boot image is 4 sectors -> No emulation
    Total translation table size: 2048
    Total rockridge attributes bytes: 338
    Total directory bytes: 0
    Path table size(bytes): 10
    Max brk space used 0
    178 extents written (0 MB)
    Je teste l'ISO à l'aide de qemu en tapant: qemu -cdrom BootStrap.iso et avec VMWare en configurant son lecteur CD-ROM sur mon ISO mais rien n'y fait : Les sorties m'affichent un message du genre: "Booting from CD-Rom..." et puis plus rien ne se passe.

    Quelqu'un aurait-il une solution à me proposer ?
    Merci de votre aide

  2. #2
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Salut

    J'ai jamais essayé mais je pense que le boot sur cdrom n'est pas aussi simple que sur une disquette ... Faudrait chercher de la doc là dessus, mais il est probablement plus simple de faire une image de disquette et de booter dessus avec qemu

    Dans tous les cas, l'option -no-emul-boot me parait justement pas une bonne idée d'après la page de man...

    Bon courrage

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Points : 48
    Points
    48
    Par défaut
    Merci pour ta réponse Smortex.

    Je ne comprend pas très bien ce que tu veux dire par créer une image de la disquette. L'iso que je produis est, il me semble, une image au sens large, que se soit une disquette, une partition, etc ... c'est la meme chose non ?

    En ce qui concerne l'option -no-emul-boot, je suis d'accord avec toi, celle-ci me parait bizarre puisque le man spécifie "The system will load and execute this image without performing any disk emulation" et ce n'est pas ce que l'on veut. Mais j'ai ajouté cette option après avoir lus le Makefile d'un OS libre et si je l'enlève j'obtiens lors de la création de l'iso l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    malves@bonobo ~/Work/OsDev/MyKernel/BootStrap $ du -sh BootStrap.bin 
    4,0K    BootStrap.bin
    malves@bonobo ~/Work/OsDev/MyKernel/BootStrap $ make
    nasm -o BootStrap.bin BootStrap.S
    mkisofs -R -b BootStrap.bin -boot-load-size 4 -boot-info-table -o BootStrap.iso BootStrap.bin
    I: -input-charset not specified, using utf-8 (detected in locale settings)
    Size of boot image is 4 sectors -> genisoimage: Error - boot image 'BootStrap.bin' has not an allowable size.

    Je vais poursuivre mes recherches, si entre temps quelqu'un peut me dépanner je lui en serrai reconnaissant

  4. #4
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Hum... tu n'as pas d'argument -c non plus et man dit:
    This option is required to make a bootable CD.
    Peut être une piste: ce site propose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mkisofs -r -T -l -J -v -V BOOTCD -b boot/BOOT.IMG -c boot/boot.catalog -o bootcd.iso cd

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 225
    Points : 113
    Points
    113
    Par défaut
    Un secteur de CDROM contient tout d'abord 2352 octets pas 512 alors fait attention à "times" et essaie d'écrire ton secteur au 17éme secteur ( le MBR , enfin si je ne me trompe pas ) .
    Forum Programmation d'OS - Tutoriel pour créer un petit noyau 32 bits .

    ( le développement de littlefoot86 est abandonné ... )

Discussions similaires

  1. Boot Loader Vista
    Par mulot49 dans le forum Installation
    Réponses: 3
    Dernier message: 12/06/2007, 01h21
  2. [Problème] "choix" du boot loader.
    Par granquet dans le forum Ordinateurs
    Réponses: 2
    Dernier message: 07/08/2006, 13h09
  3. installer un boot loader windows xp
    Par wtfu dans le forum Windows XP
    Réponses: 2
    Dernier message: 27/06/2006, 18h44
  4. Install boot loader sans passer par celui de Windows
    Par DeadiS dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 07/02/2006, 08h36
  5. Réinstaller le boot loader après réinstall de Windows
    Par roger12 dans le forum Administration système
    Réponses: 1
    Dernier message: 28/10/2005, 11h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo