【问题标题】:My attributes are way too racy, what should I do?我的属性太骚了,我该怎么办?
【发布时间】:2016-08-16 18:29:07
【问题描述】:

在 linux 设备驱动程序中,在 probe 中创建 sysfs 属性太不自然了——特别是 it experiences a race condition with userspace。推荐的解决方法是将您的属性添加到各种默认属性组,以便在探测之前自动创建它们。对于设备驱动程序,struct device_driver 包含用于此目的的 const struct attribute_group **groups

但是,struct attribute_group 只获得了二进制属性 in Linux 3.11 的字段。对于较旧的内核(特别是 3.4),设备驱动程序应如何在探测之前创建 sysfs 二进制属性?

【问题讨论】:

  • 哦,你应该给它一点,看看你有多少眼球......
  • @Will 恢复了...让我们试一试。
  • @RadLexus 您可能会注意到该博客文章实际上是我问题中的第一个链接...
  • 也许没有办法做到这一点,因为merge comment itself 说:“还有创建二进制文件作为属性组的能力,以解决这种竞争条件,这是以前不可能做到的这个,所以驱动坏了是我的错。”
  • @RomanKhimov 这似乎是一个相当权威的消息来源,可以说“这是不可能的”。提交作为答案,我会接受。

标签: linux-kernel linux-device-driver race-condition sysfs


【解决方案1】:

引用(强调我的)Greg Kroah-Hartman 来自他的 comment to a merge requestwas mergedLinus 作为 3.11 开发周期的一部分):

这里有一些 3.11-rc2 的驱动核心补丁。他们不是真的 错误修复,但为驱动程序提供了一系列新的帮助宏 创建属性组,驱动程序和子系统需要修复 错误创建 sysfs 文件(二进制和 正常)在用户空间被告知设备存在之后。

这也是将二进制文件创建为属性组的能力,以解决这种竞争条件,这在此之前是不可能做到的,所以这是我的错,驱动程序被破坏了。

所以看起来确实没有办法在旧内核上解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-01
    • 2011-06-28
    • 2015-10-12
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    相关资源
    最近更新 更多