Написание модуля ядра FreeBSD, который обрабатывает произвольное прерывание и вывод на устройство

Я хотел бы написать модуль ядра FreeBSD, который мог бы принимать некоторые произвольные прерывания и при получении этих прерываний выводить некоторые данные на произвольное устройство. В настоящее время я столкнулся с несколькими проблемами:

  1. Как я могу получать прерывания через определенный IRQ? В Linux есть вызов request_irq(), но, похоже, подобного API для FreeBSD нет... Скажем, я хочу иметь возможность обнаруживать все прерывания клавиатуры через мой модуль ядра (клавиатура на irq1), как мне это сделать? (В Linux это возможно через вызов free_irq(1, NULL) и request_irq(1, ...), поправьте меня, если я ошибаюсь).

  2. Можно ли вообще писать в файл устройства в /dev через модуль ядра? Я прочитал вопрос Пример чтения текстовых файлов в ядре FreeBSD модуль; следуя этому примеру, я смог читать/записывать обычные файлы, но не файл устройства в /dev («устройство» было псевдо "echo device", классический, используемый в примерах char). Однако я смог открыть файл.
    Я понимаю, что выполнение файлового ввода-вывода в ядре считается плохой практикой, но я не мог думать иначе... Если у кого-то есть лучшее решение, пожалуйста скажите мне. (т.е. писать на устройство через его узел device_t?)

Причина, по которой я делал это в ядре, заключается в том, что мне действительно нужно, чтобы все прерывания срабатывали, а запуск его в пользовательском пространстве сопряжен с риском пропуска прерываний из-за того, что потоки ядра вытесняют пользовательские потоки (прерывания могут возникать очень часто).

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


person flasew    schedule 30.06.2017    source источник
comment
Ты очень смелый и мужественный.   -  person ThingyWotsit    schedule 01.07.2017


Ответы (1)