Как я могу реализовать собственный дескриптор файла? Скажите, есть ли у меня модуль ядра, контролирующий некоторые аппаратные средства, и я хочу показать возможность взаимодействия с этим оборудованием в пользовательском пространстве с помощью read() и write(). Не хотите использовать методы IOCTL или netlink или другие методы userpace-kernelspace. Нужно ли мне перекомпилировать ядро, или я могу это сделать, просто написав модуль ядра.Реализация дескриптора файла
Я понимаю, что для создания файлового дескриптора потребуется механизм для использования пользователем пространства kernelspace для создания записи в структуре файлов задачи (т.е. функция, эквивалентная функции open(), eventfd() timerfd(), socket()). То, что я могу реализовать через IOCTL (так что мне не придется перекомпилировать ядро), но как мне взломать в read() и write() - я уже исправил их с помощью LD_PRELOAD, это единственный способ? Не хочу перекомпилировать ядро!
Благодарим вас за ответ, @ konrad.kruczynski & John. В настоящее время символьное устройство/ioctl - это способ, которым я реализовал связь между пользовательским пространством и ядерным пространством. Я передаю указатели на структуры данных в KS, используя ioctl, и модуль стороны ядра извлекает данные из этой структуры. Но мне нужна сущность в пользовательском пространстве, на котором я могу использовать select(). Мне нужен способ сигнализировать США, когда происходит событие со стороны ядра. Я знаю, что есть другие способы отправки сигналов в США, но есть ли способ, которым США могут ждать, используя select()? могу ли я использовать select() с символьным устройством? – lithiumhead
Это действительно возможно с помощью ядра apis. см. linux/poll.h, когда запрос поступает из пользовательского пространства, добавьте его в waitqueue и разбудите, если у вас есть данные из драйвера. найдите wake_up_interruptible в папке drivers/char/в источниках ядра. это в конечном итоге улучшает ваш водитель, а также сокращает использование процессора в ожидании ... – John