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 qui ne lance pas le Kernel


Sujet :

Programmation d'OS Assembleur

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Bootloader qui ne lance pas le Kernel
    Salut tout le monde !

    Voilà j'ai un petit problème, j'ai codé un bootloader et un Kernel : Le premier affiche la phrase "Chargement du Kernel...", puis applle ce dernier, qui lui affiche la phrase "Le Kernel parle !". Je compile ces programmes avec nasm, puis les lie avec DOS (type kernel>>bootsector).
    Et lorsque je teste avec bochs, il me renvoie en boucle la phrase "Chargement du Kernel...". Voilà mes sources :

    Bootsector.asm
    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
    %define BASE 0x100 
    %define KSIZE 2 	; Nombre de secteurs de 512 octets a charger
     
    [BITS 16]
    [ORG 0x0]
     
    ; Initialisation des segments
    mov ax, 0x07C0
    mov ds, ax	; Data segment en 7C00h
    mov es, ax	; Extra segment en 7C00h
    mov ax, 0x8000	; Réglage de stack
    mov ss, ax
    mov sp, 0xF000
     
    mov [bootdrv],dl	; recuparation de l'unite de boot
     
    ; Affichage du message
    mov si, welcome	; On met la variable qui contient le message dans le registre SI
    call write		; On appelle la fonction qui va écrire le message
     
    ; Charger le noyau
    xor ax, ax
    int 0x13
     
    push es
    mov ax, BASE 	; L'int 13h charge le(s) secteur(s) en es:bx
    mov es, ax
    mov bx, 0
     
    mov ah, 2 		; Fonction de lecture
    mov al, KSIZE
    mov ch, 0 		; Numéro de piste
    mov cl, 2 		; Numéro du secteur de départ pour la lecture
    mov dh, 0 		; Numéro de face
    mov dl, [bootdrv] 	; Numéro du lecteur
    int 13h
    pop es
     
    ; Saut vers le kernel
    jmp dword BASE:0
     
    ; Fonctions
    write:
    .debut:
    lodsb		; Met le premier octet du contenu de l'adresse SI dans AL et incrémente SI
    cmp al, 0
    jz .fin
    mov ah, 0x0E	; Avec l'interruption 0x10 et le caractere en AL, ça écrit à l'écran
    int 0x10
    jmp .debut
    .fin:
    ret; Retour au code
     
    ; Donnees
    welcome db "Chargement du kernel...", 13, 10, 0
     
    bootdrv: db 0
     
     
    times 510-($-$$) db 0
    dw 0xAA55; Signature pour le boot
    Kernel.asm
    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]
    [ORG 0x100]
     
    ; initialisation des segments en 0x100
    	mov ax,0x100
    	mov ds,ax
    	mov es,ax
    	mov ax,0x8000	; stack en 0xFFFF
    	mov ss,ax
    	mov sp, 0xf000
     
     
    ; Affichage du message
    mov si, speak; On met la variable qui contient le message dans le registre SI
    call write; On appelle la fonction qui va écrire le message
     
    ; Boucle infinie pour ne pas que le bootsector ne fasse n'importe quoi à la fin
    jmp $-2
     
    ; Fonctions
    write:
    .debut:
    lodsb	; Met le premier octet du contenu de l'adresse SI dans AL et incrémente SI
    cmp al, 0
    jz .fin
    mov ah, 0x0E	; Avec l'interruption 0x10 et le caractere en AL, ça écrit à l'écran
    int 0x10
    jmp .debut
    .fin:
    ret; Retour au code
     
    ;DONNEES
    speak db "Le Kernel parle !", 13, 10, 0
    Voilà si quelqu'un pouvait m'aider et me dire ce qui ne vas pas, merci

  2. #2
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 84
    Points : 78
    Points
    78
    Par défaut
    Salut,

    Comment crees tu ton image que tu utilises dans Bochs?

  3. #3
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Il semblerait que tu t'es inspiré des tutoriaux de Boso Kernel (http://inferno.cs.univ-paris8.fr/~am/tutorial/os/tutorial00.html).
    Si tu souhaites coder un mini Kernel en mode protégé, je te conseille vivement de standardiser ton noyau aux normes de Grub et de le faire booter par ce dernier.

    http://www-igm.univ-mlv.fr/~dr/XPOSE2004/rleonard/codeGrub.php
    http://www.gnu.org/software/grub/manual/multiboot/

    En effet, le role du boot loader dans Boso Kernel est bien expliqué, mais reste de la bidouille, une fois passé en PMode tu ne sauras plus ou se trouve le curseur, de combien de RAM tu possèdes, du device par lequel tu as booté etc...
    Grub te permet de conserver toutes ces informations, de plus Grub te dispense du passage en PMode, qui peut s'averer fastidieux (activation de l'A20 etc..).
    Cerise sur le gateau, tu pourras meme booter ton Kernel via le reseau

Discussions similaires

  1. Boot réseau qui ne lance pas l'iSO
    Par raparationtech dans le forum Réseau
    Réponses: 0
    Dernier message: 30/10/2013, 16h44
  2. [PHP 5.1] probleme de session qui ne lance pas
    Par bu7ch dans le forum Langage
    Réponses: 8
    Dernier message: 05/12/2011, 18h21
  3. Problème de débutant, programme qui ne lance pas
    Par benjani13 dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 15/02/2011, 19h17
  4. swf avec api externe dans un swf qui ce lance pas
    Par marcuscircus dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 02/01/2010, 14h06
  5. [MFC] Boite de dialogue qui se lance pas
    Par kacedda dans le forum MFC
    Réponses: 4
    Dernier message: 08/03/2006, 10h37

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