2014-07-22 2 views
1

Я пишу модуль ядра, которому необходимо выполнить эквивалент ioctl на другом устройстве («целевом» устройстве). Целевое устройство - это устройство ввода, которое монтируется в dev/something.Получение ссылки на устройство ввода из модуля ядра

Я знаю, что одним из способов сделать это было бы открыть целевое устройство из моего модуля, а затем просто вызвать ioctl, как описано в this SO question. Однако я понимаю, что это взломать и что, вероятно, лучший способ.

Возможно ли получить из модуля моего ядра модуль struct *input_dev с указанием имени целевого модуля или точки подключения целевого устройства?

+0

Зачем нужен ваш код в качестве модуля ядра? –

+0

Помогло бы оно, если бы оно было встроено в ядро? Я вижу ту же проблему. – Grodriguez

+0

Извините; зачем нужен ваш код в ядре? –

ответ

1

Вариант 1: Первый вариант открытия вашего целевого устройства - лучший вариант. Я сделал то же самое 2-3 раза в прошлом. Но здесь он работает только после установки файловой системы, и тогда ваш тестовый модуль может открыть этот модуль.

struct file* test; 
test = filp_open("/dev/targetDevice",O_RDWR,0); 

Сейчас в IOCTL вызова

test->f_op->unlocked_ioctl(test,IOCTL_MACRO,params); 

Option2:

Другое решение я имею в виду это, если целевой модуль находится под вашим контролем, то из этого целевого модуля делают этот указатель в качестве EXPORT_SYMBOL() и получить доступ к этому в вашем тестовом модуле.

Вариант3:

Другого варианта вместо экспорта указателя этой структуры просто экспортировать любую функцию целевого модуля и выполнить ваш требуется от этой задачи.

+0

Можете ли вы показать пример кода? (кстати, целевой модуль не находится под моим контролем) – Grodriguez

+0

@Grodriguez, если не удается изменить настройки целевого модуля, то оба предложения не являются полезными. –

+0

Зачем мне нужен контроль над целевым модулем, чтобы открыть узел устройства? – Grodriguez

Смежные вопросы