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

问题描述 投票:0回答:1

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

创建字符设备(

register_chrdev
)后,我发现使用以下函数的组合是很常见的:

class_create

class_device_create

device_create

我无法理解,什么是

class
device
和,
class device
和司机?

其中哪一个实际负责在

/proc/
下创建条目?

linux-kernel linux-device-driver kernel-module device-driver
1个回答
18
投票

而不是进入什么是类,或什么是设备(我不是 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不提供这些机制,但它是一个非常好的来源。

© www.soinside.com 2019 - 2024. All rights reserved.