linux网卡驱动程序的编译与安装

简介: linux网卡驱动程序的编译与安装

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情

一般来说,目前新版的 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. 从网上下载网络卡驱动程序,一般厂家的网站都提供下载程序的.
    例如: 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模块已经加载了,基本上,这样就证明已经编译成功.\
  4. 让它开机时加载
    [root@kindgeorge dlkfet-4.24]# vi /etc/modules.conf
    在后面加上一行:  alias eth1 rhinefet\
  5. 配置一下网络
    [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\
  6. 启动网卡,然后用ifconfig查看,
    ifup eth1
    [root@kindgeorge dlkfet-4.24]# ifconf
    ig
    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

  7. 9.重新启动机器,可以自动加载和使用了.大功告成.

  8. 五. 按照安装说明的方法自动编译安装.
    在 "三.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

  9. 按照上面的结果显示是这样的一个过程:
    (1)系统把.c等文件编译成相应的.o文件.
    (2)然后显示系统是否支持SMP和VMNS,然后把相应的.o模块文件拷贝到系统应该的地方.
    (3)并且把相同芯片的程序过时的via-rhine.o改为备份文件.让系统用新的rhinefet.o
    (4)最后执行/sbin/depmod -a 更新模块库配置. 看来这个也是个智能的安装方法.

  10. 六. 用其他方法驱动.
    由于市面上很多的各种各样的板卡,有名牌有杂牌,多不胜数.当我们拿到一块卡,但一下子没找到它本身提供的源程序,不能编译,怎么办呢?
    所以当你有一块网卡不能用,在找linux的driver之前一定搞清楚这个网卡用的什么芯片,跟谁兼容,比如 3c509,ne2000,etherexpress等等.

  11. 这样的型号一般都在网卡上最大的一快芯片上印着.如果芯片型号相同,那么它们其中一些是可以通用的.我们可以尝试一下系统上已经安装了的驱动是否可行了. 进入驱动目录/lib/modules/(内核版本)/kernel/drivers/net  即可发现已经有很多模块了, 用命令insmod 相应芯片模块名字 , 如果不成功会报错,如果正确则不显示错误信息,然后再进行上面的"三.5-9"步骤进行测试.如果不行,再老老实实的找源程序吧.



相关文章
|
2月前
|
Linux 编译器 开发工具
【Linux快速入门(三)】Linux与ROS学习之编译基础(Cmake编译)
【Linux快速入门(三)】Linux与ROS学习之编译基础(Cmake编译)
119 2
|
10天前
|
Ubuntu Linux Go
golang编译成Linux可运行文件
本文介绍了如何在 Linux 上编译和运行 Golang 程序,涵盖了本地编译和交叉编译的步骤。通过这些步骤,您可以轻松地将 Golang 程序编译成适合 Linux 平台的可执行文件,并在目标服务器上运行。掌握这些技巧,可以提高开发和部署 Golang 应用的效率。
74 14
|
18天前
|
Linux Python
Linux 安装python3.7.6
本教程介绍在Linux系统上安装Python 3.7.6的步骤。首先使用`yum`安装依赖环境,包括zlib、openssl等开发库。接着通过`wget`下载Python 3.7.6源码包并解压。创建目标文件夹`/usr/local/python3`后,进入解压目录执行配置、编译和安装命令。最后设置软链接,使`python3`和`pip3`命令生效。
|
21天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
112 20
|
14天前
|
NoSQL 关系型数据库 MySQL
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
139 7
|
21天前
|
Unix Linux 编译器
UNIX/Linux 上的安装
UNIX/Linux 上的安装。
39 2
|
3月前
|
Linux 测试技术 网络安全
Linux系统之安装OneNav个人书签管理器
【10月更文挑战第19天】Linux系统之安装OneNav个人书签管理器
124 5
Linux系统之安装OneNav个人书签管理器
|
2月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
80 4
|
3月前
|
监控 Java Linux
Linux系统之安装Ward服务器监控工具
【10月更文挑战第17天】Linux系统之安装Ward服务器监控工具
78 5
Linux系统之安装Ward服务器监控工具
|
2月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
68 5

热门文章

最新文章