|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : juin 2008 Messages : 82 ![]() |
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 :
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 |
||
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() ![]() François conception mécanique Inscription : janvier 2005 Messages : 330 ![]() |
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 |
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : juin 2008 Messages : 82 ![]() |
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 |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : avril 2008 Messages : 10 ![]() |
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 ;-) ). |
|
|
00
|
|
|
#5 | ||
|
Nouveau Membre du Club
![]() Inscription : juin 2008 Messages : 82 ![]() |
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 :
|
||
|
|
00
|
|
|
#6 |
|
Membre expérimenté
![]() ![]() François conception mécanique Inscription : janvier 2005 Messages : 330 ![]() |
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 |
|
|
00
|
|
|
#7 |
|
Nouveau Membre du Club
![]() Inscription : juin 2008 Messages : 82 ![]() |
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. |
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : juin 2008 Messages : 82 ![]() |
Re-bonjour,
J'ai enfin trouvé mon erreur, une erreur de débutant en fait .
|
|
|
00
|
|
|
#9 |
|
Membre expérimenté
![]() ![]() François conception mécanique Inscription : janvier 2005 Messages : 330 ![]() |
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 |
|
|
00
|
|
|
#10 |
|
Membre actif
![]() Inscription : mai 2008 Messages : 157 ![]() |
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
__________________
Programmer son propre noyau, une introduction avec Pépin |
|
|
00
|
|
|
#11 | ||
|
Invité de passage
![]() Inscription : janvier 2010 Messages : 4 ![]() |
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 :
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 |
||
|
|
00
|
|
|
#12 |
|
Membre habitué
![]() passe le balais et l'aspirateur Inscription : mars 2008 Messages : 111 ![]() |
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
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Inscription : janvier 2010 Messages : 4 ![]() |
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 |
|
|
00
|
|
|
#14 |
|
Membre habitué
![]() passe le balais et l'aspirateur Inscription : mars 2008 Messages : 111 ![]() |
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 |
|
00
|
|
|
#15 | ||
|
Invité de passage
![]() Inscription : janvier 2010 Messages : 4 ![]() |
Citation:
Citation:
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 |
||
|
|
00
|
|
|
#16 |
|
Membre habitué
![]() passe le balais et l'aspirateur Inscription : mars 2008 Messages : 111 ![]() |
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é |
|
00
|
|
|
#17 | |
|
Invité de passage
![]() Inscription : janvier 2010 Messages : 4 ![]() |
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é : 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é… |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com