目前我编写了一个驱动程序模块,它在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/
我知道,格雷格是一个非常有名的开发商。所以我试着听从他的建议。在bla_show()/bla_store()函数中,我试图获取驱动程序的私有数据,但是printk()显示的地址与probe()函数中显示的地址大不相同。我的私人数据为(空)。这是错误的。
当我使用方法a)时,它可以按预期工作,但正如格雷格·克所说,它也错了。我在马厩的树上看到很多不同的司机。格雷格写道,用户空间已经收到了有新设备的通知,但ldd3的书上说,探测功能在那里,以确定设备是否存在。
总结一下我的问题:
为什么要通知用户空间,即使内核不知道它是否可以处理它?
调用sysfs_create_group()的正确位置是哪里?是a)还是b)?
LDD3:https://static.lwn.net/images/pdf/LDD3/ch14.pdf
PDF第24页
探针是用来查询特定设备的存在的函数。
(以及这个驱动程序是否可以使用它),当
从系统中删除设备,并在关机时调用关机
是时候让设备安静了。
我比以前更困惑…
致意
乔治
最佳答案
设备驱动程序是一个程序,它控制连接到计算机的特定类型的设备。
平台设备本质上是不可发现的,即硬件不能说“嘿!我在场!”到软件。因此,对于这种设备,我们需要一个称为平台驱动程序的驱动程序。驱动程序提供probe()和remove()方法。
struct platform_driver {
int (*probe)(struct platform_device *);
int (*remove)(struct platform_device *);
.
.
struct device_driver driver;// this file has 2 parameter name or owner.
};
probe()通常应验证指定的设备硬件
实际上存在。首先我们登记我们的司机。一旦找到设备,它就会调用驱动程序探测器。它使用名称搜索设备。
答:您的设备可用,那么您需要sysfs条目进行通信(到用户空间)。所以在概念上,您需要在probe中定义sysfs条目。
属性上的sys_notify函数,它将导致用户空间代码唤醒。它将在sysfs可用于用户空间时触发。它只是避免了阻塞呼叫。当内核没有sysfs时,它不会通知用户空间。
sysfs是linux内核提供的一个虚拟文件系统,它通过虚拟文件将有关各种内核子系统、硬件设备和相关设备驱动程序的信息从内核的设备模型导出到用户空间。当你的设备可用时,你需要这个条目来导出你的信息。
关于linux - sysfs_create_group():在哪里调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37838328/