目前我写了一个驱动程序模块,它在sysfs中提供了一些条目。我通过驱动源代码树和互联网读了很多。我发现有两种方法调用sysfs_create_group():
a)最常见的:在驱动程序的probe()函数中。像这里建议How to attach file operations to sysfs attribute in platform driver?
我看了看随机的东西:https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/rtc/rtc-ds1307.c#n1580
B)在驱动程序结构中。http://kroah.com/log/blog/2013/06/26/how-to-create-a-sysfs-file-correctly/的
我知道,Greg KH是一位非常知名的开发人员。所以我试着听从他的建议。在bla_show()/bla_store()函数中,我试图获取我的Driver私有数据,但我的printk()显示的地址与我在probe()函数中打印的地址大不相同。我的私人数据为(null)。这是ofc错了。
当我使用approch a)时,它按预期工作,但正如Greg KH所建议的那样,它也是错误的。我在不同的车手身上看到了很多。Greg写道,用户空间已经收到了有新设备的通知,但LDD 3书指出,探测功能是用来确定设备是否存在的。
总结一下我的问题:
1.为什么要通知用户空间,即使内核不知道它是否可以处理它?
1.在哪里调用sysfs_create_group()?是a)还是B)?
LDD 3:https://static.lwn.net/images/pdf/LDD3/ch14.pdf PDF第24页
probe是一个函数,用于查询特定设备的存在(以及此驱动程序是否可以使用它),remove是在设备从系统中删除时调用的,shutdown是在关机时调用的,以使设备停止。
我比以前更困惑了……
最好的问候Georg
1条答案
按热度按时间5kgi1eie1#
设备驱动程序是控制连接到计算机的特定类型设备的程序。
平台设备本质上是不可发现的,即硬件不能说“嘿!我来了!”的软件。因此,对于这些类型的设备,我们需要一个称为平台驱动程序的驱动程序。驱动程序提供probe()和remove()方法。
字符串
**probe()**通常应验证指定的设备硬件是否确实存在。首先,我们注册我们的司机。一旦它发现设备,它将调用驱动程序探测。它正在使用名称搜索设备。
Ans:您的设备可用,则需要sysfs条目进行通信(到用户空间)。因此从概念上讲,您需要在probe中定义sysfs条目。
sysfs_notify函数,它会唤醒用户空间代码。它将在sysfs可用于用户空间时触发。它只是避免了一个阻塞呼叫。当内核没有sysfs时,它不会通知用户空间。
sysfs是Linux内核提供的虚拟文件系统,通过虚拟文件将内核设备模型中的各种内核子系统、硬件设备和相关设备驱动程序的信息导出到用户空间。当您的设备可用时,您需要此条目来导出您的信息。