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

x86 32-bits / 64-bits Assembleur Discussion :

Test d'un bootloader


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    Par défaut Test d'un bootloader
    bonjour, je ne sais pas si je suis sur le bon forum mais vue que le sujet traite un bootloader en assembleur j'ai décidé de poster le message ici.

    Alors voila, je me suis tapé pas mal de lecture sur le fonctionnement d'un bootloader, CPU, Bios.

    Je ne connait pas beaucoup l'assembleur avec NASM j'ai donc suivi un tuto pour créer un simple bootloader et de le faire démarrer au démarrage du PC.
    http://a.michelizza.free.fr/pmwiki.p...utoOS.Bootsect

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    [BITS 16]  ; indique a nasm que l'on travaille en 16 bits
    [ORG 0x0]
     
    ; initialisation des segments en 0x07C00
        mov ax, 0x07C0
        mov ds, ax
        mov es, ax
        mov ax, 0x8000
        mov ss, ax
        mov sp, 0xf000    ; stack de 0x8F000 -> 0x80000
     
    ; affiche un msg
        mov si, msgDebut
        call afficher
     
     
    end:
        jmp end
     
     
    ;--- Variables ---
        msgDebut db "Hello world !", 13, 10, 0
    ;-----------------
     
    ;---------------------------------------------------------
    ; Synopsis: Affiche une chaine de caracteres se terminant par 0x0
    ; Entree:   DS:SI -> pointe sur la chaine a afficher
    ;---------------------------------------------------------
    afficher:
        push ax
        push bx
    .debut:
        lodsb         ; ds:si -> al
        cmp al, 0     ; fin chaine ?
        jz .fin
        mov ah, 0x0E  ; appel au service 0x0e, int 0x10 du bios
        mov bx, 0x07  ; bx -> attribut, al -> caractere ascii
        int 0x10
        jmp .debut
     
    .fin:
        pop bx
        pop ax
        ret
     
    ;--- NOP jusqu'a 510 ---
        times 510-($-$$) db 144
        dw 0xAA55
    J'ai donc copié la source que j'ai enregistré en .asm et que j'ai ensuite compilé avec nasm en utilisant la commande suivante comme expliqué sur le tuto :
    nasm -f bin -o bootsect bootsect.asm

    Puis, pour tester, j'ai installé l'émulateur bochs (version installable pour windows). Voici comment je procède pour tester le bootloader :

    J'ouvre bochs, dans la fenêtre "bochs start menu" je double clique sur l'onglet "disk & boot" et je sélectionne un floppy 3.5" 1.44M et je sélectionne le bootloader préalablement compilé. Je clique sur start et j'ai l'erreur suivante :

    No bootable device.

    si une personne à une idée du problème, merci d'avance.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    C'est curieux. Ça devrait fonctionner.

    Si tu as un éditeur hexadécimal à portée de main, pourrais-tu nous montrer le contenu du fichier généré ?

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    Par défaut
    Merci pour ta réponse, voila le résultat avec un éditeur hexadécimal




    J'ai aussi testé de mettre le bootloader compilé sur clef USB pour tester directement au démarrage du PC et pareil, le bios ne boot pas sur le fichier et lance par la suite Windows.
    Images attachées Images attachées  

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Bon. J'ai fait le test sous Linux avec le même programme et cela fonctionne… à condition de bien passer tous les paramètres ! Voici un tutoriel pas à pas sur Developpez qui traite du même sujet et utilise le même émulateur : http://tothpaul.developpez.com/boot/

    Ça fonctionne à condition de passer le bon fichier, et de choisir le bon format pour la disquette ET pour le lecteur (1,44M pour tous les deux). Et bien sûr, il faut aussi cocher « inserted » pour lui dire que la disquette est bien dans le lecteur.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    Par défaut
    Merci, j'oublié de sélectionné un "type of média" sur bochs maintenant sa fonctionne.

    Par contre, j'ai inséré le bootloader dans une clef usb préalablement formaté avec une partition primaire en fat32 et en sélectionnant la clef USB au bios le fichier ne boot pas donc windows prend le relais.

    tu as une idée d'ou viens le problème ? Merci.

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Citation Envoyé par Guyome41 Voir le message
    Par contre, j'ai inséré le bootloader dans une clef usb préalablement formaté avec une partition primaire en fat32 et en sélectionnant la clef USB au bios le fichier ne boot pas donc windows prend le relais.

    tu as une idée d'ou viens le problème ? Merci.
    Tu l'as inséré comment ? Tu as bien mis le contenu du fichier sur le MBR de ta clé ou tu l'as déposé comme un simple fichier sur la partition en FAT32 ?

    Dans le premier cas, les options de ton BIOS sont elles correctes ? (est-il configuré pour démarrer sur une clé ?)

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 117
    Points : 72
    Points
    72
    Par défaut
    Nan je l'ai déposé comme un simple fichier. Comment fait t'on pour le mettre dans le MBR ?

    Sinon niveau bios j'ai pas de souci avec des clefs usb linux.

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Citation Envoyé par Guyome41 Voir le message
    Nan je l'ai déposé comme un simple fichier.
    Si tu as fait cela, ça veut dire que tu n'as pas compris comment fonctionne un bootloader, ni à quoi il sert. Sais-tu bien comment fonctionne une disquette, un disque dur et un système de fichiers globalement ?

    Comment fait t'on pour le mettre dans le MBR ?
    Sous Windows, tu auras besoin d'un utilitaire pour le faire. Sous Linux (surtout si tu disposes déjà de clés démarrant un système en live), tu peux le faire en une ligne de shell très simple (« cat tonfichier vers tondisque ») mais à condition d'être prudent car, si tu te trompes, tu peux effacer tes données.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Script test de deux chaine avec if
    Par kacedda dans le forum Linux
    Réponses: 6
    Dernier message: 02/05/2003, 15h38
  2. [XMLRAD] test de nullité
    Par Pm dans le forum XMLRAD
    Réponses: 5
    Dernier message: 29/11/2002, 10h57
  3. test collisions
    Par tatakinawa dans le forum OpenGL
    Réponses: 5
    Dernier message: 08/06/2002, 06h03

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