班级和班级装置的用途是什么? [英] What is the purpose of class and class device?

查看:22
本文介绍了班级和班级装置的用途是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遵循了一些教程,这些教程解释了如何编写Linux内核模块,我有点困惑。即使看了official "documentation",我对概念的理解也很差。

创建字符设备(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没有提供这些机制,但它是一个非常好的来源。

这篇关于班级和班级装置的用途是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