如果有多个内核模块可以驱动同一个设备,那么选择它们的规则是什么?

如果有多个内核模块可以驱动同一个设备,那么选择它们的规则是什么?

pcnet32 和 vmxnet 都可以驱动该设备。

$ lspci -k
...
02:01.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)
    Subsystem: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
    Flags: bus master, medium devsel, latency 64, IRQ 19
    I/O ports at 2000 [size=128]
    [virtual] Expansion ROM at dc400000 [disabled] [size=64K]
    Kernel driver in use: vmxnet
    Kernel modules: vmxnet, pcnet32

两个内核模块都已加载,

$ lsmod | grep net
pcnet32                32644  0 
vmxnet                 17696  0 
mii                     5212  1 pcnet32

如您所见,正在使用的内核驱动程序是 vmxnet。内核中是否有任何策略/算法如何从候选中进行选择?

答案1

简短回答:选择内核遇到的第一个模块

模块加载通常由/etc/模块并通过udev规则描述/etc/udev/rules.d。如今,大多数 Linux 发行版都使用 udev 进行设备处理。udev、modprobe 和内核模块加载器之间存在相当复杂的交互,但我认为演示解释得非常好。

答案2

这是在 VMWare 下运行的虚拟机吗?

pcnet32 是适用于 vmware 的较旧以太网设备驱动程序,vmxnet 是适用于 vmware 的较新以太网设备驱动程序

mii 是以太网绑定驱动程序

根据此主题您需要做的就是在客户机配置中指定正确的 NIC 设备。

ethernet0.virtualDev =“vmxnet”

相关内容