2

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

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

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

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

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

4

2 回答 2

3

您可以直接从内核空间使用系统调用:sys_open()、sys_read()、sys_close()。有Linuxjournal 文章关于它。

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

于 2011-11-18T11:42:03.697 回答
0

Given that I was using RTDM, there were two options:

  • Using RTDM direct functions, such rt_dev_open, rt_dev_read etc
    • This is not implemented in the current version of pcan driver
  • Using RTDM ioctl
    • This was the solution and it worked
于 2011-11-22T16:03:49.913 回答