begin process at 2010 03 19 16:38:18
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

c et asm

 > SECTEUR BOOT, KERNEL ET CHARGEUR BOOT

SECTEUR BOOT, KERNEL ET CHARGEUR BOOT


 Information sur la source

Note :
9,4 / 10 - par 5 personnes
9,40 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :c et asm Classé sous :démarrage, boot, secteur, sector, kernel Niveau :Débutant Date de création :04/04/2005 Vu / téléchargé :7 645 / 1 095

Auteur : sajaris

Ecrire un message privé
Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note

 Description

mon code porte sur un bootloader tres simple BOOT.BIN et un KERNEL.BIN. J'ai eu beaucoup de mal au debut à en faire un. J'ai compris la procédure et je le partage.
J'ai aussi inclu un chargeur boot du nom de MKBOOT.COM qui charge votre fichier boot.ini et le kernel.ini sur une disquette, les noms de ces fichiers sont à modifier, si vous le desiré, dans le chargeur MKBOOT.TXT , au niveau de la declaration des données, puis recompilés avec COMPILE.BAT. Bien sur il y a d'autres chargeurs mais il est souvent bien de faire pour soi.

Merci pour vos critiques pour d'éventuelles améliorations
Si vous avez des questions sur mon code, je tenterais de les repondre

Compilateur utilisé: NASM



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip MOT PALINDROME par Tinsalhi
EXECUTE /USR/BIN/ID par 0x0syscall
BIBLIOTHEQUE POUR LE 8086 par flory_
.:| CONVERSION D'UNE CHAINE EN MAJUSCULE |:. par fenkouch
PROGRAMME DE TRI (CROISSANT) D'UN TABLEAU EN ASSEMBLEUR DU D... par monticarlo

 Sources en rapport avec celle ci

Source avec Zip COMMENT FAIRE UN LIVECD par aloneinthedark
Source avec Zip BOOT DEPUIS UNE DISQUETTE FORMATTÉ DOS par bofur
Source avec Zip AUTO BOOT par HwW_Mb
Source avec Zip BOOT PONG par barbichette
Source avec Zip UN KERNEL LOADER BIEN SIMPLE ET BIEN DOCUMENTER par TotalIllusion

Commentaires et avis

Commentaire de patatalo le 04/04/2005 13:00:58 administrateur CS

salut,

la gestion d'un kernel > 512 octets est à prévoir rapidement ;-)

@++

Commentaire de LordBob le 04/04/2005 13:13:37

salut, je ne m'y connais pas beaucoup en assembleur, mais quand je vois que ton code contient des interruptions, j'ai bie peur que ca parte mal !

Commentaire de MrNOP le 04/04/2005 19:09:10

Salut,

Pour que tu puisse charger plus d'un secteur en mémoire, il faut que tu fasse une boucle autour de ton int 13h func 2.

exemple repris de ton code:

nb_sector equ 9
sector_size equ 512
push es
mov ax,0100h
mov es,ax
xor bx,bx ;mieux que mov bx,0h prend moins de place
mov si,nb_sector ;nombre de secteurs a charger
mov cx,0002h ;premier secteur a charger sur piste 0
xor dx,dx
loading_sectors:
mov ax,0201h
int 13h
jc error_loading
add  bx,sector_size
inc cl
dec si
jnz loading_sectors
end_loading:
pop es

error_loading:
TU MET TA GESTION D'ERREUR

l'inconvenient de ton secteur de boot c qu'il ne respecte pas la norme !! Pas de BPB (boot parameter block) et de plus il te faut une routine de conversion LBA->CHS pour pouvoir charger un nombre plus important de secteurs car la solution que j'ai ecrite ne charge que 18 secteurs au maximum.

Cf http://membres.lycos.fr/cos2000/ mon ancien site dans la section tutorial OS

Commentaire de sajaris le 04/04/2005 20:17:11

merci pour vos suggestion je vais revoir le code et l'ameliorer.

Mais je savais pas qu'il fallais une boucle pour qu'il puisse charger plusieurs secteurs. Je pensais qu'il le faisait automatiquement. je vais prendre cela en compte.


LordBob dit:
"salut, je ne m'y connais pas beaucoup en assembleur, mais quand je vois que ton code contient des interruptions, j'ai bie peur que ca parte mal !"

je comprends pas bien pourquoi tu dis cela, les interruptions bios que j'utilise fonctionne bien et ca plante pas du tout.

Commentaire de LordBob le 04/04/2005 20:30:05

