linux驱动程序中的struct文件

Mir*_*Mir 11 c linux kernel driver linux-device-driver

我目前正在学习如何编写Linux设备驱动程序,我无法理解" struct file ".我正在使用Linux设备驱动程序第3版这本书来帮助我.

这就是我的理解.

一个.struct file表示一个打开的文件,因此,当在设备驱动程序模块中调用open时,内核将创建一个包含与设备驱动程序相关的所有内容的struct文件.

湾 如果要传递设备驱动程序的这个实例,那么必须在open()之后将指针传递给内核创建 的特定struct文件

C.file-> private_data将始终返回指向设备的指针.

与此相关的另一个问题是字段" f_pos ".该书说如果想知道文件中的当前位置,驱动程序可以读取该值.这是我从中理解的.

d.如果struct foo_dev以及此驱动程序用于存储数据的内存总量为X,则f_pos指向驱动程序保留的该内存块中的当前位置.

我理解的是多少是对的,请在我错的地方纠正我.

谢谢,
米尔

小智 15

struct文件由内核创建,代表设备的内核视图,允许内核从文件句柄映射到设备.

该结构文件仅包含内核上层需要的数据,这是不太可能你需要为你的驱动程序,如果需要额外的存储空间来跟踪你的设备的状态(通常你会)你需要分配的内存的结构一切当你检测到你的硬件时,你自己要么处于打开功能,要么更正常.

如果你确实分配了存储,那么你可以使用file-> private_data来允许你从通过read/write/etc传递给你的驱动程序的struct文件到你的结构.

如何使用file-> private_data取决于驱动程序,内核不会触及它.它就在那里供司机使用.

f_pos字段是内核的遗留物,使用相同的结构文件来存储设备和文件.这是一个索引文件是下一个操作会发生,这取决于您的设备上,如果这是有道理的,如果你的设备支持某种形式的随机访问(比如冲压设备),然后使用f_pos和执行lseek的可能是有意义的,如果你的硬件是顺序的,那么f_pos通常是不相关的.