Как получить доступ (открыть / прочитать / и т. Д.) К устройствам / dev из модуля ядра? - PullRequest
2 голосов
/ 18 ноября 2011

Я получил драйвер (драйвер PCAN для PCI-карты, использующий rtdm), который создает / dev / pcan0 и / dev / pcan1 скомпилирован как драйвер netdev.

Существует множество средств, которые поставляются сэтот драйвер, но все они предназначены для программы уровня пользователя, читающей сообщения CAN.Однако мне нужно прочитать эти сообщения из модуля ядра.Драйвер PCAN не экспортирует никакие переменные / функции, а это значит, что он не предоставляет API уровня ядра, который я могу использовать.

Я кратко рассмотрел код, читал с устройства / dev и писал вон не использует copy_from_user или copy_to_user.Поэтому я подумал, что для меня было бы безопасно открыть / dev / pcan0 из моего модуля ядра и прочитать из него.

Теперь мой вопрос, как мне открыть / прочитать с устройства / dev смодуль ядра?

PS Я хочу читать с шины CAN из потока реального времени RTAI. Как вы думаете, это может вызвать проблемы (например, при каждом чтении, проходящем через ядро ​​Linux и, следовательно, нарушающем условия реального времени)??)

Ответы [ 2 ]

3 голосов
/ 18 ноября 2011

Вы можете использовать системные вызовы непосредственно из пространства ядра: sys_open (), sys_read (), sys_close ().Об этом есть статья в Linuxjournal .

P / S: copy_from_user () отлично работает с адресами пространства ядра.

0 голосов
/ 22 ноября 2011

Учитывая, что я использовал RTDM, было два варианта:

  • Использование прямых функций RTDM, таких как rt_dev_open, rt_dev_read и т. Д.
    • Это не реализовано в текущей версии драйвера pcan
  • Использование RTDM ioctl
    • Это было решением, и оно сработало
...