【发布时间】:2016-10-16 17:44:41
【问题描述】:
目前我编写了一个驱动模块,它在 sysfs 中提供了一些条目。我通过驱动程序源代码树和互联网阅读了很多内容。我发现了两个调用 sysfs_create_group() 的方法:
a) 最常见:在 Driver 的 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() 函数中,我试图获取我的驱动程序私有数据,但我的 printk() 显示的地址与我在 probe() 函数中打印的地址大不相同。我的私人数据是(空)。这是错误的。
当我使用 approch a) 时,它按预期工作,但正如 Greg KH 所暗示的那样,它也是错误的。我在不同驱动程序的稳定树中看到了很多。 Greg 写道,用户空间已经收到通知说有一个新设备,但是 LDD3 书指出,探测功能在那里确定设备是否存在。
总结一下我的问题:
- 为什么要通知用户空间,即使内核不知道它是否可以处理它?
- 调用 sysfs_create_group() 的正确位置在哪里?是 a) 还是 b)?
LDD3:https://static.lwn.net/images/pdf/LDD3/ch14.pdf PDF 第 24 页
probe 是一个调用来查询特定设备是否存在的函数 (以及此驱动程序是否可以使用它),当 设备从系统中删除,并在关机时调用关机 是时候让设备静默了。
我比以前更糊涂了.....
最好的问候 乔治
【问题讨论】:
标签: linux linux-device-driver sysfs