0

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

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

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

4

1 回答 1

2

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

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

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

于 2016-11-01T19:36:10.800 回答