【发布时间】:2013-11-21 02:07:47
【问题描述】:
我正在做一个项目,我有一个管理系统,可以通过 PCI Express 将 PCIe 硬件设备导出到其他系统。我有一个工作的管理内核模块,但需要找到一种方法来确保我导出的设备在管理系统上没有为其加载驱动程序。否则,设备最终会发生冲突,因为同一个驱动程序将从 2 个不同的系统访问它并且显然会导致问题。
例如,假设我在管理器上安装了双端口 Intel 100MBps NIC 设备,它将在系统中显示 2 个 PCIe 端点(例如 Fn 0 和 1)。将为这两个设备加载英特尔模块 e1000。如果我想将该设备的端口 2 导出到另一个系统,我想将它与 e1000 模块“分离”。
有没有人知道在不破解内核或调整 e1000 驱动程序的探测功能的情况下这样做的干净方法?我不能简单地做一个 rmmod 因为这将删除两个 NIC 设备的模块。我希望我未导出的 NIC 在仍为其加载 e1000 驱动程序的情况下在管理系统中保持功能。
本质上,rmmod 会执行此操作,但会删除驱动程序探测并拥有的所有设备的驱动程序。有什么方法可以告诉 Linux “仅为此特定设备卸载模块”?在 Windows 上,我想这相当于在设备管理器中右键单击设备并选择“禁用”。
【问题讨论】:
标签: linux-kernel device