我收到了一个驱动程序(PCI卡的PCAN驱动程序,使用rtdm),它创建了/ dev / pcan0,并且/ dev / pcan1被编译为netdev驱动程序。
此驱动程序附带了许多工具,但它们都是针对读取CAN消息的用户级程序。但我需要从内核模块中读取这些消息。 PCAN驱动程序不会导出任何变量/函数,这意味着它不会为我提供内核级API。
我简要地查看了代码并从/ dev设备读取并写入它不使用copy_from_user
或copy_to_user
。因此,我认为从我的内核模块打开/ dev / pcan0并从中读取它应该是安全的。
现在我的问题是,如何从内核模块中打开/读取/ dev设备?
P.S。我想从RTAI实时线程中读取CAN总线,您认为这会导致问题(例如每次读取都通过Linux内核从而破坏实时条件吗?)
答案 0 :(得分:3)
您可以直接从内核空间使用系统调用:sys_open(),sys_read(),sys_close()。 关于那个问题Linuxjournal article。
P / S:copy_from_user()与内核空间地址完美配合。
答案 1 :(得分:0)
鉴于我使用的是RTDM,有两种选择: