2008年7月31日 星期四

VMware 的網卡驅動

VMware 所模擬的網卡是AMD PCnet32,在linux-2.4.20 有包含這個driver,

linux-2.4.20的核心設定
General setup --->
[*] PCI support (CONFIG_PCI)
(Any) PCI access mode (CONFIG_PCI_GOBIOS)
[*]PCI device name database (CONFIG_PCI_NAMES)
因為這個網卡是接在PCI bus上

Network device support --->
[*] Network device support (CONFIG_NETDEVICES)
Ethernet (10 or 100Mbit) --->
[*] Ethernet(10 or 100Mbit) (CONFIG_NET_ETHERNET)
[*] EISA, VLB, PCI and on board controllers (CONFIG_NET_PCI)
[*] AMD PCnet32 PCI support (CONFIG_PCNET32)

這樣在開機時,Linux會自動偵測出網卡,然後利用ifconfig 和route 設定 IP 和 GATEWAY 的位址, DNS 可以利用resolv.conf 設定,但要注意 NSS (Name Service Switch) 如何提供


練習一下module的設置,

linux-2.4.20 核心設定
Loadable module support --->
[*] Enable loadable module support
[*] Set version information on all module symbols
[*] kernel module loader

其他和上面一樣,只有一個不一樣
<M> AMD PCnet32 PCI support (CONFIG_PCNET32)
對,就是這個設為module,有點廢話...

make moudles
會將設置為 <M>的選項,以modules的編譯參數編譯起來

make INSTALL_MOD_PATH=要建立root的絕對路徑 modules_install
將module放在"root的絕對路徑"/lib/module/`uname -r`/中,並產生一個叫modules.dep的檔案,,是用來告訴modprobe,要載入pcnet32.o前要先載入mii.o,語法有點像make,
其他相關的modules.XXX,都是空的,不過有一個叫modules.pcimap有些東東,還沒找到相關資料來了解其用途,
註:在做跨平台編譯,或者Linux最小化時,這個INSTALL_MOD_PATH要注意,是絕對路徑而沒法是相對路徑,是指向自己要建立root 的filesystem,
註: `uname -r` ==> 2.4.20

在/etc/下要有一個modules.conf,內容如下
alias eth0 pcnet32

還有busybox的module相關指令要加入, modprobe depmod lsmod insmod rmmod modinfo

因此當ifconfig eth0 192.168.8.19 up 時, 由於核心沒有eth0網路設備,就叫modprobe來載入module,首先modprobe檢查modules.conf,知道eth0的driver是pcnet32,然後再檢查modules.dep,得知要載入pcnet32.o前要先載入mii.o,來處理這個相關性,如此核心就知道怎樣處理eth0這個網路設備,完成這個連鎖反應....

其實一般PCI介面有所謂PnP的功能,這樣我們可以存著許多網卡driver,然後利用這機制得知到底要用哪一個driver,這樣才user friendly吧...
不過現在的工作主要在embedded linux,主要以精簡為目標,我想以後有機會再了解吧!!!

沒有留言:

張貼留言