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 :

Bootloader sur clé USB


Sujet :

Programmation d'OS Assembleur

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 85
    Points : 68
    Points
    68
    Par défaut Bootloader sur clé USB
    Bonjour,

    J'essaye actuellement de dévelloper un programme en assembleur qui affiche un message "chargement du kernel" puis fais un jump en mémoire vers l'adresse ou est chargé le kernel qui affiche "kernel is speaking". Mon problème est que j'utilise une cle usb pour booter et apparement le kernel n'est pas charger en mémoire. J'ai lu que l'interruption 0x13 ne gére que les disque dur et disquette. Je n'ai pas trouvé d'information précise sur le sujet. Si quelqu'un pouvait m'indiquer si l' interruption 0x13 gére les clé usb et si elle ne les gère pas quel interruption le fait (mon bios gère le boot par clé usb). Voici le code de mon secteur de boot :
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    %define BASE   0x100  
    %define KSIZE  1  ; nombre de secteurs de 512 octets a charger
     
    [BITS 16]
    [ORG 0x0]
     
        mov [bootdrv], dl  ; recuparation de l'unite de boot
     
    ; initialisation des segments en 0x07C0
        mov ax, 0x07C0
        mov ds, ax
        mov es, ax
        mov ax, 0x8000  ; stack en 0xFFFF
        mov ss, ax
        mov sp, 0xf000
     
    ; affiche un msg
        mov si, msgDebut
        call afficher
     
    ; charger le noyau
        xor ax, ax
        int 0x13
     
        push es
        mov ax, BASE
        mov es, ax
        mov bx, 0
     
        mov ah, 2
        mov al, KSIZE
        mov ch, 0
        mov cl, 2
        mov dh, 0
        mov dl, [bootdrv]
        int 0x13
        pop es
     
     
     
    ; saut vers le kernel
        jmp dword BASE:0
     
     
    msgDebut: db "Chargement du kernel", 13, 10, 0
     
    bootdrv: db 0
     
    ; fonction
     
    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
    Pour info les commandes que j'utilise pour charger les programmes sur la cle usb :

    dd if=/home/user/boosect of=/dev/sdb count=1 (pour le secteur boot)
    dd if=/home/user/kernel of=/dev/sdb count=1 seek=1 (pour le kernel)

    Merci

  2. #2
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Hello,

    La majorité des BIOS modernes identifient une clef USB comme étant un
    disque-dur.

    J'ai moi-même une clef USB de 2Go bootable sous DOS qui me sert aussi à
    stocker différents fichiers sous différents OS (XP,Linux et DOS)

    Pour la rendre bootable, la solution que j'ai utilisé a été la suivante
    - formater la clef USB en FAT16 (par défaut si elle fait pas plus de 2Go)
    - trouver un PC qui a encore un lecteur de disquette
    - insérer la clef USB
    - démarrer une disquette bootable DOS
    - la clef USB est reconnue comme un disque-dur (dans mon cas c'était D
    - faire un "FORMAT D:/U/S" (ou tout autre nom de lecteur attribué à la clef)
    - ajouter tous les fichier utiles pour le DOS (en particulier la gestion clavier)

    voila,pour moi c'est la solution la plus simple car Win$ gère la clef USB...
    comme une clef USB et du coup, impossible de la rendre bootable

    Maintenant il existe surement des logiciels (RAWRITE ?) qui permettent de faire ça sans passer par bootage sur un lecteur de disquette

    a+ François

  3. #3
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 85
    Points : 68
    Points
    68
    Par défaut Re : Bootloader sur cle usb
    Bonjour,

    Merci pour la réponse mais je ne souhaite pas booter sur ma cle USB par l'intermédiaire d'une disquette. Je réexplique mon problème plus clairement. Mon bios charge bien en mémoire (0x07C0) le premier secteur de la clé usb. Ceci est géré par le BIOS mais le problème survient survient lorsque j'essaye de charger le deuxieme secteur de ma clé USB (le kernel) en mémoire avec l'interruption du 0x13 du BIOS. Apparement le kernel n'est pas chargé en mémoire. Ce que je voudrais savoir c'est si le problème vient de mon code ou si cela vient du fait que l'interruption 0x13 ne gére pas les clé usb. Et si int 0x13 ne gère pas les clé usb quel interruption le fait.
    Merci

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Salut,

    C'est un peu une réponse en coup de vent, je n'ai pas vraiment regardé ton code, sauf qu'il y avait bien le mot magique 0xaa55 à la fin, mais comment est ce que ton ordi régait quand tu le démarre ? Il démarre un autre OS ou bien ne fait rien ? Tu es sûr que ce n'est pas ton code qui a un problème, t'as essayé dans un émulateur ? Vérifie aussi dans ton BIOS que ton disque dur ne soit pas avant ta clé dans les priorités de démarrage. Parce que normalement, comme l'a dit Forthman, les clés usb sont gérées comme des disques durs par le BIOS (sauf si tu travailles sur un ancêtre ;-) ).

  5. #5
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 85
    Points : 68
    Points
    68
    Par défaut
    Salut,

    Lorsque je boot sur ma cle le message "Chargement du kernel" s'affiche mais après rien le message "kernel is speaking" ne s'affiche pas (message qui ne se trouve pas dans le MBR mais dans le kernel que j'essaye de charger dans le MBR avec l'interruption 0x13). Donc le boot se passe bien mais apparement mon deuxième secteur de la clé qui contient le kernel n'est pas chargé en mémoire. Le problème vient soit de mon code de l'interruption soit de mon jump. Je rajoute le code du kernel (chargé au deuxieme secteur de ma clé) au cas ou le probleme viendrait de la :

    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
    [BITS 16] ; mode reel 16 bits
    [ORG 0x0] 
     
    mov ax, 0X0100
    mov ds, ax
    mov es, ax
    mov ax, 0x8000
    mov ss, ax
    mov sp, 0xF000
    mov si, msg00
    call afficher
     
    end:
    	jmp end;
     
    afficher:
    	push ax
    	push bx
    	.debut
    		lodsb
    		cmp al, 0
    		jz .fin
    		mov ah, 0x0E
    		mov bx, 0x07
    		int 0x10
    		jmp .debut
     
    	.fin
    	pop bx
    	pop ax
    	ret
     
    msg00 db "Kernel is spiking", 10, 0

  6. #6
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Essayes de faire une boucle de lecture du secteur tant que la lecture échoue
    (parfois le reset du disque provoque une erreur a la lecture suivante)

    Tu peux aussi essayer de modifier l'emplacement de ton segment (genre 1000h au lieu de 100h)

    a+ François

  7. #7
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 85
    Points : 68
    Points
    68
    Par défaut
    Salut,

    J'ai donc vérifié le code d'erreur de l'interruption 0x13. Après l'interruption la valeur 02H (address mark not found) est contenu dans le registre AH. Malheureusement je ne comprend pas l'erreur. Si j'ai bien compris l'erreur indique que l'adresse du secteur 2 du cylindre 0 n'a pas été trouvé. J'ai essayé en mettant le secteur 2 du cylindre 1 mais même résultat. Je passe bien le numéro du disque (de la cle dans mon cas) dans le registre DH j'ai aussi essayé de modifier DL (le head number) en le mettant à 1. Toujours la même erreur j'ai beau relire mon code je ne vois pas d'où vient l'erreur.

  8. #8
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 85
    Points : 68
    Points
    68
    Par défaut
    Re-bonjour,

    J'ai enfin trouvé mon erreur, une erreur de débutant en fait. J'ai récupérer la valeur du registre DL et l'ai mis dans la variable bootdrv avant d'avoir déclaré la pile.

  9. #9
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Hello,

    ce n'est pas la pile que tu doit déclarer, mais juste le segment de donnees.
    ou alors tu utilises cs:[bootdrv]

    a+ François

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 145
    Points : 170
    Points
    170
    Par défaut
    J'en suis également quitte pour une mise à jour du 2e chapitre du tutoriel sur Pépin. Par négligence, je n'avais jamais pensé à tester le boot à partir d'une autre unité que floppyA.
    Je confirme le problème, et son correctif, si on essaye de booter à partir d'un disque dur.

    Merci pour cette remonté de bug

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Le topic est inactif depuis un petit moment mais je tente ma chance en y demandant de l'aide.

    Pour faire court, on me demande dans le cadre d'un projet de rendre une clé USB bootable en programmant un secteur de boot.

    Je me suis donc servi du mode opératoire très intéressant de Milouz123:
    http://a.michelizza.free.fr/pmwiki.p...utoOS.Bootsect

    Pour commencer, j'ai choisi le tuto qui créé un secteur de boot qui affiche un message.
    Voici le code du secteur de boot:
    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 compilé le fichier sectboot.asm avec la commande:
    nasm -f bin -o bootsect bootsect.asm

    J'ai formaté ma clé USB en FAT sous Linux.
    Puis j'ai copié le fichier sectboot sur le 1er secteur de la clé avec la commande:
    dd if=bootsect of=/dev/sdb bs=512 count=1
    J'ai le message qui montre que la copie s'est bien effectuée

    Mais au final, ma clé ne boot pas et j'ai le message suivant:
    "this is not a bootable disk please insert a bootable floppy and press any key to try again"

    Quand je teste le code avec l'emulateur qemu, cela fonctionne donc je pense que le problème provient de la préparation de ma clé...

    - Mauvais formatage?
    - Suppression de données importantes sur la clé USB lors de la commande dd? (pourtant copie seulement le 1er secteur de 512 octets avec les options bs=512 et count=1)
    - Modifs à effectuer sur le code vu qu'il est prévu pour une disquette et qu'avec mon test sur qemu qui est ok, je créé également une image de disquette?

    Pour info, j'ai essayé avec plusieurs clés USB (128 Mo, 2 Go et 4 Go...)


    Je suis novice en langage C et je ne connais pas le langage Assembleur donc c'est surement un truc tout con que j'ai zappé

    Merci d'avance pour votre aide

  12. #12
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    je dit peut etre une connerie mais ça vient surement de la séquence de boot de qemu, le mesage d'erreur semble vouloir dire que qemu boot sur la disquette et pas sur la clef usb

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse mais j'ai le message quand je boote sur mon ordi.
    Sur Qemu, ca marche bien avec une image d'une disquette...

    D'après moi, plusieurs causes sont possibles:
    - clé USB mal formatée
    - commande "dd" qui copie le sectboot mal paramétrée et suppression de données nécessaires au boot sur ma clé USB
    - code du sectboot à modifier pour l'adapter à un boot sur clé usb car initialement prévu pour être copié sur une disquette

    En complément d'infos, mon ordi peut booter sur une clé.
    J'ai l'option dans le bios et j'ai déjà booté sur des clés USB (clé BartPE et clé USB bootable avec Linux)

    Merci d'avance

  14. #14
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    copier ton programme sur le premier secteur devrait détruire le formattage (vu que c'est dans le premier secteur que sont enregistré les information de la partition)est ce le cas?

    sinon l'option count correspond au numéros du secteur que l'on copie ou au nombre de secteur a copier? si ça correspond au numéros du secteur a remplacer, essaye plutot zéro comme valeur

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par bifur Voir le message
    copier ton programme sur le premier secteur devrait détruire le formattage (vu que c'est dans le premier secteur que sont enregistré les information de la partition)est ce le cas?
    Je ne suis pas sur à 100 %, mais pour moi ça ne détruit pas le formatage physique de la clé.. ça détruit seulement la table de partitions contenue dans le secteur de boot.

    sinon l'option count correspond au numéros du secteur que l'on copie ou au nombre de secteur a copier? si ça correspond au numéros du secteur a remplacer, essaye plutot zéro comme valeur
    Count signifie sur quel secteur de la clé, on copie le fichier.
    Le secteur de boot étant sur le 1er octet, il faut donc donner la valeur 1.

    J'ai tout de même testé avec count=0, mais ca ne copie rien

    # dd if=bootsect of=/dev/sdb bs=512 count=0
    0+0 enregistrements lus
    0+0 enregistrements écrits
    0 octet (0 B) copié, 0,000130758 s, 0,0 kB/s


    Avec count=1; la copie s'effectue bien:
    dd if=bootsect of=/dev/sdb bs=512 count=1
    1+0 enregistrements lus
    1+0 enregistrements écrits
    512 octets (512 B) copiés, 0,000304295 s, 1,7 MB/s

  16. #16
    Membre confirmé Avatar de bifur
    passe le balais et l'aspirateur
    Inscrit en
    Mars 2008
    Messages
    314
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : passe le balais et l'aspirateur

    Informations forums :
    Inscription : Mars 2008
    Messages : 314
    Points : 550
    Points
    550
    Par défaut
    effectivement remplacer le premier secteur d'un disque ça ne détruit pas le formattage physique mais le formattage logique (les partitions)

    le paramètre count est visiblement le nombre de secteur a copier (donc zéro ça copie rien ^^)

    en tout cas ce dont je suis sur c'est que remplacer le premier secteur de ta clef par ton petit programme t'empèche de pouvoir lire la/les partition de ta clef, si après avoir effectué l'opération tu peut encore acceder a la partition de la clef c'est que le programme a été mal copié

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    En effet, je pouvais toujours accéder à ma clé donc ma copie du secteur de boot ne devait pas être correcte car la table des partitions était toujours présente…

    Mais j'ai enfin réussi à booter sur ma clé USB, ca fait plaisir !
    Par contre, ça me ferait encore plus plaisir si je comprenais pourquoi.

    En fait, j'ai juste rajouté l'option -I dans la commande mkfs.vfat:
    mkfs.vfat -F -32 -I –n USBboot /dev/sdb1

    Dans le man, il est indiqué :

    - I: Normally you are not allowed to use any 'full' fixed disk devices. mkdosfs will complain and tell you that it refuses to work. This is different when usind MO disks. One doesn't always need partitions on MO disks. The filesytem can go directly to the whole disk. Under other OSes this is known as the 'superfloppy' format.

    This switch will force mkdosfs to work properly.

    J'avoue ne pas trop comprendre ce que ça fait mais c'est clair que mon problème venait d'un mauvais formatage de ma clé…

  18. #18
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2014
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Bonjour a tous j'aimerai savoir exactement se que tu a fait pour faire démarrer ton noyau depuis un clef usb j'utilise le meme boot et noyau que toi que j'ai trouver sur le site de PEPIN donc je cherche a démarrer mon noyau ( avec l'interruption 0x13 ) mais sans résultat

    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
    49
    50
    51
    52
    53
    54
    55
     
    %define BASE   0x100  ; 0x0100:0x0 = 0x1000
    %define KSIZE  1  ; nombre de secteurs de 512 octets a charger
     
    [BITS 16]
    [ORG 0x0]
     
    jmp start
    %include "UTIL.INC"
    start:
     
    ; initialisation des segments en 0x07C0
        mov ax, 0x07C0
        mov ds, ax
        mov es, ax
        mov ax, 0x8000  ; stack en 0xFFFF
        mov ss, ax
        mov sp, 0xf000
     
    ; recuparation de l'unite de boot
        mov [bootdrv], dl  
     
    ; affiche un msg
        mov si, msgDebut
        call afficher
     
    ; charger le noyau
        xor ax, ax
        int 0x13
     
        push es
        mov ax, BASE
        mov es, ax
        mov bx, 0
     
        mov ah, 2
        mov al, KSIZE
        mov ch, 0
        mov cl, 2
        mov dh, 0
        mov dl, [bootdrv]
        int 0x13
        pop es
     
    ; saut vers le kernel
        jmp dword BASE:0
     
     
    msgDebut: db "Chargement du kernel", 13, 10, 0
     
    bootdrv: db 0
     
    ;; NOP jusqu'a 510
    times 510-($-$$) db 144
    dw 0xAA55
    donc si c'est possible de dire se qu'il va pas merci de votre aide

  19. #19
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    bonsoir,

    ton sous-programme "afficher" ne modifie pas DL ?
    ton "noyau" ne fait que 512 octets ?
    il est bien sur le 2eme secteur ? (juste après le secteur de boot donc)

  20. #20
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2014
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Bonsoir Merci pour votre réponse rapide désoler je suis nouveau sur le forum
    voici le code source du sous programme " Afficher " :

    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
     
    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
    pour mon noyau il affiche juste un message : ( c'est le meme que celui de dessus ) De PEPIN

    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
     
    [BITS 16] ; mode reel 16 bits
    [ORG 0x0] 
     
    mov ax, 0X0100
    mov ds, ax
    mov es, ax
    mov ax, 0x8000
    mov ss, ax
    mov sp, 0xF000
    mov si, msg00
    call afficher
     
    end:
    	jmp end;
     
    afficher:
    	push ax
    	push bx
    	.debut
    		lodsb
    		cmp al, 0
    		jz .fin
    		mov ah, 0x0E
    		mov bx, 0x07
    		int 0x10
    		jmp .debut
     
    	.fin
    	pop bx
    	pop ax
    	ret
     
    msg00 db "Kernel is spiking", 10, 0
    pour copier mon bootloader et mon noyau je fait comme ceci :

    copy boot.bin/B+ KERNEL.bin boot.img/Y

    donc la copie se fait boot + kernel dans le fichier boot.img

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VB.NET] Sauvegarde de fichier sur clé USB
    Par cyrcroix dans le forum Windows Forms
    Réponses: 4
    Dernier message: 08/06/2005, 11h02
  2. Problème de noms de fichiers sur clé USB
    Par karmaki dans le forum Administration système
    Réponses: 4
    Dernier message: 18/04/2005, 17h38
  3. Question sur l'usb
    Par BOUBOU81 dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/07/2004, 08h49
  4. Compatibilité clé usb 2.0 sur port usb 1.0 de mon portable?
    Par coubi64 dans le forum Périphériques
    Réponses: 2
    Dernier message: 22/10/2003, 19h57
  5. [TP]Impression sur port USB
    Par haypo dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 18/07/2003, 12h09

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