班级和班级装置的用途是什么? [英] What is the purpose of class and class device?
问题描述
我遵循了一些教程,这些教程解释了如何编写Linux内核模块,我有点困惑。即使看了official "documentation",我对概念的理解也很差。
创建字符设备(register_chrdev
)后,我发现使用以下功能组合是很常见的:
class_create
class_device_create
device_create
我不能理解,什么是类、设备和类、设备和驱动程序?
以下哪一项实际负责在/proc/
下创建条目?
推荐答案
我不会深入什么是类或什么是设备(我不是Linux内核专家),而是按如下方式回答问题。
创建字符设备后,您希望能够从用户空间访问它。为此,您需要在/dev
下添加一个设备节点。您可以通过两种方式完成此操作。
使用mknod
手动添加设备节点(旧)
mknod /dev/<name> c <major> <minor>
或
使用udev
要从内核模块通知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没有提供这些机制,但它是一个非常好的来源。
这篇关于班级和班级装置的用途是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!