Linux驱动程序中的struct文件

By simon at 2018-02-28 • 0人收藏 • 70人看过

我目前正在学习如何编写Linux设备驱动程序,并遇到麻烦 理解“结构文件”。我正在使用book Linux设备驱动程序 第三版帮助我。 这就是我所理解的。 一个。 * struct file 代表一个打开的文件,当打开被调用时 设备驱动程序模块,内核将创建一个包含的结构文件 一切与d有关设备驱动。 湾如果你想传递这个设备驱动程序的实例,那么就有一个 传递一个指向特定的指针由struct创建的结构文件* 内核打开后() C。 文件 - > privatedata **将始终返回指向设备的指针。 与此相关的另一个问题是“ fpos ”字段。这本书说 如果驱动程序愿意,可以读取该值知道当前的位置 在文件中。这是我从中理解的。 d。如果 struct foodev 和如果我的总数这个驱动程序使用的mory 存储数据是 _ X _ **,然后fpos指向当前位置 由...保留的内存块司机。 我理解多少是正确的,请纠正我错误的地方。 谢谢, 米尔

2 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

结构文件由内核创建并表示内核视图 你的设备允许内核映射文件处理设备。 struct文件只包含内核上层需要的数据,这是 不太可能成为一切如果您需要额外的存储空间,则需要您的驱动程序 跟踪您的设备状态(通常您会),您需要分配thË 记忆为您的结构自己或者在打开的功能或更多 通常当你检测你的硬件时。 如果你做分配吃了存储然后你可以使用文件 - > privatedata来允许 你可以从读取传递给驱动程序的结构文件中获得/写/ 等你的结构。 如何使用file-> privatedata取决于驱动程序,内核不会 触摸它。只是那里的司机使用。 fpos字段是来自内核的使用相同结构文件的遗留文件 设备和文件。它是一个下一个操作会将n个索引放入一个文件中 如果您的设备支持,这取决于您的设备是否合理某种形式的随机访问(比如RAM设备),然后使用fpos和 如果你的硬件是seque,那么实现lseek可能是有道理的然后是f_pos 通常是不相关的。

2018-02-28   #2

这是安德鲁所说的... a)struct FILE是由内核提供的,但它的意思是作为一个接口 柯rnel和一个应用程序。 b)换句话说,你不能在多个文件之间传递FILE结构 共享应用程序device。唯一可能的例外 分享是父母与子女之间的过程。访问设备或设备 司机同时从多个应用程序,每个应用程序。必须 调用在设备上打开并创建它自己的FILE结构。这取决于 驱动程序是否允许同时访问。内核在这里没有发言权。 c)private_data正是它说。设备驱动程序专用的数据。 应用程序或库可以使用此字段来传递非常的数据 具体为设备驱动程序。

登录后方可回帖

Loading...