【问题标题】:Device driver Node specific private data设备驱动程序节点特定的私有数据
【发布时间】:2016-11-01 18:03:13
【问题描述】:

我想为每个节点 (/dev/foo[1-99]) 存储一个特定的数据,因为我想将每个节点映射到一个特定的硬件。

我开始使用 file->private_data,但每次调用 open 都将其设置为 NULL

open() 调用之间是否有类似的东西可以持续存在?

【问题讨论】:

    标签: linux-kernel linux-device-driver device-driver mknod


    【解决方案1】:

    您的问题的答案是“否”(有点),但您误解了file->private_data 的用法。您可以在 open 文件操作处理程序中设置它,以便您的其他文件操作处理程序函数稍后可以使用它。您的open 文件操作处理程序可以使用inode->i_rdev 中的设备号来决定打开您的哪些硬件设备,并将file->private_data 设置为指向该设备的私有数据结构。

    请注意,inode->i_rdev 是“主要”和“次要”设备编号的组合。您可以使用MAJOR(inode->i_rdev)imajor(inode) 提取主要部分,使用MINOR(inode->i_rdev)iminor(inode) 提取次要部分。这种主要/次要拆分可能对您有用,也可能对您没有用,具体取决于您注册设备的方式。在任何情况下,您的驱动程序都会注册一个设备编号范围,并且inode->i_rdev 值将在该范围内。

    我第一段中的“(某种)”是因为您的驱动程序看到的inode->i_rdev 值的范围持久的,直到它取消注册它们(然后它将不再看到它们! )。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 2017-01-20
      • 2018-05-13
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多