当前位置:Linux教程 - Linux - 如何驱动 DFE-530TX RevB 网卡

如何驱动 DFE-530TX RevB 网卡



         作 者: 宝岛


    D-link 出了个新版的 DFE-530TX RevB, 多了个 WOL 的功能,不过原来的驱动程序via-rhine不能直接支持这款网卡。下面介绍一下怎样驱动这块网卡。

    我的电脑上有两张 DFE-530TX,一旧一新,这里把设置方法分享一下。

    因为我的电脑同时插了两张卡,所以我把驱动程序分成两个,via-rhine.c 给 RevA 的 530 用,via-rhineB.c 的给 RevB 的 530 用。

    如果你的电脑只有一张 RevB 的卡,你可以选择直接修改原始的程程序或设置,

    修改后新增的行前面多个 \\\\\\\#\\\\\\\ 以方便阅读,但请不要把 \\\\\\\#\\\\\\\ 也写进你的文件里。

    kernel source 以 2.2.14 为蓝本。

    一.、解开 source 后先修改几个文件

    1、修改

    /usr/src/linux/drivers/net/via-rhine.c

    原始代码:
    ......
    static struct pci_id_info pci_tbl[] = {
    { \"VIA VT86C100A Rhine-II\", 0x1106, 0x6100, 0xffff,
    PCI_USES_MEM|PCI_USES_IO|PCI_USES_MEM|PCI_USES_MASTER, 128, via_probe1},
    { \"VIA VT3043 Rhine\", 0x1106, 0x3043, 0xffff,
    PCI_USES_IO|PCI_USES_MEM|PCI_USES_MASTER, 128, via_probe1},
    {0,}, /* 0 terminated list. */
    };
    ......

    修改成:
    ......
    static struct pci_id_info pci_tbl[] = {
    { \"VIA VT86C100A Rhine-II\", 0x1106, 0x6100, 0xffff,
    PCI_USES_MEM|PCI_USES_IO|PCI_USES_MEM|PCI_USES_MASTER, 128, via_probe1},
    { \"VIA VT3043 Rhine\", 0x1106, 0x3043, 0xffff,
    PCI_USES_IO|PCI_USES_MEM|PCI_USES_MASTER, 128, via_probe1},
    # { \"VIA VT3043 Rhine RevB1\", 0x1106, 0x3065, 0xffff,
    # PCI_USES_IO|PCI_USES_MEM|PCI_USES_MASTER, 128, via_probe1},
    {0,}, /* 0 terminated list. */
    };
    ......
    新的文件请存成 /usr/src/linux/drivers/net/via-rhineB.c,以符合下面的设置。

    2、 修改

    /usr/src/linux/drivers/net/Config.in

    原始程序:
    .....
    tristate \\\\\\\PCI NE2000 support\\\\\\\ CONFIG_NE2K_PCI
    tristate \\\\\\\TI ThunderLAN support\\\\\\\ CONFIG_TLAN
    tristate \\\\\\\VIA Rhine support\\\\\\\ CONFIG_VIA_RHINE
    tristate \\\\\\\SiS 900/7016 PCI Fast Ethernet Adapter support\\\\\\\ CONFIG_SIS900
    if [ \"$CONFIG_EXPERIMENTAL\" = \"y\" ]; then
    .....

    修改成:
    .....
    tristate \\\\\\\PCI NE2000 support\\\\\\\ CONFIG_NE2K_PCI
    tristate \\\\\\\TI ThunderLAN support\\\\\\\ CONFIG_TLAN
    tristate \\\\\\\VIA Rhine support\\\\\\\ CONFIG_VIA_RHINE
    # tristate \\\\\\\VIA Rhine RevB support\\\\\\\ CONFIG_VIA_RHINEB
    tristate \\\\\\\SiS 900/7016 PCI Fast Ethernet Adapter support\\\\\\\ CONFIG_SIS900
    if [ \"$CONFIG_EXPERIMENTAL\" = \"y\" ]; then
    .....

    3、修改

    /usr/src/linux/drivers/net/Makefile

    原始程序:
    ......
    ifeq ($(CONFIG_TLAN),y)
    L_OBJS += tlan.o
    else
    ifeq ($(CONFIG_TLAN),m)
    M_OBJS += tlan.o
    endif
    endif

    ifeq ($(CONFIG_VIA_RHINE),y)
    L_OBJS += via-rhine.o
    else
    ifeq ($(CONFIG_VIA_RHINE),m)
    M_OBJS += via-rhine.o
    endif
    endif

    ifeq ($(CONFIG_ZNET),y)
    L_OBJS += znet.o
    endif
    ......

    修改成:
    ......
    ifeq ($(CONFIG_TLAN),y)
    L_OBJS += tlan.o
    else
    ifeq ($(CONFIG_TLAN),m)
    M_OBJS += tlan.o
    endif
    endif

    ifeq ($(CONFIG_VIA_RHINE),y)
    L_OBJS += via-rhine.o
    else
    ifeq ($(CONFIG_VIA_RHINE),m)
    M_OBJS += via-rhine.o
    endif
    endif

    #ifeq ($(CONFIG_VIA_RHINEB),y)
    #L_OBJS += via-rhineB.o
    #else
    # ifeq ($(CONFIG_VIA_RHINEB),m)
    # M_OBJS += via-rhineB.o
    # endif
    #endif

    ifeq ($(CONFIG_ZNET),y)
    L_OBJS += znet.o
    endif
    ......


    二、 配置kernel

    运行命令 make conifg 或者 make menuconfig, 我个人喜欢用 make menuconfig。如果上面的修改都对的话,你就能在

    Networking device support --> Ethernet (10 or 100Mbit)

    里找到 “VIA Rhine RevB support”, 要 <*> 还是 就看个人考虑吧, 我是选择 把驱动程序做成一个模块,
    做成模块还要改 modules.conf,如果是直接加进 kernel 里的话要在 lilo.conf 里加上设置参数。


    三、 编译kernel

    接下来 make dep,
    make BzImage,
    make modules
    make modules_install

    就跟平常一样了。
    make modules_install后可在 /lib/modules/kernel-ver/net 里找到
    via-rhine.o 与
    via-rhineB.o


    四、修改 /etc/modules.conf 或/etc/lilo.conf

    1、查看网卡的中断和地址设置

    运行命令
    cat /etc/proc

    看一看网卡的中断和地址设置
    Vendor id=1106, Device id=3043 ==> 这是 RevA 的卡
    Vendor id=1106, Device id=3065 ==> 这是 RevB 的卡

    Vendor.....的下一行有 IRQ 的 data, 下两行有 IO PORT 的 data
    我的 RevA irq 为 9, RevB 的 irq 为 10.

    2、 修改 /etc/modules.conf (旧版的 modprobe 使用 /etc/conf.modules),加入下面两行:

    alias eth0 via-rhine io=0x8000 irq=9
    alias eth1 via-rhineB io=0x8400 irq=10
    (我的电脑不加 io 也能动, 但不加 irq 就不行)

    3、如果你在配置kernel的时候,将网卡的驱动程序直接打进kernel,在这里你要 修改 /etc/lilo.conf ,加入两行
    ether=0,0,eth0
    ether=0,0,eth1

    如果不能驱动的,那就定写上详细的参数:
    ether=9,0x8000,eth0
    ether=10,0x8400,eth1

    大致上这样就行了,你可以试试,如果有写错的地方, 也请各位不吝指正。



    发布人:Crystal 来自:linux自由空间