Linux如何设置网卡驱动?

Linux系统下网卡驱动的正确设置是保障网络通信稳定的基础,网卡驱动作为硬件与操作系统内核之间的桥梁,负责控制网卡硬件的数据收发、协议转换等功能,若驱动未正确安装或配置,轻则网络连接不稳定,重则无法识别网卡设备,本文将从网卡型号识别、驱动查找、安装配置到故障排查,详细讲解Linux环境下网卡驱动的完整设置流程。

linux如何设置网卡驱动

识别网卡型号

在设置驱动前,首先需要准确识别网卡的厂商和型号,这是查找对应驱动的关键,Linux系统提供了多种命令工具用于硬件信息查询,可根据网卡接口类型(如PCIe、USB)选择合适命令。

PCIe/PCI网卡识别

对于台式机或服务器中常见的PCIe/PCI网卡,可使用lspci命令查看,若未安装pciutils包,需先通过包管理器安装(如Ubuntu/Debian系统执行sudo apt install pciutils,CentOS/RHEL系统执行sudo yum install pciutils)。
执行以下命令列出所有PCI设备:

lspci -nnk

-nn参数以数字代码显示厂商和设备ID,-k参数显示驱动信息,输出结果中,以“Ethernet controller”开头的行即为网卡设备,

03:00.0 Ethernet controller [0200]: Intel Corporation I350 Gigabit Network Connection [8086:1528]  
    Subsystem: Dell Inc I350 Gigabit Network Connection [1028:0533]  
    Kernel driver in use: igb  
    Kernel modules: igb  

此处“8086:1528”为厂商和设备ID(8086为Intel厂商ID,1528为设备ID),“igb”为当前已加载的驱动模块。

USB网卡识别

对于USB接口的网卡(如外置无线网卡或USB转有线网卡),使用lsusb命令查看(需安装usbutils包):

lsusb -v

输出结果中,以“Ethernet adapter”或“Network adapter”开头的行即为USB网卡,

Bus 001 Device 005: ID 0bda:8153 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet Adapter  
    Device Descriptor:  
      bLength                18  
      bDescriptorType         1  
    ...  

“0bda:8153”即为Realtek RTL8153网卡的ID。

查看详细硬件信息

若需更详细的硬件信息(如网卡制造商、产品名称),可安装lshw工具:

sudo apt install lshw  # Ubuntu/Debian
sudo yum install lshw  # CentOS/RHEL
sudo lshw -C network

该命令会列出所有网络设备的详细信息,包括制造商、型号、驱动版本等。

确定对应驱动型号

根据识别到的网卡厂商和设备ID,可通过以下途径查找对应的Linux驱动:

内核官方文档

Linux内核源码中的Documentation/networking/device_drivers/目录下,按厂商分类列出了各网卡驱动的支持情况,Intel网卡驱动文档位于Intel.txt,可通过以下命令查看(需安装内核文档):

zcat /usr/src/linux/Documentation/networking/device_drivers/Intel.txt.gz

内核模块信息

使用modinfo命令查看内核中已包含的驱动模块信息,例如查询Intel的igb模块:

linux如何设置网卡驱动

modinfo igb

输出结果会显示模块支持的设备ID(supported参数),若网卡ID在其中,则说明内核原生支持该驱动。

