Вопрос

Я пытаюсь выполнить команду ioctl через платформу Mono, но не могу найти то, что ищу.

Я пытаюсь отправить команду на DVB-карту с модулем ядра. Я надеюсь, что кто-то может связать или объяснить, как это можно сделать. Я думаю, что любой пример с Mono с использованием модулей ядра был бы полезен.

Это было полезно?

Решение

Mono не содержит оболочки для ioctl в Mono.Unix, потому что параметры вызова ioctl сильно различаются, и такая оболочка будет почти бесполезной. Вы должны объявить DllImport для каждого ioctl, который вам нужен.

Возможно, вам не нужна вспомогательная библиотека, написанная на C, однако она может понадобиться вам во время разработки для извлечения фактических значений, скрытых за разными макросами препроцессора C. Например, чтобы развернуть заголовок C:

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

скомпилируйте и выполните этот помощник:

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

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

Краткое обсуждение в моно рассылке по этой теме .

Другие советы

Вы должны написать библиотеку-оболочку для ваших точных вызовов. Посмотрите, как Mono.Unix оборачивает системные вызовы (поиск кода Google для Mono.Unix Syscall.cs), чтобы понять эту идею. Затем создайте оболочку для каждой конкретной команды ioctl, которая использует ваше собственное представление данных.

Как сказал jitter - вам нужно DLLImport самого ioctl.

Проверьте мой похожий вопрос и более поздний вопрос по subject . В этом случае я пытаюсь обернуть интерфейс Videl4Linux, который может вас заинтересовать.

Я действительно предлагаю эти чтения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top