alors il me semble, mais corrige moi si je me trompe, que les interruptions "dépende" d'un OS... or pour un chargeur de boot, il me semble qu'il faudrait qu'il soit plutot "independant" !

Commentaire de MrNOP le 04/04/2005 21:45:34

ça c une version simplifiée !!!!

nb_sector equ 9

push es
mov ax,0100h
mov es,ax
xor bx,bx ;mieux que mov bx,0h prend moins de place
mov cx,0002h ;premier secteur a charger sur piste 0
xor dx,dx
mov ah,02
mov al,nb_sector
int 13h
pop es

LordBob> un os utilise tjr le bios (interruption logicielles) pour se charger au boot du PC car aucun OS n'est chargé et il est impossible d'implémenter en un secteur de boot un pilote de disquette (DMA+fdd).

Commentaire de HwW_Mb le 05/04/2005 04:21:03

ouais , bon boulot sajaris
c bien pour un début ;) mais essaye de faire une amélioration : faire un petit shell, des commandes utils
ect ....
ensuite bascule toi en mode protégé ;)
LordBob: chaque Os a besoin d'appeller ces Ints en mode réel pour charger le kernel en mode 32 bits :)
...............................

Bonne Continuation sajaris |-^_^-|

Commentaire de sajaris le 05/04/2005 18:10:51

merci HwW_Mb. c'est surtout en voyant et en exploitant votre OS que j'ai essaé de comprendre le fonctionnement, et pour cela essayé d'en faire un.

Pour ce qui est du mode protégé, je voudrai bien, mais c'est compliqué, mais pas impossible ;)
il faudrait initialiser le gdt, definir les descripteurs....
Ce que je comprends pas, quand je bascule en mode protégé, est-ce que les int bios sont encore valides? je pense qu'il faudrait reecrire les interruptions en initialisant l'idt et utiliser ses propres interruptions. c'est exacte?

LordBob> en fait si tu remarque dans mon programme, je n'ai pas utilisé d'interruption dos (int 21h....). Parce que Dos est un OS. Au demarrage du PC, tu n'a que le BIOS qui teste les périphériques, cherche un MBR ensuite le charge et lui donne la main. Il n'ya donc aucun probleme si j'utilise les int bios, mais pas dos, là tu aurai raison.

MrNOP> dans ta version simplifiée tu ne fait plus de boucle pour charger les secteurs. Donc j'avais raison en disant qu'il le fait automatiquement, ou c'est un oubli?

Commentaire de MrNOP le 05/04/2005 18:49:58

Re,

En fait dans cette boucle il faut que tu insere une sous routine qui fait la conversion LBA->CHS a la place de l'appel de l'int 13h

Concernant l'appel de fonction bios en mode protegé, il est possible de le faire mais infiniment plus simple d'implémenter un accés au lecteur disquette, video et HD par les entrées/sorties.

Pour l'appel d'int bios en mode protegé il existe :

- le passage en mode réel le temps de l'appel de l'int et rebasculer en mode protégé
- Un pseudo mode V86

J'ai deja codé une partie d'OS en Pmode mais en C c'est bcp moins sportif comme défit lol
D'autre part meme pour le mode réel je te deconseille d'utiliser le BIOS (lenteur) !!
Surtout en ce qui concerne la video, tu peux programmer trés simplement la vga ou le vesa en utilisant que les ports d'entrée sortie !

Commentaire de sajaris le 05/04/2005 19:09:23

ah ok, tu me conseil les ports, dons j'oublie les int. c'est cela? (si oui ou puije trouver la liste des ports entrée sortie?)

je comprend pas "conversion LBA->CHS ".

MrNOP>
Pour l'appel d'int bios en mode protegé il existe :
- le passage en mode réel le temps de l'appel de l'int et rebasculer en mode protégé

je voudrai savoir si cette technique n'est pas lente...
et le mode v86 ? ca je vais chercher.

merci encore

Commentaire de MrNOP le 05/04/2005 19:47:10

pour les entrées sorties :
http://cos2000.perso.cegetel.net/int.rar
http://cos2000.perso.cegetel.net/int2.rar

sinon concernant LBA CHS .( LBA concerne que les disque dur donc je parlerais ici d'adressage lineaire d'un secteur )