在线数据库

  • Linux Hardware Database(https://linux-hardware.org/):可输入网卡ID查询驱动信息及用户反馈。
  • PCI ID Repository(https://pci-ids.ucw.cz/):查询厂商和设备ID的详细定义,辅助确认网卡型号。

常见网卡厂商及驱动模块对照表

厂商 常用驱动模块 适用网卡型号示例
Intel e1000e, igb, ixgbe, i40e, ice I210/I350/X710/XXV710系列
Realtek r8169, r8125, r8152 RTL8111/8168/8125/8152系列
Broadcom bnx2, tg3, bnx2x NetXtreme BCM5719/BCM57810系列
Qualcomm Atheros alx, atlantic, ath10k AR8161/AR8327/QCA8337系列
Mellanox mlx4, mlx5, mlxsw_core ConnectX-2/ConnectX-4/ConnectX-5系列

安装与配置网卡驱动

根据驱动类型(内核原生、第三方源码、发行版仓库),选择不同的安装方式。

内核原生驱动加载

多数主流网卡(如Intel、Realtek部分型号)的驱动已集成到Linux内核中,只需手动加载模块即可。

  • 加载模块:使用modprobe命令加载驱动模块,例如加载Intel的igb模块:
    sudo modprobe igb
  • 查看加载状态:执行lsmod | grep igb,若输出包含igb模块且大小非0,则加载成功。
  • 开机自启:为避免重启后驱动失效,将模块加入/etc/modules文件:
    echo "igb" | sudo tee -a /etc/modules

使用发行版仓库安装驱动

若驱动未包含在内核中,但发行版仓库提供了对应驱动包,可通过包管理器安装。

不同发行版驱动包安装命令对比

发行版 驱动包类型 安装命令示例(以Intel igb驱动为例)
Ubuntu 22.04 dkms驱动包 sudo apt install igb-dkms
CentOS 7 kmod内核模块包 sudo yum install kmod-igb
openSUSE kernel驱动 sudo zypper install kernel-default-igb
Arch Linux extra/community sudo pacman -S igb

安装完成后,需重启系统或手动加载模块(modprobe igb),并通过ip link show查看网卡是否识别为ethX(如eth0ens33)。

第三方源码编译安装

部分特殊型号网卡(如老旧硬件或厂商最新发布的网卡)可能需要从源码编译驱动,以Realtek RTL8125驱动(r8125)为例:

  • 安装编译工具
    sudo apt install build-essential linux-headers-$(uname -r)  # Ubuntu/Debian
    sudo yum install gcc kernel-devel kernel-headers          # CentOS/RHEL
  • 下载驱动源码:从厂商官网或GitHub获取源码(如Realtek官网的“Linux Driver”):
    wget https://github.com/zer0-byte/rtl8125-linux-driver/archive/master.zip
    unzip master.zip
    cd rtl8125-linux-driver-master
  • 编译安装
    sudo make clean
    sudo make
    sudo make install
    sudo make load  # 加载模块
  • 配置dkms(可选):为使内核更新后驱动自动重新编译,安装dkms并添加驱动:
    sudo apt install dkms
    sudo dkms add ./  # 添加驱动到dkms
    sudo dkms build rtl8125/$(uname -r)  # 编译当前内核版本
    sudo dkms install rtl8125/$(uname -r)  # 安装

配置网络参数

驱动加载成功后,需配置网卡的IP地址、子网掩码、网关等参数,以实现网络通信。

临时配置(重启后失效)

使用ip命令配置静态IP(以eth0为例):

sudo ip addr add 192.168.1.100/24 dev eth0  # 设置IP和子网掩码
sudo ip link set eth0 up                     # 启用网卡
sudo ip route add default via 192.168.1.1    # 设置默认网关

永久配置(根据发行版选择)

  • Ubuntu 18.04+(Netplan):修改/etc/netplan/01-netcfg.yaml

    network:
      version: 2
      ethernets:
        eth0:
          dhcp4: no
          addresses: [192.168.1.100/24]
          gateway4: 192.168.1.1
          nameservers:
            addresses: [8.8.8.8, 114.114.114.114]

    执行sudo netplan apply生效。

  • CentOS 7/7+(NetworkManager):修改/etc/sysconfig/network-scripts/ifcfg-eth0

    TYPE=Ethernet
    BOOTPROTO=static
    IPADDR=192.168.1.100
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=8.8.8.8
    ONBOOT=yes

    执行sudo nmcli connection down eth0 && sudo nmcli connection up eth0生效。

    linux如何设置网卡驱动

验证驱动加载与网络状态

检查驱动是否加载

lsmod | grep <驱动模块名>  # lsmod | grep igb
dmesg | grep <驱动模块名>  # 查看驱动加载日志(是否有错误信息)

检查网卡状态

ip link show              # 查看网卡是否为UP状态
ip addr show <网卡名>     # 查看IP地址配置(ip addr show eth0)
ping 192.168.1.1          # 测试网关连通性
ping www.baidu.com         # 测试外网连通性(需配置DNS)

使用ethtool查看驱动信息

sudo ethtool -i <网卡名>  # 查看驱动名称、版本等信息(ethtool -i eth0)
sudo ethtool <网卡名>     # 查看网卡速率、双工模式等

常见故障排查

  1. 驱动加载失败

    • 检查内核版本是否匹配(uname -r查看内核版本,确保与驱动源码或包版本兼容)。
    • 查看dmesg日志,确认是否有“模块签名无效”或“设备不支持”等错误(可尝试禁用模块签名验证:sudo modprobe -r <模块名> && sudo modprobe --force <模块名>)。
    • 确认网卡硬件是否正常(如PCIe插槽是否接触不良、USB网卡供电是否充足)。
  2. 网卡识别为“unknown”
    可能是驱动未加载或驱动版本不兼容,尝试重新加载驱动或升级内核。

  3. 网络不通但驱动已加载
    检查IP配置、网关、DNS是否正确,确认防火墙(如iptablesfirewalld)是否拦截流量,或交换机/路由器端口是否开启。

相关问答FAQs

问题1:驱动安装后,执行ip link show显示网卡状态为DOWN,无法启用怎么办?
解答:首先检查驱动是否正确加载(lsmod | grep <模块名>),若未加载则尝试手动加载(sudo modprobe <模块名>),若已加载但状态为DOWN,可能是硬件冲突或驱动配置问题,可通过以下步骤排查:

  1. 执行sudo dmesg | grep <网卡名>查看是否有错误信息(如“resource busy”表示资源占用)。
  2. 尝试卸载驱动后重新加载:sudo modprobe -r <模块名> && sudo modprobe <模块名>
  3. 检查BIOS中网卡是否被禁用(部分服务器需在BIOS中开启“Onboard Devices”)。
  4. 若为USB网卡,尝试更换USB接口或检查供电不足问题。

问题2:如何查看当前Linux系统网卡使用的驱动模块名称?
解答:有以下几种常用方法:

  1. 使用ethtool命令:执行sudo ethtool -i <网卡名>,输出结果中的driver字段即为驱动模块名称。

    sudo ethtool -i eth0

    输出:

    driver: igb
    version: 5.15.0-52-generic
    firmware-version: 0.17-1
    expansion-rom-version: 
    bus-info: 0000:03:00.0
    supports-statistics: yes
    supports-test: yes
    supports-eeprom-access: no
    supports-register-dump: yes
    supports-priv-flags: no

    此处driver: igb表示网卡eth0使用的驱动模块为igb

  2. 查看/sys文件系统:进入/sys/class/net/<网卡名>/device/driver/module目录,执行basename $(readlink /sys/class/net/<网卡名>/device/driver)即可获取驱动模块名。

    basename $(readlink /sys/class/net/eth0/device/driver)

    输出:igb

  3. 使用lspci命令:执行lspci -nnk | grep -A 5 "Ethernet controller",在“Kernel driver in use”行查看驱动模块名称(如前文“识别网卡型号”部分所示)。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/25817.html

(0)
酷番叔酷番叔
上一篇 1小时前
下一篇 1小时前

相关推荐

  • 软件源更新失败怎么办?

    在Linux系统中,即使没有预装编译器(如GCC),用户依然可以通过包管理器安装预编译的二进制软件包,无需手动编译,以下是详细解决方案:为什么无需编译器也能安装软件?Linux发行版通过包管理器(如apt、yum)提供预编译的二进制软件包,这些软件包已由官方或维护者编译完成,用户直接下载安装即可,无需本地编译……

    2025年8月5日
    2200
  • 硬盘安装linux如何分区格式化硬盘

    硬盘安装 Linux 时,可使用分区工具如 fdisk 或 parted 创建分区,再用 mkfs.

    2025年8月16日
    1700
  • Linux如何运行MySQL数据库?

    在Linux系统中运行MySQL数据库是服务器部署中的常见场景,其过程涉及环境准备、安装配置、服务管理、安全设置及日常维护等多个环节,以下从实践角度详细说明具体步骤和注意事项,环境准备与安装系统环境选择Linux发行版中,Ubuntu/Debian和CentOS/RHEL是主流选择,以Ubuntu 22.04和……

    15小时前
    100
  • linux如何查看带宽占用情况

    Linux 中,可使用 nload、ifstat 等命令查看带宽

    2025年8月10日
    1300
  • Linux如何彻底卸载VirtualBox?

    卸载前的准备备份虚拟机数据卸载前务必备份所有虚拟机文件(默认位于 ~/VirtualBox VMs/),避免误删重要数据,关闭相关进程确保所有VirtualBox虚拟机已关闭,并终止后台进程:vboxmanage list runningvms # 检查运行中的虚拟机vboxmanage controlvm……

    2025年7月16日
    2100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信