2009-06-21 24 views
5

Estoy tratando de hacer el comando ioctl a través de Mono framework, pero no puedo encontrar lo que estoy buscando.Usando Linux ioctl con Mono

Estoy tratando de enviar un comando a una tarjeta DVB que tiene un módulo kernel. Espero que alguien pueda vincular o explicar claramente cómo se puede hacer esto. Cualquier ejemplo con Mono usando módulos kernel sería útil, supongo.

Respuesta

3

Mono no contiene un contenedor para ioctl en Mono.Unix, porque los parámetros de llamada ioctl varían mucho y un contenedor así sería casi inútil. Debe declarar DllImport por cada ioctl que necesite.

Probablemente no necesite una biblioteca de ayuda escrita en C, sin embargo, puede necesitarla durante el desarrollo para extraer los valores reales ocultos detrás de diferentes macros de preprocesador de C. Por ejemplo, para ampliar cabecera C:

#define FE_GET_INFO    _IOR('o', 61, struct dvb_frontend_info) 

compilar y ejecutar este helper:

#include <linux/dvb/frontend.h> 
#include <stdio.h> 

int main() 
{ 
    printf("const int FE_GET_INFO = %d;\n", FE_GET_INFO); 
    return 0; 
} 

A short mono mailing list discussion on the topic.

2

ioctl no es compatible con Mono AFAIK. Demasiado OS-specific y la lista de parámetros depende de la solicitud real. Usted podría intentar DLLImport

Interop with Native Libraries

2

Usted debe escribir una biblioteca envoltorio para sus llamadas exactas. Mire cómo Mono.Unix ajusta syscalls (google codesearch para Mono.Unix Syscall.cs) para obtener la idea. Luego, cree un contenedor para cada comando ioctl específico, que usa su propia representación de los datos.

Como dijo jitter: necesitará DLLImportar el ioctl.

1

Compruebe mi similar question, y más tarde la pregunta en el subject. En este caso, estoy tratando de ajustar la interfaz Videl4Linux, que podría ser de su interés.

Realmente sugiero esas lecturas.

Cuestiones relacionadas