voila en fait dans un OS on ne raisonne pas en haut nivo avec le N°cylindre (ou piste pour disquette), N° tete, N° secteur (d'ou l'appellation CHS, cylinder, head, sector). Lorsque tu utilise le BIOS avec une disquette c moins grave parce lui parle en CHS et que tu connais parfaitement la geometrie de la disquette (80 pistes,18 secteurs, 2 tetes). Mais sur un disque c plus delicat, il te faut donc recuperer ses infos du BPB (expliqué plus haut) et créer une routine qui transforme un n° secteur lineaire en coordonnées CHS. Regarde ta disquette a en tous 80*18*2 secteurs physique de 512 octets ce qui rend adressable 2880 secteur, en raisonnant avec un nombre entre 0 et 2880 pour situé un secteur c plus simple que d'utiliser les coordonnées CHS.
              adressage lineaire      piste     tete    secteur
exemple secteur 0  ->                  0          0           1
              secteur 12h ->               0          0           12h
              secteur 2Ch ->               1          0            9h

pour plus infos ->
http://membres.lycos.fr/cos2000/FS.html
http://membres.lycos.fr/cos2000/disquette.html

De toute façon c un passage obligé pour la lecture d'une fat !!!

Voila
Sinon le switch mode reel-mode protege qui est utilisé par les dos extenders par exemple, et il est relativement lent !!!!
Arf je sais pas pkoi les gens n'aiment pas le mode réel !!!
Si tu veux plus de mémoire tu peux utiliser le Flat real mode (unreal mode) qui permet d'etendre l'accés a la mémoire etendue complete (<4Gb) sans etre en mode protegé. Il suffit pour cela de basculer en mode protege,  utiliser  pour un selecteur un descripteur dont la limite est de 4Gb et revenir en mode réel !

Commentaire de sajaris le 06/04/2005 11:58:34

MrNOP>Si tu veux plus de mémoire tu peux utiliser le Flat real mode (unreal mode) qui permet d'etendre l'accés a la mémoire etendue complete (<4Gb) sans etre en mode protegé. Il suffit pour cela de basculer en mode protege,  utiliser  pour un selecteur un descripteur dont la limite est de 4Gb et revenir en mode réel !<

c'est tout ce qu'il faut faire pour avoir plus de memoire? et apres avoir basculé en mode reel, j'ai maintenant 4Go si je comprends bien. Ok, je vais l'essayer. Mais pour un essaie je vais pas directement utiliser les ports comme tu me le conseil, mais les int BIOS que j'espere vont fonctionner toujours.

Surtout merci pour les sites.

je comprends maintenant pourquoi tu parle de conversion LBA->CHS  si j'utilise un disque. Mais pour l'instant j'utilise une disquette.

mais le Pmode , ca m'interesse vraiment maintenant. Tu as des exemples à compiler avec nasm STP?
ce que j'ai deja réalisé c'est l'initailisation du gdt, le passage en Pmode. puis je lance la lecture sur la disquette du noyau(sur deux secteurs) que je charge en memoire avec des int BIOS. mais a partir de la plantage direct ( le lecteur de disquette reste constamment allumé et plus rien). selon moi, je dois sois reecrire les int, car celles du BIOS ne marche plus en Pmode, sois revenir en Rmode ( et la je sais plus si j'ai 4Go de memoire). qu'en pense tu?
(je vais chercher aussi le unreal mode.)

Commentaire de sajaris le 06/04/2005 12:11:20

je demande aussi l'avis de patatalo et HwW_Mb.

Commentaire de patatalo le 06/04/2005 12:44:31 administrateur CS

salut,

a mon avis basculer du mode protégé au mode réel est valable pour l'époque du 286 mais le mode v86 est beaucoup plus interessant a utiliser et permet en plus de mettre le bios sous surveillance.

Il est de + possible de generer plusieurs taches v86 en meme temps.

Hook des instructions int, cli, sti, iret, ...

@++

Commentaire de patatalo le 06/04/2005 12:52:29 administrateur CS

re,

effectivement, si tu passe en mode protégé, les interruptions doivent etre réécrite ou desactivées.

le bootcom est un exemple, tu pourras voir qu'il est assez simple de réecrire les interruptions au moins pour qu'elle ne fasse rien ou un minimum.

je l'ai fais en format .com, tu le met sur une D7 boot dos et tu le lance directement de la D7. Ca evite d'utiliser un mkboot

http://www.asmfr.com/code.aspx?ID=26997

@++

Commentaire de sajaris le 06/04/2005 13:21:43

merci patatalo. le mode v86 je savais pas, avant que MrNOP ne m'en parle.
je vais voir bootcom.....

