如何从内核模块访问(打开/读取/ etc)/ dev设备?

时间:2011-11-18 11:35:55

标签: linux-kernel device kernel-module can-bus rtai

我收到了一个驱动程序(PCI卡的PCAN驱动程序,使用rtdm),它创建了/ dev / pcan0,并且/ dev / pcan1被编译为netdev驱动程序。

此驱动程序附带了许多工具,但它们都是针对读取CAN消息的用户级程序。但我需要从内核模块中读取这些消息。 PCAN驱动程序不会导出任何变量/函数,这意味着它不会为我提供内核级API。

我简要地查看了代码并从/ dev设备读取并写入它不使用copy_from_usercopy_to_user。因此,我认为从我的内核模块打开/ dev / pcan0并从中读取它应该是安全的。

现在我的问题是,如何从内核模块中打开/读取/ dev设备?

P.S。我想从RTAI实时线程中读取CAN总线,您认为这会导致问题(例如每次读取都通过Linux内核从而破坏实时条件吗?)

2 个答案:

答案 0 :(得分:3)

您可以直接从内核空间使用系统调用:sys_open(),sys_read(),sys_close()。 关于那个问题Linuxjournal article

P / S:copy_from_user()与内核空间地址完美配合。

答案 1 :(得分:0)

鉴于我使用的是RTDM,有两种选择:

  • 使用RTDM直接函数,例如rt_dev_open,rt_dev_read等
    • 当前版本的pcan driver
    • 中未实现此功能
  • 使用RTDM ioctl
    • 这是解决方案而且有效