Kernel

如果有多個核心模組可以驅動同一個設備,那麼選擇它們的規則是什麼?

  • March 8, 2010

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”

引用自:https://serverfault.com/questions/120047