2011-11-18 102 views
2

我收到一个驱动程序(用于PCI卡的PCAN驱动程序,使用rtdm),它创建了/ dev/pcan0,/ dev/pcan1被编译为netdev驱动程序。如何从内核模块访问(打开/读取/ etc)/ dev设备?

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

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

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

P.S.我想从RTAI实时线程读取CAN总线,你认为这会导致一个问题(例如每次读取通过Linux内核并因此破坏实时条件?)

+0

潜在有用:http://www.linuxjournal.com/article/8110?page=0,0 – sarnold

回答

0

鉴于我是用RTDM,有两个选择:

  • 使用RTDM直接的功能,例如rt_dev_open,rt_dev_read等
    • 这不是在PCAN司机
    的当前版本中实现
  • 使用RTDM的ioctl
    • 这是解决方案,它的工作
3

您可以使用系统调用直接来自内核空间:sys_open(),sys_read(),sys_close()。 有关于这个的Linuxjournal article

P/S:copy_from_user()与内核空间地址完美协同工作。

+0

感谢您的'copy_from_user'提示。 – Shahbaz

+0

我知道在内核空间打开一个文件并不是一个好主意,但我认为在/ dev/devices中这样做不是一件坏事 – Shahbaz

+0

我的意思是,/ dev开放/读/写操作基本上归结为到驱动程序的函数调用。但是,谢谢,我会试着想出一个不同的解决方案 – Shahbaz

相关问题