gpt4 book ai didi

c - Linux驱动程序中的结构文件

转载 作者:IT王子 更新时间:2023-10-28 23:58:39 26 4
gpt4 key购买 nike

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

我是这么理解的。

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

如果你想传递设备驱动程序的这个实例,那么必须传递一个指向特定struct file 的指针,它是由内核在 open() 之后创建的

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

与此相关的另一个问题是字段“f_pos”。书上说,如果驱动程序想知道当前在文件中的位置,可以读取这个值。这是我从中了解到的。

如果 struct foo_dev 并且此驱动程序用于存储数据的内存总量为 X,则 f_pos 指向该 block 中的当前位置驱动程序保留的内存。

我理解的有多少是对的,不对的地方请指正。

谢谢,
和平号

最佳答案

struct file 由内核创建,代表设备的内核 View ,它允许内核从文件句柄映射到设备。

结构文件只包含内核上层需要的数据,这不太可能是你的驱动程序需要的一切,如果你需要额外的存储空间来跟踪你的设备状态(通常你会)你需要分配内存在 open 函数中或更常见的情况下,当您检测到您的硬件时,自己为您的结构。

如果您确实分配了存储空间,那么您可以使用 file->private_data 来允许您从通过读/写/等方式传递给您的驱动程序的结构文件中获取您的结构。

如何使用 file->private_data 取决于驱动程序,内核不会触及它。它只是供司机使用。

f_pos 字段是内核遗留下来的,对设备和文件使用相同的结构文件。如果下一个操作将发生,它是文件的索引,这取决于您的设备是否有意义,如果您的设备支持某种形式的随机访问(比如 ram 设备),那么使用 f_pos 和实现 lseek 可能有意义,如果你的硬件是顺序的,那么 f_pos 通常是无关紧要的。

关于c - Linux驱动程序中的结构文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4653100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com