[SOS] re-boot
David Decotigny
david.decotigny at free.fr
Wed Jul 21 14:12:26 CEST 2004
Bonjour,
Alain.MONVOISIN wrote:
> sans nuages. Presque car je préférerais utiliser CTRL-HALT-DEL plutôt que
> d'éteindre ma bécane pour revenir sur mon SE usuel.
Vous pouvez egalement utiliser un emulateur (bochs ou qemu) si vous
preferez.
> En feuilletant quelques notes sur le BIOS je vois qu'il y a l'interruption 19H
> qui fait cela mais je vois également dans les sources de Linux qu'on doit
> revenir en mode réel avant. Tout cela me dépasse encore pour le moment.
Exact.
> Je pense bien que ce sera traité dans un des articles à venir. J'espère
> simplement que ce ne sera pas le dernier. A moins que quelqu'un puisse
> m'aider à anticiper.
"Anticiper" n'est pas le mot. Il s'agirait plutot de remonter dans le
temps, puisque cet aspect des choses est traité dans le 1er article de
la serie.
Malheureusement nous n'avons pas le droit de vous l'envoyer sous format
electronique. Il vous faudra vous debrouiller pour le recuperer. Sur le
site de diamond editions (http://www.linuxmag-france.org/), il est
possible d'acheter les anciens numeros. Malheureusement, celui que vous
cherchez (le 62) est marqué comme étant encore "Vendu en kiosque"...
Peut-etre devriez-vous leur ecrire pour leur demander si, des fois, il
ne s'agirait pas d'un simple probleme de mise a jour de leur site
(vacances obligent).
Pour votre "probleme", la solution la plus simple est d'implanter un
"driver" clavier minimal, qui comprenne la combinaison de touches
ctrl-alt-del et qui appelle une routine pour rebooter. Rebooter un PC
est relativement simple, et on peut se passer du Bios.
Par exemple, une solution (pas propre) est de provoquer une exception
"faute triple". Pour cela, il s'agira par exemple de ne pas avoir de
handler pour l'exception "faute double" dans l'OS, ce qui est le cas
avec les sources livrees dans le magazine (cet oubli a ete corrige, cf
patch sur le site). Puis ensuite il s'agit d'appeler n'importe quelle
interruption non geree par l'IDT (ie marquee "non presente" dans l'IDT),
en rajoutant par exemple un asm("int $45"); dans le code. Ainsi, puisque
l'interruption 45 est marquee non presente dans l'IDT, il y a exception
faute double, et puisque l'entree pour la faute double est marquee non
presente dans l'IDT, il y a faute triple, donc reboot (pas propre) de la
machine.
Dans la suite, je vous conseille quand meme de declarer un handler
correct pour la faute double, tel qu'on le fait dans le patch fourni sur
le site. Car si vous desirez modifier le code des articles suivants, ou
developper de nouvelles fonctionnalites, un reboot de la machine en cas
de fausse manip est TRES desagreable ! (on n'a pas le temps de voir les
printf de debuggage...). Mais dans ce cas, il faudra trouver un autre
moyen de faire une faute triple, ou alors desativer l'entree de l'IDT
pour la faute double au moment ou on veut faire la faute triple.
Bonne journee. Peut-etre une petite proposition de code la-dessus ce
soir, si je suis motive.
--
David Decotigny -- http://david.decotigny.free.fr
More information about the Sos
mailing list