繁体   English   中英

类和类设备的目的是什么?

[英]What is the purpose of class and class device?

我按照一些教程解释了如何编写Linux内核模块,我有点困惑。 即使在阅读官方“文档”之后 ,我对这些概念的理解也很差。

创建一个字符设备( register_chrdev )后,我发现通常使用以下功能的组合:

class_create

class_device_create

device_create

我无法理解,什么是类,设备和类设备和驱动程序?

其中哪一个实际负责在/proc/下创建一个条目?

我将解决以下问题,而不是进入什么类 ,或者什么是设备 (我不是Linux内核专家)。

创建角色设备后,您希望能够从用户空间访问它。 为此,您需要在/dev下添加设备节点。 你可以用两种方式做到这一点。

使用mknod手动添加设备节点(旧)

mknod /dev/<name> c <major> <minor>

要么

使用udev

这是class_createdevice_createclass_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不提供这些机制,但它是一个非常好的来源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM