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éation d'un boot sector


Sujet :

Programmation d'OS Assembleur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Création d'un boot sector
    Bonjour a tous, je suis en train de Dev un petit kernel (pour le fun) mais pour le moment je le charge avec grub

    je voudrait donc créer un boot sector/loader pour charger mon kernel en mémoire et lui passer la main

    c'est la que mon problème se situe je sait comment marche le boot secteur (dans la theorie) initialisation des différent secteur, son magic number dans son dernier mot, mais le comment faire ca me pose plus de problème.

    ensuite vient la création de l'image de disquette, je travaille sous Windows avec Virtual Box, jusqu'à présent j'avait une image de disquette avec grub dessus donc je n'avait qu'a changer mon kernel.bin, mais si j'ai mon propre boot loader il me faudra une image avec celui a la place, je voudrait donc savoir qu'elle software utiliser pour ca


    j'ai aussi d'autre petite question, comme la copie du bootloader sur la MBR du HDD et la copie du kernel sur le HDD, pour directement booter depuis le HDD mais je suppose que pour ca il faut un système de fichier ? (je vais sans doute plus vite que la musique ^^)

    Merci a vous en tout cas pour vos réponse

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 13
    Points : 18
    Points
    18
    Par défaut
    Voilà pour le secteur de boot (à compiler avec NASM) :

    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
    %define BASE    0x100
    %define KSIZE   10       ; nombre de secteurs de 512 octets a charger
     
    [BITS 16]
    [ORG 0x0]
     
    jmp start
     
    %include "UTIL.INC"
     
    start:
            mov [bootdrv], dl        ; recuperation 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, msgboot
            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
     
     
    msgboot db 13,10,'A remplacer par le nom de l'OS',0
     
    loadmsb db 13,10,'D', 130, 'marrage...',0
     
    msgDot db '.',0
     
    ChargeOK db 0
     
    err db 13, 10, "Erreur ! Le Noyau ne peut ", 136, "tre d", 130, "marr", 130, ".",0
     
    bootdrv: db 0
     
    times 510-($-$$) db 0x90
     
    SignatureMBR dw 0xAA55

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 13
    Points : 18
    Points
    18
    Par défaut
    Pour l'image de disquette, tu peux télécharger CR-Hexact, qui te servira à mettre le code du noyau sur le deuxième secteur de l'image de disquette :

    • Crée un nouveau fichier texte (Clic droit/Nouveau/Texte) et nomme-le boot.img.
    • Compile ton secteur de boot et ton noyau.
    • Ouvre Cr-Hexact.
    • Clique sur Fichier/Ouvrir et ouvre boot.img.
    • Clique sur Edition/Insérer un octet.
    • Valide l'écriture à la fin du fichier dans la boîte de dialogue.
    • Modifie le nombre d'octets à traiter (en bas) à très exactement : 1474560
    • Ouvre le fichier du bootloader, fais un clic droit sur le dernier octet et sélectionne copier la plage.
    • Retourne sur le fichier boot.img et sélectionne le premier octet, puis clic droit/coller (écraser).
    • Fais de même pour le fichier du noyau, mais colle le sur le deuxième secteur (Le premier octet juste après le second trait horizontal).
    • Appuie sur Fichier/Enregistrer

    Voilà ton image disquette, en espérant que cela t'a été utile.

Discussions similaires

  1. Problème création projet Spring Boot
    Par Copainbig dans le forum Spring Boot
    Réponses: 0
    Dernier message: 01/01/2015, 21h48
  2. Création du menu boot
    Par Benfo84 dans le forum Ubuntu
    Réponses: 6
    Dernier message: 16/03/2013, 01h21
  3. [Pépin] Utilisation de EAX, ECX dans le boot sector 16 bits
    Par spiner900 dans le forum Programmation d'OS
    Réponses: 4
    Dernier message: 29/05/2009, 22h46
  4. Boot sector BosoKernel vers syntaxe AT&T
    Par Edouard Kaiser dans le forum Programmation d'OS
    Réponses: 4
    Dernier message: 30/10/2006, 20h13
  5. Création d'un OS / Boot / Noyau
    Par the_best dans le forum Programmation d'OS
    Réponses: 19
    Dernier message: 22/08/2004, 00h48

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