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 :

Lier le bootloader et le noyau


Sujet :

Programmation d'OS Assembleur

  1. #1
    Candidat au Club
    Homme Profil pro
    Programmation bas niveau, applications en mode texte
    Inscrit en
    Novembre 2024
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Programmation bas niveau, applications en mode texte

    Informations forums :
    Inscription : Novembre 2024
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Lier le bootloader et le noyau
    Salut !

    En ce moment je travaille sur un OS 16 bits très simple mais j'ai un problème que je n'arrive pas à comprendre : lorsque je lie mon bootloader et mon noyau, puis que je lance le système, seul le bootloader fonctionne, et je ne pense même pas qu'il arrive à passer le contrôle au noyau. Voici mon code :

    Le bootloader :
    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
    %define BASE            0x100
    %define KSIZE           1
     
    [BITS 16]
    [ORG 0x0]
     
    jmp start
    %include "brl/stdio.inc"
     
    start:
    ; Initialize segments
        mov ax, 0x07c0
        mov ds, ax
        mov es, ax
        mov ax, 0x8000
        mov ss, ax
        mov sp, 0xf000
     
        mov [bootdrv], dl
     
    ; Print a character
        print ld_kernel
        print nl
     
    ; Load the kernel
        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 dl, 2
        mov dh, 0
        mov dl, [bootdrv]
        int 0x13
        pop es
     
    ; Jump to the kernel
        jmp dword BASE:0
     
    ; VARIABLES
    bootdrv db 0
    ld_kernel db "Loading kernel...", 0
     
    times 510-($-$$) db 0
    dw 0xaa55
    Le noyau :
    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
    [BITS 16]
    [ORG 0x1000]
     
    jmp start
    %include "brl/stdio.inc"
     
    start:
    ; Initialize registers
        mov ax, 0x100
        mov ds, ax
        mov es, ax
        mov ax, 0x8000
        mov ss, ax
        mov sp, 0xf000
     
    ; Print a message
        print strd_kernel
        print nl
     
    ; VARIABLES
    strd_kernel db "Kernel started!", 0
    Le fichier de lancement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
     
    # Create binaries
    nasm -f bin -o bin/boot.bin src/boot.asm
    nasm -f bin -o bin/kernel.bin src/kernel.asm
     
    # Create OS image
    cat bin/boot.bin bin/kernel.bin /dev/zero | dd of=bin/benix.img bs=512 count=2880 iflag=fullblock
     
    # Run with qemu
    qemu-system-x86_64 -drive format=raw,file=bin/benix.img
    Pour ce qui est des macros comme print, elles marchent parfaitement.
    Donc voilà, si quelqu'un peut m'aider, merci !

    (J'ai suivi le tutoriel de Pépin OS pour le bootloader)

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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 411
    Points : 23 838
    Points
    23 838
    Par défaut
    Bonjour,
    À la ligne 37 du bootloader, tu as écrit mov dl, 2. Il s'agissait vraisemblement de mov cl, 2 à la place.

    Bienvenue dans le monde merveilleux du très-bas-niveau et du débogage noyau, là où les outils conventionnels ne nous sont plus d'aucun secours. :-)

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

Discussions similaires

  1. Compilation du noyau en C et du bootloader.
    Par Filadelphila dans le forum Programmation d'OS
    Réponses: 6
    Dernier message: 10/07/2020, 11h30
  2. [VB6] générer un recordset qui n'est pas lier à un bdd
    Par damyrid dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/06/2003, 18h48
  3. [Kylix] Impossible de lier
    Par Scoobs dans le forum EDI
    Réponses: 2
    Dernier message: 20/05/2003, 17h05
  4. Recompilation du noyau
    Par keikoz dans le forum Administration système
    Réponses: 7
    Dernier message: 18/02/2003, 00h54
  5. Primitive du noyau
    Par freud dans le forum Programmation d'OS
    Réponses: 5
    Dernier message: 25/11/2002, 04h17

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