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通常是不相关的.