Kernel
如果有多個核心模組可以驅動同一個設備,那麼選擇它們的規則是什麼?
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”