Pregunta

Estoy tratando de hacer el comando ioctl a través del marco Mono, pero no puedo encontrar lo que estoy buscando.

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

¿Fue útil?

Solución

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

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

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

compila y ejecuta este asistente:

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

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

Una breve discusión de la lista de correo mono sobre el tema .

Otros consejos

ioctl no es compatible con Mono AFAIK. Demasiado específico del sistema operativo y la lista de parámetros depende de la solicitud real. Puede probar DLLImport

Interoperabilidad con bibliotecas nativas

Debería escribir una biblioteca contenedor para sus llamadas exactas. Mire cómo Mono.Unix envuelve syscalls (google codesearch para Mono.Unix Syscall.cs) para tener la idea. Luego, cree un contenedor para cada comando ioctl específico, que utiliza su propia representación de los datos.

Como dijo jitter, necesitará DLLImportar el ioctl mismo.

Busque mi pregunta similar , y una pregunta posterior sobre la subject . En este caso, estoy tratando de ajustar la interfaz de Videl4Linux, eso podría ser de su interés.

Realmente sugiero esas lecturas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top