我希望存储每个节点(/dev/foo[1-99])的特定数据,因为我希望将每个节点映射到特定的HW。
我开始使用file->private_data,但每次打开的调用都将其设置为NULL。
是否有类似的东西可以在open()调用之间持久存在?
发布于 2016-11-01 19:36:10
您的问题的答案是"No“(某种程度上),但是您误解了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值的范围是持久的,直到它注销它们(然后它将不再看到它们!)。
https://stackoverflow.com/questions/40365910
复制相似问题