[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