设备驱动程序节点特定的私有数据

Device driver Node specific private data

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

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

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

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

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

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