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。内核中是否有任何策略/算法如何从候选人中进行选择?
简短的回答:内核遇到的第一个模块被选中。
模块加载通常由/etc/modules并通过/etc/udev/rules.d中描述的udev规则处理。今天,大多数 Linux 发行版都使用 udev 进行设备处理。udev、modprobe 和内核模块加载器之间存在相当复杂的交互,但我认为本演示文稿的作者解释得很好。
这是在 VMWare 下运行的虚拟机吗?
pcnet32 是较旧的 vmware 以太网设备驱动程序 vmxnet 是较新的 vmware 以太网设备驱动程序
mii 用于以太网绑定驱动程序
根据这个线程,您需要做的就是在其配置中为来宾指定正确的 NIC 设备。
ethernet0.virtualDev = "vmxnet"