elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Comandos puertos I/O
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Comandos puertos I/O  (Leído 5,019 veces)
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Comandos puertos I/O
« en: 4 Julio 2013, 11:05 am »

Hola

En un tema anterior hable de como obtener valores del teclado a traves del puerto de entrada.
Ahora me gustaria intentar comunicarme con algun dispositivo mas complejo, pero el problema es que no se que comandos enviar o como comunicarme con el.

Aqui estan los del teclado y el raton.

Código:
http://www.win.tue.nl/~aeb/linux/kbd/scancodes-11.html

Tendra que a ver algo parecido para los distintos dispositivos no?

Unos cuantos dispositivos y sus puertos que saque de ioport.

Código:
1000-1003 : ACPI PM1a_EVT_BLK
1004-1005 : ACPI PM1a_CNT_BLK
1008-100b : ACPI PM_TMR
1010-1015 : ACPI CPU throttle
1020-1020 : ACPI PM2_CNT_BLK
1028-102f : ACPI GPE0_BLK
4000-40ff : 8139too
4400-44ff : PCI CardBus 0000:07
4800-48ff : PCI CardBus 0000:07
5000-5fff : PCI Bus 0000:02

Me interesan todos pero el que mas es 8139too, es el dispositivo ethernet. Cualquier ayuda es bienvenida.

Y ya que estoy les pregunto esto, se puede construir un paquete ya sea TCP, ICMP, UDP y enviarlo a traves del puerto ethernet, como la API send, connect etc...

Un saludo.

P.D: Siento las faltas de ortografia, teclado distinto.


En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Comandos puertos I/O
« Respuesta #1 en: 18 Julio 2013, 03:09 am »

Este fragmento de codigo es una funcion de un controlador, sacado de ipxe.

Código:
/**************************************************************************
ETH_TRANSMIT - Transmit a frame
***************************************************************************/
static char padmap[] = {
0, 3, 2, 1};

static void t595_transmit(
struct nic *nic,
const char *d, /* Destination */
unsigned int t, /* Type */
unsigned int s, /* size */
const char *p) /* Packet */
{
register int len;
int pad;
int status;

#ifdef EDEBUG
printf("{l=%d,t=%hX}",s+ETH_HLEN,t);
#endif

/* swap bytes of type */
t= htons(t);

len=s+ETH_HLEN; /* actual length of packet */
pad = padmap[len & 3];

/*
* The 3c595 automatically pads short packets to minimum ethernet length,
* but we drop packets that are too large. Perhaps we should truncate
* them instead?
*/
if (len + pad > ETH_FRAME_LEN) {
return;
}

/* drop acknowledgements */
while(( status=inb(BASE + VX_W1_TX_STATUS) )& TXS_COMPLETE ) {
if(status & (TXS_UNDERRUN|TXS_MAX_COLLISION|TXS_STATUS_OVERFLOW)) {
outw(TX_RESET, BASE + VX_COMMAND);
outw(TX_ENABLE, BASE + VX_COMMAND);
}

outb(0x0, BASE + VX_W1_TX_STATUS);
}

while (inw(BASE + VX_W1_FREE_TX) < len + pad + 4) {
/* no room in FIFO */
}

outw(len, BASE + VX_W1_TX_PIO_WR_1);
outw(0x0, BASE + VX_W1_TX_PIO_WR_1); /* Second dword meaningless */

/* write packet */
outsw(BASE + VX_W1_TX_PIO_WR_1, d, ETH_ALEN/2);
outsw(BASE + VX_W1_TX_PIO_WR_1, nic->node_addr, ETH_ALEN/2);
outw(t, BASE + VX_W1_TX_PIO_WR_1);
outsw(BASE + VX_W1_TX_PIO_WR_1, p, s / 2);
if (s & 1)
outb(*(p+s - 1), BASE + VX_W1_TX_PIO_WR_1);

while (pad--)
outb(0, BASE + VX_W1_TX_PIO_WR_1); /* Padding */

        /* wait for Tx complete */
        while((inw(BASE + VX_STATUS) & S_COMMAND_IN_PROGRESS) != 0)
                ;
}

Las definiciones son en hex estan en un .h, como puedo saber todas esas especificaciones de mi tarjeta, hay algun libro o algo completo sobre esta programacion?

Algo entiendo, pero me gustaria saber como funciona del todo, estoy algo quemado.

Un saludo.


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Comandos puertos I/O
« Respuesta #2 en: 18 Julio 2013, 13:34 pm »

Eso es algo que te tiene que proporcionar el fabricante... el que fabrica la tarjeta es el que conoce todos los entresijos de dicha tarjeta.

Otra opción es usar ( si la tarjeta dispone de esta posibilidad ) del protocolo estándar para el caso, por ejemplo el de comunicación por usb o el de las tarjetas gráficas... no podrás obtener toda la potencia del hardware usando este mecanismo pero desde luego la programación será más sencilla y estará mejor documentada.
En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Comandos puertos I/O
« Respuesta #3 en: 18 Julio 2013, 20:16 pm »

Eso es algo que te tiene que proporcionar el fabricante... el que fabrica la tarjeta es el que conoce todos los entresijos de dicha tarjeta.

Buscare en la web del fabricante, en algunos codigos se hace referencia de algunos documentos sobre eso mismo.

