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

标签 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 设备?

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

最佳答案

您可以直接从内核空间使用系统调用:sys_open()、sys_read()、sys_close()。 有Linuxjournal article关于这一点。

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

关于linux-kernel - 如何从内核模块访问(打开/读取/等)/dev 设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8181784/

相关文章:

linux - 与计算机上安装的用于添加系统调用的 linux 内核代码相同吗?

linux - 什么 Linux 驱动子系统/API 用于简单的屏幕/监视器设备?

windows - 在 windows xp 上检索详细的 usb midi 设备信息

java - 检测到设备正在关闭?

html - 使用媒体查询时 CSS 在移动设备上不起作用

android - 如何导出结构体成员

linux - 如何只重新编译单个内核模块?

assembly - 为什么linux在entry_SYSCALL_64函数中从rcx寄存器读取ip寄存器?

c - 这段代码中是否存在竞争条件的可能性?

linux - 各种CPU掩码之间的区别 - Linux内核