在Linux中,如果我为多个设备编写驱动程序,应用程序在使用设备时如何找到自己的驱动程序

问题描述 投票:0回答:1

在Linux中,我用file_operations结构体编写了一个设备驱动程序,当我编写应用程序时,我想用open函数打开一个文件,并使用我编写的file_operations中的open驱动程序函数。我很好奇它如何在我的程序中找到 file_operations 中的 open 函数,而不是另一个程序中 file_operations 中的 open 函数

这就是我要表达的中文意思 在Linux中,我用file_operations结构体写好了一个设备的驱动程序,当我编写一个应用程序时,想用open函数打开文件时使用我编写的file_operations中的open驱动函数,我很好奇是怎么回事去找到我写的程序中的file_operations中的open函数,而不是其他程序中的file_operations中的open函数

我去看了一些 file_operations 内核源代码,但我是初学者,没有学到足够的知识来找到我正在寻找的答案

linux file-io
1个回答
0
投票

通常,驱动程序被设计为匹配指定设备 ID 的一组特定模式,例如 PCI ID 或 USB ID。这允许内核自动确定哪些设备和驱动程序匹配。

由于大多数驱动程序与某些通用硬件类别匹配(例如,用于 USB 大容量存储的 SCSI 兼容磁盘或用于大多数网卡的以太网),因此为您的设备注册驱动程序的正确方法是创建相应驱动程序类别的对象。例如,我的网卡使用

igb
驱动程序注册了
struct pci_driver
struct net_device_ops
,因此它可以向 PCI 子系统注册并创建网络设备对象。

如果这样做,那么相应的内核子系统实际上会负责将数据定向到正确的设备。例如,使用我的网卡,当有人尝试控制

eth0
时,内核会使用适当的数据结构调用
igb
驱动程序并向其传递指定的数据。这意味着内核可以使用标准机制跟踪适当的编号或命名设备,并且它可以正确地创建适当的设备条目(通过 udev 等)。

file_operations
结构通常用于实现不控制实际硬件的自定义字符设备。例如,
/dev/urandom
/dev/zero
,它们本质上是完全在内核中实现的巨型单例实例。如果您正在处理实际的硬件,您通常不想使用此结构,而应该向适当的子系统注册您的硬件。这取决于您的硬件,但您可以查看类似的驱动程序来了解它应该是什么。 (而且,由于您的驱动程序无论如何都必须是 GPL,因此您可以将您的驱动程序基于类似驱动程序的相关部分,前提是您保留版权和许可声明。)

(我不会说任何中文,所以我无法评论你问题的那部分,但理解你的英语没有问题。)

© www.soinside.com 2019 - 2024. All rights reserved.