SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Konde en Viernes 4 de Abril de 2008, 22:17

Título: Interrupciones Por Software
Publicado por: Konde en Viernes 4 de Abril de 2008, 22:17
hola... tengo un proyecto en la U, en el cual me han planteado generar una interrupcion_ por software, luego capturarla y ejecutar una rutina... pero no tengo ni idea?????

la idea es que si tienen cualquier esquema... documento... es decir cualquier dato que me pueda servir se los agradesco mucho... ok

Si alguien se llega a preguntar por que en el foro de programacion y no en el de linux inicio esta discucion es por hecho de que c es el lenguaje de linux... otro dato tengo un kernel 2.4.x, y un procesador amd duron...
Título: Re: Interrupciones Por Software
Publicado por: Eternal Idol en Viernes 4 de Abril de 2008, 22:35
Yo lo haria mas o menos asi:

1. Programa de modo Usuario muy simple que solo escriba un mensaje por pantalla y llame a la interrupcion.

2. Un modulo de modo Kernel que establezca la interrupcion en la IDT (esto implica hacerla apuntar a una funcion tuya).
Título: Re: Interrupciones Por Software
Publicado por: su - en Viernes 4 de Abril de 2008, 23:49
http://foros.solocodigo.com/index.php?show...=0&#entry126230 (http://foros.solocodigo.com/index.php?showtopic=34357&st=0&#entry126230)  <_<
Título: Re: Interrupciones Por Software
Publicado por: Eternal Idol en Sábado 5 de Abril de 2008, 00:27
Igual parece ser OTRA practica ...
Título: Re: Interrupciones Por Software
Publicado por: Konde en Viernes 18 de Abril de 2008, 17:43
claro la idea es esa, un programa de usuario al cual apuntar (pero como lo hago?) cuando se genera una interrupcion...

yo debo generar una interrupcion por sotfware y el manejador de interrupcion debera apuntar a una rutima (mi_programa). Es lo que debo hacer pero como...

En estos momento estoy indagando en la implemntacion de la llamadas al sistemas en linux... supongo que se hara parecido, es decir creo una funcion x() y la doy de alta para que me la almacene en memoria cada vez que inicio y poderla llamar en cualquier momento...
Título: Re: Interrupciones Por Software
Publicado por: Eternal Idol en Viernes 18 de Abril de 2008, 22:51
Lo acabo de hacer para Windows, es tu tarea y no te voy a dar el codigo pero la logica deberia ser la misma y si pones un poco de esfuerzo lo vas a poder hacer:

1. Deshabilitas las interrupciones con la instruccion cli.

2. Con sidt conseguis el registro idtr, el primer WORD es la entrada limite y el siguiente DWORD es la direccion en memoria de la primera entrada (ver manual de Intel).

3. Con la direccion de la primera entrada + 8 * entrada deseada tenes la direccion de la entrada de la interrupcion que queres habilitar. Si queres usar la interrupcion 0x69 entonces: idtEntry = base + 8 * 0x69;

4. Modificas la entrada en cuestion para apuntar a tu funcion, esto lo tenes que hacer teniendo muy en cuenta el formato de una entrada, lo ideal es que leas el manual de Intel.

5. Habilitas las interrupciones con la instruccion sti.

Intel® 64 and IA-32 Architectures Software Developer’s Manual (http://www.intel.com/design/processor/manuals/253668.pdf)

(http://img182.imageshack.us/img182/9161/idtgatedescriptorsje9.jpg)

PD. Interrupt gate es lo que te interesa. Y en tu funcion podes empezar poniendo solo iretd para volver, con un breakpoint ya podes depurar usando el ejecutable que llame a tu interrupcion.

Me olvidaba de decir, esto solo lo podes hacer desde un modulo de modo Kernel.