- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 init_module
函数中调用 pci_register_driver()
注册 PCI 驱动程序后,驱动程序应该控制任何还没有驱动程序的 PCI 设备,假设设备与 struct pci_device_id
中指定的供应商 ID、设备 ID 等匹配。
我想强制以太网 Controller 使用我的驱动程序,只是为了实验(例如读取配置字节)。在 Virtualbox 客户机(Mint,内核 3.13.0)上,我将以太网 Controller 的驱动程序列入黑名单,运行 update-initramfs -u
,然后重新启动。这成功地解除了默认驱动程序与 Controller 的关联,因为该驱动程序不再出现在 lspci -k
的输出中。
然而,当我加载模块时,一些以前丢失的设备出现在 lspci -k
的输出中(由我的驱动程序控制它们),但是以太网 Controller 仍然缺少一个“正在使用的内核驱动程序:”
行。如何让我的模块识别并拥有 Controller ?
请注意,我对供应商和设备字段使用了 PCI_ANY_ID
,并且未初始化 struct pci_device_id
的其他字段。所以我希望驱动程序能够探测当前缺少驱动程序的任何设备。
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/pci.h>
MODULE_LICENSE("GPL");
int init_module(void);
void cleanup_module(void);
static int pci_probe(struct pci_dev *, const struct pci_device_id *);
static void pci_remove(struct pci_dev *dev);
#define SUCCESS 0
#define FAILURE -1
static struct pci_device_id my_pci_id = {
.vendor = PCI_ANY_ID,
.device = PCI_ANY_ID
};
static struct pci_driver my_pci_driver = {
.name = "kmod_driver",
.id_table = &my_pci_id,
.probe = pci_probe,
.remove = pci_remove
};
int init_module(void)
{
return pci_register_driver(&my_pci_driver);
}
void cleanup_module(void)
{
pci_unregister_driver(&my_pci_driver);
}
static int pci_probe(struct pci_dev *dev, const pci_device_id *id)
{
int enableStatus = pci_enable_device(dev);
.....
return SUCCESS;
}
static void pci_remove(struct pci_dev *dev)
{
return;
}
最佳答案
您还需要包括 subvendor
和 subdevice
字段(也将它们设置为 PCI_ANY_ID
)。匹配函数是这样的:
static inline const struct pci_device_id *
pci_match_one_device(const struct pci_device_id *id, const struct pci_dev *dev)
{
if ((id->vendor == PCI_ANY_ID || id->vendor == dev->vendor) &&
(id->device == PCI_ANY_ID || id->device == dev->device) &&
(id->subvendor == PCI_ANY_ID || id->subvendor == dev->subsystem_vendor) &&
(id->subdevice == PCI_ANY_ID || id->subdevice == dev->subsystem_device) &&
!((id->class ^ dev->class) & id->class_mask))
return id;
return NULL;
}
您可以使用 PCI_DEVICE
宏来提供适当的 sub
成员:
static struct pci_device_id my_pci_id = {
PCI_DEVICE(PCI_ANY_ID, PCI_ANY_ID),
};
关于自定义 PCI 驱动程序无法探测设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38799867/
在我的应用程序中,我想将 DLL 文件放在一个子目录中。我正在使用 probing app.config 中的元素,它工作得很好,但我遇到了本地化程序集的问题。 如果我有两个 DLL:
我可以在 python 中执行此操作,它为我提供了函数内可用的子模块/参数。 在解释器中,我可以这样做: >>> from nltk import pos_tag >>> dir(pos_tag) [
是否可以在 visualVM 中探测单个类?例如,我想查看在特定类中执行某个方法所花费的时间。 谢谢 最佳答案 是的,这是可能的。如果您只对分析一个类感兴趣,则可以将分析根设置为该类。参见 Profi
从 Linux 内核 3.0 开始,pci 探测是自动的:pci_register_driver(&pci_driver); Linux 内核 2.6 及更早版本,程序员必须创建一个字符设备,遍历 P
在我正在使用的 app.config 中 加载 OracleLibs 子文件夹中的 dll 但是当运行程序时出现错误: Ora
我有一个程序,其中有一个主/从设置,我为主机实现了一些功能,这些功能将不同类型的数据发送到从机。一些函数发送给单个从站,但一些函数通过 MPI_Bcast 向所有从站广播信息。 我想在从站中只有一个接
我正在尝试使用 exec 探测器来了解 GKE 中的就绪性和活跃度。这是因为它是 Kubernetes 的一部分 recommended way to do health checks在 gRPC 后
我有一个包含多个独立1 组件的程序。 在所有组件中添加一个 active 探测器是微不足道的,但是拥有一个单个 active 探测器来确定所有程序组件的健康状况并不容易。 我如何让 kubernete
我正在尝试运行通过端口 80 和 443 公开的服务。 SSL 终止发生在 pod 上。 我只为活性探测指定了端口 80,但由于某些原因,kubernates 也在探测 https(443)。为什么会
我正在关注“Moving Frostbite to PBR course notes” ' 在我的 OpenGL 渲染引擎中实现 IBL,但我在预积分方程的镜面反射分量时遇到了一些问题。 正如您将从我
typeof(foo)给我类型。但假设我想深入挖掘。 例如 父类(super class)型/树 列出数据成员 跳转到源代码定义 帮助/文档 还要别的吗?它是在哪个模块中定义的? 我能做得比简单地扔T
Java 使用什么作为 HashMap 的默认探测方法?是线性的吗?链接还是其他? 最佳答案 看起来像是对我的链接。代码:(link) ...724 /**725 *
如果使用setsockopt 将套接字设置为SO_KEEPALIVE,是否意味着调用setsockopt 的一方将发送keepalive 探测? 因此,如果一方执行以下步骤,它将发送保活探测: 使用s
我想验证 dhcp 服务器配置,即客户端是否获得正确的 DNS 服务器、域名等。我有一个有效的 DHCP 设置,以及一台具有静态 IP 地址的计算机,我可以从该地址向 DHCP 服务器发送 DHCP
在思考 BitTorrent 的工作原理时,我想到了几个问题。如果有人可以分享一些可能的回应,将不胜感激。 假设一个 BitTorrent 从跟踪器获得 50 个对等点,然后与其中的 20 个建立连接
我想看看程序何时进入使用 Dtrace 的类。 例如: dtrace -c './myProgram' -n 'pid$target:myProgram:function:entry' 当程序 myP
我使用的是 OS X Yosemite 10.10.5。我有一个用 Rust 编写的库,我需要测量在库中花费的运行时间。我像这样设置了一些 pid 探测器(不是实际的脚本): pid$target::
我正在运行一个无法更改任何规范的 Web 服务。我想在 Kubernetes 上使用带有 HTTP POST 的活性探针。我找不到任何可用的东西。我对busybox和netcat的所有努力都失败了。
我想知道/获得有关如何为 RabbitMQ 队列消费者设置 active 探测的意见。我不确定如何验证消费者是否仍在处理来自队列的消息。我已经尝试在互联网上搜索一些线索,但找不到任何线索。所以只是在这
给定一个 Python 应用程序,它在无限循环中轮询 Kafka 主题,并在处理接收到的 Kafka 消息后将结果上传到 s3 存储桶。 在为 Kubernetes 定义就绪性和活跃度探测时应该考虑什
我是一名优秀的程序员,十分优秀!