我遵循了一些教程,这些教程解释了如何编写Linux内核模块,我有点困惑。即使阅读了官方的"文档",我对概念的理解也很差。
创建角色设备(register_chrdev
(后,我认为使用以下功能的组合是常见的:
class_create
class_device_create
device_create
我无法理解,什么是类,设备以及类设备和驱动程序?
实际上哪一个负责在/proc/
下创建条目?
,而不是进入什么是class ,或什么是设备(我不是Linux内核的专家(,我将解决以下问题。
创建角色设备后,您希望能够从用户空间访问它。为此,您需要在/dev
下添加设备节点。您可以通过两种方式执行此操作。
使用mknod
手动添加设备节点(旧(
mknod /dev/<name> c <major> <minor>
或
使用udev
这是class_create和device_create或class_device_create(old(进来的地方。
要从内核模块通知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没有提供这些机制,但它是一个很好的来源。