Commentaire de HwW_Mb le 06/04/2005 17:30:43

Salut .
rappellons que le mode protégé est trés différent au mode réel !
le Rmode utilise la RAM comme suit 0000:0000 => FFFF:FFFF (1 mb de ram)
lui le Pmode l'utilise comme ca 0000:00000000 => FFFF:FFFFFFFF (4 go de ram !)
ici tu peux pas appeller les Ints car c impossible !!!
la table de vecteur d'interruptions est compatible 16 bit ! aussi les port comme a dit MrNop (xxxx:xxxx)
tu peux utiliser les Interrupteurs
et faire tes persos routines en rebasculons le processeur  (v86) .
voici un exemple trés simple pour passer en mode protégé correctement en chargent un simple noyau
... ici au lieu d'utiliser les Ints il va utiliser la RAM directement (les adresses phisyque d'un périphérique en mémoire) !! ca sera plus rapide qu'un pauvre int :)
http://inferno.cs.univ-paris8.fr/~am/tutorial/os/tutorial04.html
---------------------------------------------------------------
Bon Courage sajaris |-^_^-|

Commentaire de sajaris le 11/04/2005 19:15:43

http://www.ift.ulaval.ca/~dubois/ift17584/

voila je me suis lancer dans les recherches sur le Pmode et j'ai touvé des liens avec des cours interessants. Mais celui que j'ai le plus apprecié c'est celui ci. alors je le partage (si vous n'etes pas encore au courant de ce site).
Il y a meme un lien pour telecharger les 3 fameux docs d'intels.
Merci et à bientot.

Commentaire de infogerance le 13/12/2005 23:04:37

Bonjour
je crois qu'on depasse le lecteur disquette...
je cherche un aide sur le chargement d'un kernel depuis un cd-rom ou un flash disk..
une solution simple et pas comme celle ci du isolinux qui simule le VTOC comme etant une racine root "/" pour chercher l'emplacement du kernel dans le cd. car celle ci vous oblige un repertoire isolinux est kernel zipé (bzimage). mercie.

Commentaire de ghuysmans99 le 01/04/2007 09:12:37

d'abord quand on fait "mov dx,msg" c'est LE POINTEUR de "msg" qui est mis dans "dx" (c'est parce que tu utilises nasm sinon tu devrais mettre "mov dx,Offset(Msg)")

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

copier le boot secteur 0 et le kernel secteur 1....sur disquette ??? [ par hudson ] bonjour, excusez moi tout d'abord par cette ignorance mais il faut bien commencer un jour...voil&#224; j'ai suivi les vours et tus de "inferno" un des secteur boot sur CDs [ par sajaris ] Bonjour a tous, j'ai essayé quelques tutoriels sur la creation d'un secteur boot et d'un petit kernel (les exemple ne manque pas sur le net). Mon prob erreur dans le boot + kernel [ par hudson ] Bonjour, voil&#224; j'ai essayer de suivre le tut de inferno sur les OS et donc le boot sur la disquette est ok ! mais d&#232;s que je veux mettre un Disquette et secteur de BOOT [ par clem2003 ] Clem2002:Salut a tous, J'aimerai savoir comment puis-je copier mon fichier binaire dans le secteur de boot de la disquette par une commande DOS si pos Ecriture sur le secteur de boot d'un disque dur [ par vinc1008881 ] bonjourje sui tromper de lecteur, au lieu d&#233;crire sur le secteur d'amorce de ma disquette ; j'ai ecrit sur le secteur d'amorce de mon HD.ya plus Chargement d'un noyau [ par Stormy ] Je suis en train de coder un OS simple pour comprendre le principe. Le secteur de boot est écrit comme il convient sur le premier secteur de ma disque boot sector sur image binaire [ par Sialagio ] bonjour a tousj'essaye de créer une image d'une disquette boot sans utiliser de support physique. je souhaiterais mettre un de mes progs de boot où i Probleme de boot [ par DbD ] Bonjour,Alors je fais mon OS et j'ai des problème de boot a partir d'un disquette, sur certain pc ou quand le noyau depasse 40 secteurs ca boot plus Question Asm/C++ [ par Lelys ] Bonjour,Je voudrai faire un OS, mais le problème c'est que je ne m'en sort pas en ASM...Je suis plus allese en C/C++.Mais le problème est que les syst boot [ par VBREP ] salut à tousje cherche la base de departpour creer un boot systememerci d'avance


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales