linux網路卡驅動程式的編譯與安裝

來源:互聯網
上載者:User

    一般來說,目前新版的 Linux 預設可以支援的網路卡晶片集數量已經很完備了,很多網路卡晶片都已經被支援,例如RLT 8139 晶片 ( RealTek 8139 ) 的網路卡所以使用者可以很輕易的設定好他們的網路卡。不過,如果萬一不幸核心沒有支援該網路卡的話,那麼可以透過重新編譯核心或者編譯網路卡驅動模組 ( Modules ),並且載入該模組,今天就是這麼巧,碰到一個D-Link 的DFE-530TX,沒法,只有手動安裝網路卡驅動程式了.可以用命令:

    # dmesg | grep eth

    來查看系統啟動資訊,顯示出 eth0 或者 eth1 的資訊,如果eth1沒找到正確的資訊,那就表示 Linux 無法找到該硬體, eth0是8139的,已經顯示正常,例如:
    [root@kindgeorge root]# dmesg | grep eth 
    eth0: RealTek RTL8139 Fast Ethernet at 0xf0160000, 00:0a:a6:30:0d:0e, IRQ 11 
    eth0: Identified 8139 chip type 'RTL-8139C' 
    eth0: Setting 10mbps full-duplex based on auto-negotiated partner ability 4061.

   一. 查看自己系統的核心版本. 

    [root@kindgeorge root]# uname -r 
    2.4.18-3  
    我這裡是redhat7.3的,核心2.4.18-3 ,一般來說,這個核心驅動程式的模組會放在 /lib/modules/2.4.18-3/kernel/drivers/net

二.確定系統是否已經安裝下麵包 

    1.由於編譯需要用到核心的原始碼包和編譯器gcc.所以如果沒有的話,要先裝.查看: 
    [root@kindgeorge root]# rpm -qa|grep kernel 
    kernel-2.4.18-3 
    kernel-source-2.4.18-3 

    [root@kindgeorge root]# rpm -qa|grep gcc (gcc是編譯用) 
    gcc-2.96-110 
    gcc-g77-2.96-110 
    gcc-c++-2.96-110 

    一般裝了核心源包的話,都會在出現/usr/src/linux-2.4,同路徑下會有linux-2.4.18-3的檔案實際目錄. 
    2.如果沒有的話,就用原來安裝盤上的檔案安裝,會去下載個相同核心源包安裝吧rpm -ivh kernel-source-2.4.18-3.i386.rpm 

三. 取得驅動程式和編譯 

    1. 可以重廠家提供的光碟片提供,把光碟片上的linux目錄下的dlkfet-4.24.tar.gz 拷貝過來用. 
    2. 從網上下載網路卡驅動程式,一般廠家的網站都提供下載程式的. 
    例如: http://www.d-link.com.cn 上有下載. 
    [root@kindgeorge root]# cp dlkfet-4.24.tar.gz /usr/src 
    [root@kindgeorge root]# cd /usr/src/ 

    [root@kindgeorge src]# tar -zxvf dlkfet-4.24.tar.gz 
    dlkfet-4.24/ 
    dlkfet-4.24/rhine_main.c 
    dlkfet-4.24/Makefile 
    dlkfet-4.24/vmns_drv.h 
    dlkfet-4.24/rhine.h 
    dlkfet-4.24/.depend.mak 
    dlkfet-4.24/rhine_vmns.c 
    dlkfet-4.24/rhine_proc.h 
    dlkfet-4.24/rhine_proc.c 
    dlkfet-4.24/rhine_vmns.h 
    dlkfet-4.24/kcompat.h 
    dlkfet-4.24/rhine_cfg.h 
    dlkfet-4.24/.depend 
    dlkfet-4.24/rhine_wol.c 
    dlkfet-4.24/rhine_wol.h 
    dlkfet-4.24/linux.txt 

    3.請留意一開始是沒有.o檔案的. 我們編譯前可以看看目錄的linux.txt,是一個包含介紹安裝說明.在進入目錄後,執行make進行編譯. 
    [root@kindgeorge src]# cd dlkfet-4.24 
    [root@kindgeorge dlkfet-4.24]# make 
    [root@kindgeorge dlkfet-4.24]# ll (編譯後查看一下) 
    total 320 
    -rw-r--r-- 1 root root 7473 Jan 15 2003 kcompat.h 
    -rw-r--r-- 1 root root 11491 Jan 20 2003 linux.txt 
    -rw-r--r-- 1 root root 5219 Dec 10 2002 Makefile 
    -rw-r--r-- 1 root root 1818 Jan 16 2003 rhine_cfg.h 
    -rw-r--r-- 1 root root 48715 May 24 18:31 rhinefet.o 
    -rw-r--r-- 1 root root 42044 Jan 15 2003 rhine.h 
    -rw-r--r-- 1 root root 78996 Jan 16 2003 rhine_main.c 
    -rw-r--r-- 1 root root 32760 May 24 18:31 rhine_main.o 
    -rw-r--r-- 1 root root 14980 Jan 15 2003 rhine_proc.c 
    -rw-r--r-- 1 root root 1672 Jan 15 2003 rhine_proc.h 
    -rw-r--r-- 1 root root 12336 May 24 18:31 rhine_proc.o 
    -rw-r--r-- 1 root root 9172 Jan 15 2003 rhine_vmns.c 
    -rw-r--r-- 1 root root 1106 Jan 15 2003 rhine_vmns.h 
    -rw-r--r-- 1 root root 3792 May 24 18:31 rhine_vmns.o 
    -rw-r--r-- 1 root root 7536 Jan 15 2003 rhine_wol.c 
    -rw-r--r-- 1 root root 1529 Jan 15 2003 rhine_wol.h 
    -rw-r--r-- 1 root root 3488 May 24 18:31 rhine_wol.o 
    -rw-r--r-- 1 root root 6824 Jan 15 2003 vmns_drv.h

    4.經過編譯後,會編譯出一個rhinefet.o 檔案,這個就是驅動模組,我們把它拷貝到相應地方: 
    [root@kindgeorge dlkfet-4.24]#cp rhinefet.o /lib/modules/2.4.18-3/kernel/drivers/net 
    [root@kindgeorge dlkfet-4.24]# depmod -a 

    5.測試 
    (1)可以用命令modprobe rhinefet 或 insmod rhinefet.o 載入.如果沒出錯資訊說明ok. 
    (2) 用命令lsmod 可以看看是否已經載入了. 
    [root@kindgeorge dlkfet-4.24]# lsmod 
    Module Size Used by Not tainted 
    rhinefet 38752 1 
    8139too 16448 1 
    mii 2408 0 [8139too] 
    這樣,看到rhinefet模組已經載入了,基本上,這樣就證明已經編譯成功. 

    6. 讓它開機時載入 
    [root@kindgeorge dlkfet-4.24]# vi /etc/modules.conf 
    在後面加上一行: alias eth1 rhinefet 

    7. 配置一下網路 
    [root@kindgeorge dlkfet-4.24]# vi /etc/sysconfig/network-scripts/ifcfg-eth1 
    DEVICE=eth1 
    BOOTPROTO=static 
    IPADDR=192.168.4.202 
    NETMASK=255.255.255.0 
    NETWORK=192.168.4.0 
    GATEWAY=192.168.4.250 
    BROADCAST=192.168.4.255 
    ONBOOT=yes 

    8.啟動網卡,然後用ifconfig查看, 
    ifup eth1 
    [root@kindgeorge dlkfet-4.24]# ifconfig 
    eth0 Link encap:Ethernet HWaddr 00:0A:E6:30:0D:0E 
    inet addr:211.239.218.153 Bcast:211.239.218.255 Mask:255.255.255.0 
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
    RX packets:3780479 errors:0 dropped:0 overruns:0 frame:0 
    TX packets:3833860 errors:0 dropped:0 overruns:0 carrier:0 
    collisions:0 txqueuelen:100 
    RX bytes:1118112324 (1066.3 Mb) TX bytes:1111887387 (1060.3 Mb) 
    Interrupt:11 

    eth1 Link encap:Ethernet HWaddr 00:0F:3D:82:EC:1D 
    inet addr:192.168.4.202 Bcast:192.168.4.255 Mask:255.255.255.0 
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
    RX packets:749312 errors:0 dropped:0 overruns:0 frame:0 
    TX packets:976174 errors:0 dropped:0 overruns:0 carrier:0 
    collisions:0 txqueuelen:100 
    RX bytes:43695059 (41.6 Mb) TX bytes:1472142037 (1403.9 Mb) 
    Interrupt:5 Base address:0xe000 
     
    9.重新啟動機器,可以自動載入和使用了.大功告成. 
   
五. 按照安裝說明的方法自動編譯安裝. 

    在 "三.3" 中我們用make 編譯,然後進行手動的拷貝. 實際上在linux.txt中的安裝說明提到用make install . 那我們來看看這種方法系統都做了什麼吧. 
    [root@firewall1 dlkfet-4.24]# make install 
    gcc -Wall -DLINUX -D__KERNEL__ -DMODULE -DEXPORT_SYMTAB -D__NO_VERSION__ -O2 -pipe -I/lib/modules/2.4.18-3/build/include -I. -Wstrict-prototypes -fomit-frame-pointer -DMODVERSIONS -include /lib/modules/2.4.18-3/build/include/linux/modversions.h -DVMNS -c -o rhine_main.o rhine_main.c
gcc -Wall -DLINUX -D__KERNEL__ -DMODULE -DEXPORT_SYMTAB -D__NO_VERSION__ -O2 -pipe -I/lib/modules/2.4.18-3/build/include -I. -Wstrict-prototypes -fomit-frame-pointer -DMODVERSIONS -include /lib/modules/2.4.18-3/build/include/linux/modversions.h -DVMNS -c -o rhine_proc.o rhine_proc.c
gcc -Wall -DLINUX -D__KERNEL__ -DMODULE -DEXPORT_SYMTAB -D__NO_VERSION__ -O2 -pipe -I/lib/modules/2.4.18-3/build/include -I. -Wstrict-prototypes -fomit-frame-pointer -DMODVERSIONS -include /lib/modules/2.4.18-3/build/include/linux/modversions.h -DVMNS -c -o rhine_wol.o rhine_wol.c
gcc -Wall -DLINUX -D__KERNEL__ -DMODULE -DEXPORT_SYMTAB -D__NO_VERSION__ -O2 -pipe -I/lib/modules/2.4.18-3/build/include -I. -Wstrict-prototypes -fomit-frame-pointer -DMODVERSIONS -include /lib/modules/2.4.18-3/build/include/linux/modversions.h -DVMNS -c -o rhine_vmns.o rhine_vmns.c

**************************************************
Build options:
VERSION 2.4.18-3
SMP Disabled
VMNS Enabled
***************************************************
mkdir -p /lib/modules/2.4.18-3/kernel/drivers/net
install -m 644 -o root rhinefet.o /lib/modules/2.4.18-3/kernel/drivers/net
***** Move official driver via-rhine.o to via-rhine.o.backup
mv /lib/modules/2.4.18-3/kernel/drivers/net/via-rhine.o /lib/modules/2.4.18-3/kernel/drivers/net/via-rhine.o.backup
/sbin/depmod -a || true 
    按照上面的結果顯示是這樣的一個過程: 
    (1)系統把.c等檔案編譯成相應的.o檔案. 
    (2)然後顯示系統是否支援SMP和VMNS,然後把相應的.o模組檔案拷貝到系統應該的地方. 
    (3)並且把相同晶片的程式過時的via-rhine.o改為備份檔案.讓系統用新的rhinefet.o 
    (4)最後執行/sbin/depmod -a 更新模組庫配置. 看來這個也是個智能的安裝方法. 
   

    六. 用其他方法驅動. 
    由於市面上很多的各種各樣的板卡,有名牌有雜牌,多不勝數.當我們拿到一塊卡,但一下子沒找到它本身提供的來源程式,不能編譯,怎麼辦呢? 所以當你有一塊網卡不能用,在找linux的driver之前一定搞清楚這個網卡用的什麼晶片,跟誰相容,比如3c509,ne2000,etherexpress等等.這樣的型號一般都在網卡上最大的一快晶片上印著.如果晶片型號相同,那麼它們其中一些是可以通用的.我們可以嘗試一下系統上已經安裝了的驅動是否可行了.進入驅動目錄/lib/modules/(核心版本)/kernel/drivers/net 即可發現已經有很多模組了, 用命令insmod 相應晶片模組名字 , 如果不成功會報錯,如果正確則不顯示錯誤資訊,然後再進行上面的"三.5-9"步驟進行測試.如果不行,再老老實實的找來源程式吧.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.