Otra opción es usar ( si la tarjeta dispone de esta posibilidad ) del protocolo estándar para el caso, por ejemplo el de comunicación por usb o el de las tarjetas gráficas... no podrás obtener toda la potencia del hardware usando este mecanismo pero desde luego la programación será más sencilla y estará mejor documentada.

Pues no lose, si con estandar te refieras a dispositivos como el teclado que todos se controlan a traves de los puertos 0x60 y 0x64, buscare documentacion sobre la tarjeta grafica y el usb, si tienes algo pasalo pero que no sea un link de la primera pagina de google. Pero esta claro de que esa funcion no esta hecha con ese estandar que comentas.

Como dije anteriormente el codigo lo entiendo bastante, ya que es un C muy puro, lo que no entiendo son los puertos y los valores que usa, para comunicarse, es esa la informacion que busco.

Un saludo.
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Comandos puertos I/O
« Respuesta #4 en: 21 Julio 2013, 00:29 am »

Desgraciadamente no dispongo de esa documentación... no me dedico a programar a ese nivel.

Lo que está claro que a no ser que el fabricante te proporcione el datasheet de la tarjeta, donde se detallará toda la información que necesitas, te toca patearte foros en inglés para ir recabando información.

También puede ser que esos datasheet tengas que comprarlos, como te digo, desconozco como está el mercado en este tema.
En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Comandos puertos I/O
« Respuesta #5 en: 22 Julio 2013, 21:16 pm »

Ya e leido el datasheet de mi tarjeta, una imagen del chip con los pins enumerados, y al lado su simbolo, despues hay tablas con los pins su simbolo y la descripcion.

Lo que está claro que a no ser que el fabricante te proporcione el datasheet de la tarjeta, donde se detallará toda la información que necesitas, te toca patearte foros en inglés para ir recabando información.

Aunque no te dediques a esta programacion, sabes de algun buen foro especializado en estos temas?

Un saludo.
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Comandos puertos I/O
« Respuesta #6 en: 23 Julio 2013, 09:11 am »

Ya e leido el datasheet de mi tarjeta, una imagen del chip con los pins enumerados, y al lado su simbolo, despues hay tablas con los pins su simbolo y la descripcion.

Y no dice nada de las operaciones de lectura / escritura sobre la tarjeta ??

si no es así ya te digo yo que el datasheet que tienes o no está completo o tiene que haber otro por con esa parte de la documentación.

Es como si el datasheet de una USART no te dijese cual es la forma de enviar y/o recibir información.
En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Comandos puertos I/O
« Respuesta #7 en: 23 Julio 2013, 22:15 pm »

Esto es lo que encontre, no puedo descargarlos desde la pagina de realtek, ya que tengo que ser socio.

No es una 3c595 si no una rtl8168, tambien hay unos diagramas pero nada de codigo, ni de puertos ni nada por el estilo.

Código:
http://www.datasheetarchive.com/RTL8168-datasheet.html

A ver si puedes echarme un cable.

Un saludo.
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Comandos puertos I/O
« Respuesta #8 en: 24 Julio 2013, 09:14 am »

Lo que estás mirando es el datasheet del chip... no el de la tarjeta.

En la tarjeta que tienes el chip al que se refiere el datasheet estará rodeado por otros componentes electrónicos que se encargan de configurar y dar vida al dispositivo.

El datasheet de un chip no entiende de interrupciones y puertos por la sencilla razón de que un chip, por si solo, nunca hace nada util... necesita una configuración externa de hardware para cumplir la tarea de una forma determinada... y es ese hardware externo el que determina si tu tarjeta responde a una interrupción determinada o si te va a devolver datos en el puerto X.

Los diagramas que ves se corresponden con la configuración eléctrica de las señales ( los tiempos y frecuencias ) que se dan ( o se han de dar ) para un correcto funcionamiento del chip.

Por lo que he visto ese chip es para una tarjeta ethernet... Quizás debieras mirar información sobre comunicación con sockets vía ensamblador... supongo que las tarjetas ethernet tendrán todas una interfaz común... si no la tienen entonces es bastante posible que sea el sistema operativo el que te proporcione esa interfaz común y se encargue él de comunicarse con la tarjeta.
En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Comandos puertos I/O
« Respuesta #9 en: 25 Julio 2013, 08:06 am »

Por lo que he visto ese chip es para una tarjeta ethernet... Quizás debieras mirar información sobre comunicación con sockets vía ensamblador...

Te refieres a la API del sistema, socket, connect etc...

supongo que las tarjetas ethernet tendrán todas una interfaz común... si no la tienen entonces es bastante posible que sea el sistema operativo el que te proporcione esa interfaz común y se encargue él de comunicarse con la tarjeta.

Puede ser, estoy leyendo algunos codigos del nucleo y los controladores tienen en comun estas librerias y estructuras.

mbuf - Kernel memory management for networking protocols.
ifnet -  Kernel interface for manipulating network interfaces.

Tendre que mirar mejor esos dos apartados. Ya te comentare algo gracias por la ayuda.

Un saludo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Diferencias entre puertos del router y puertos del ordenador?
Redes
avmiitxe 4 6,714 Último mensaje 11 Septiembre 2011, 18:00 pm
por int_0x40
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines