我按照一些教程解释了如何编写Linux内核模块,我有点困惑。即使在阅读official "documentation"之后,我也对这些概念了解不足。
创建角色设备(register_chrdev
)后,我发现通常使用以下功能的组合:
class_create
class_device_create
device_create
我无法理解,什么是类,设备和类设备和驱动程序?
其中哪一个实际负责在/proc/
下创建条目?
答案 0 :(得分:3)
而不是进入 什么是类 ,或 什么是设备 (我不是专家Linux内核),我将解决如下问题。
创建角色设备后,您希望能够从用户空间访问它。为此,您需要在/dev
下添加设备节点。你可以用两种方式做到这一点。
使用mknod
手动添加设备节点(旧)
mknod /dev/<name> c <major> <minor>
OR
使用udev
这是class_create和device_create或class_device_create(旧)进来的地方。
要从内核模块通知udev
,首先要使用
struct class * class_create(owner, name)
现在,该名称将显示在/sys/class/<name>
。
然后,创建一个设备并使用sysfs注册它。
struct device *device_create(struct class *class, struct device *parent,
dev_t devt, void *drvdata, const char *fmt, ...)
现在,设备名称将显示在/sys/devices/virtual/<class name>/<device name>
和/dev/<device name>
目前尚不清楚您对/proc
条目的要求。
加载模块后,它会显示在/proc/modules
中(执行cat /proc/modules
查看)。并且,在您分配设备编号后,请使用
int register_chrdev_region(dev_t first, unsigned int count, char *name)
,该名称将显示在/proc/devices
中(请cat /proc/devices
查看)。
并且,请查看这些函数的内核源代码,因为它们可以很好地描述他们在评论中所做的工作。
好老LDD3没有提供这些机制,但它是一个非常好的来源。