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
模块:
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
(如eth0
、ens33
)。
第三方源码编译安装
部分特殊型号网卡(如老旧硬件或厂商最新发布的网卡)可能需要从源码编译驱动,以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
生效。
验证驱动加载与网络状态
检查驱动是否加载
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 <网卡名> # 查看网卡速率、双工模式等
常见故障排查
-
驱动加载失败
- 检查内核版本是否匹配(
uname -r
查看内核版本,确保与驱动源码或包版本兼容)。 - 查看
dmesg
日志,确认是否有“模块签名无效”或“设备不支持”等错误(可尝试禁用模块签名验证:sudo modprobe -r <模块名> && sudo modprobe --force <模块名>
)。 - 确认网卡硬件是否正常(如PCIe插槽是否接触不良、USB网卡供电是否充足)。
- 检查内核版本是否匹配(
-
网卡识别为“unknown”
可能是驱动未加载或驱动版本不兼容,尝试重新加载驱动或升级内核。 -
网络不通但驱动已加载
检查IP配置、网关、DNS是否正确,确认防火墙(如iptables
、firewalld
)是否拦截流量,或交换机/路由器端口是否开启。
相关问答FAQs
问题1:驱动安装后,执行ip link show
显示网卡状态为DOWN,无法启用怎么办?
解答:首先检查驱动是否正确加载(lsmod | grep <模块名>
),若未加载则尝试手动加载(sudo modprobe <模块名>
),若已加载但状态为DOWN,可能是硬件冲突或驱动配置问题,可通过以下步骤排查:
- 执行
sudo dmesg | grep <网卡名>
查看是否有错误信息(如“resource busy”表示资源占用)。 - 尝试卸载驱动后重新加载:
sudo modprobe -r <模块名> && sudo modprobe <模块名>
。 - 检查BIOS中网卡是否被禁用(部分服务器需在BIOS中开启“Onboard Devices”)。
- 若为USB网卡,尝试更换USB接口或检查供电不足问题。
问题2:如何查看当前Linux系统网卡使用的驱动模块名称?
解答:有以下几种常用方法:
-
使用
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
。 -
查看
/sys
文件系统:进入/sys/class/net/<网卡名>/device/driver/module
目录,执行basename $(readlink /sys/class/net/<网卡名>/device/driver)
即可获取驱动模块名。basename $(readlink /sys/class/net/eth0/device/driver)
输出:
igb
。 -
使用
lspci
命令:执行lspci -nnk | grep -A 5 "Ethernet controller"
,在“Kernel driver in use”行查看驱动模块名称(如前文“识别网卡型号”部分所示)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/25817.html