• Jueves 2 de Mayo de 2024, 05:55

Autor Tema:  Interrupciones Por Software  (Leído 1517 veces)

Konde

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Interrupciones Por Software
« en: Viernes 4 de Abril de 2008, 22:17 »
0
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...

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Interrupciones Por Software
« Respuesta #1 en: Viernes 4 de Abril de 2008, 22:35 »
0
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).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Interrupciones Por Software
« Respuesta #2 en: Viernes 4 de Abril de 2008, 23:49 »
0
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Interrupciones Por Software
« Respuesta #3 en: Sábado 5 de Abril de 2008, 00:27 »
0
Igual parece ser OTRA practica ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Konde

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Interrupciones Por Software
« Respuesta #4 en: Viernes 18 de Abril de 2008, 17:43 »
0
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...

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Interrupciones Por Software
« Respuesta #5 en: Viernes 18 de Abril de 2008, 22:51 »
0
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



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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.