Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 以太網卡驅動原理、安裝配置與故障排查全攻略

編輯:Linux 教學

一、網卡驅動工作原理

1. Linux 網絡協議棧與驅動位置

Linux 內核實現了 OSI 模型第 3 層(網絡層)及以上協議。網卡驅動位於 數據鏈路層(第 2 層)與物理層(第 1 層)的接口,負責:

  • 發送:內核調用驅動 ndo_start_xmit 將 skb 推送到硬件發送隊列
  • 接收:網卡產生中斷 → 驅動 ISR 分配 skb → 填充數據 → netif_receive_skb 上交協議棧
  • 控制:ioctl/ethtool 配置速率、雙工、MAC、VLAN、硬件卸載等

2. 驅動核心數據結構

struct net_device_ops {
    int (*ndo_open)(struct net_device *dev);
    int (*ndo_stop)(struct net_device *dev);
    netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb, struct net_device *dev);
    int (*ndo_set_mac_address)(struct net_device *dev, void *addr);
    // ... 更多操作
};

3. 工作參數分類

參數類型典型值適用場景
I/O 基址0x300, 0x280ISA/舊式 PCI,端口 I/O 模式
中斷號 (IRQ)5, 9, 10, 11所有模式必需,避免衝突
DMA 通道1, 3, 5總線主控 DMA 模式,減輕 CPU
共享內存0xD0000-0xDFFFF高性能舊式網卡

現代 PCI/PCIe 網卡通過 PCI 配置空間 自動分配資源,無需手工設置。

二、驅動部署方式:內建 vs 模塊

維度內建內核 (builtin)可加載模塊 (.ko)
加載時機啟動階段自動探測運行時手動/自動 modprobe
參數傳遞內核命令行 ether=...modprobe param=val 或 /etc/modprobe.d/
內存佔用常駐,不可卸載按需加載,rmmod 釋放
適用場景核心設備、啟動必需熱插拔、多硬件兼容、調試

三、安裝前準備清單

硬件

  • 以太網卡(PCI/PCIe/USB)
  • 雙絞線 + RJ45 水晶頭(100BASE-TX/1000BASE-T)

軟件

  • Linux 發行版(內核 2.6+/3.x/4.x/5.x)
  • 驅動源碼或預編譯 .ko 文件
  • 開發工具鏈:gcc、make、kernel-headers/kernel-devel

系統信息

# 查看可用中斷
cat /proc/interrupts
# 查看 I/O 端口占用
cat /proc/ioports

四、手工安裝驅動步驟

場景 A:源碼編譯為模塊

# 1. 解壓驅動源碼
tar -xzf e1000e-3.8.4.tar.gz
cd e1000e-3.8.4/src

# 2. 編譯(需匹配當前內核版本的 kernel-devel)
make

# 3. 安裝模塊
sudo make install
# 或手動複製:
# sudo cp e1000e.ko /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/e1000e/

# 4. 更新模塊依賴
sudo depmod -a

# 5. 加載驅動
sudo modprobe e1000e

場景 B:預編譯模塊

# 複製到正確目錄
sudo cp e1000e.ko /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/e1000e/
sudo depmod -a
sudo modprobe e1000e

場景 C:編譯進內核(需重編內核)

# 1. 配置內核
make menuconfig
# Device Drivers → Network device support → Ethernet driver support → Intel devices → <*> Intel PRO/1000 PCI-Express Gigabit Ethernet support

# 2. 編譯安裝內核
make -j$(nproc)
sudo make modules_install install

五、驅動參數配置

1. 模塊參數文件(推薦)

# /etc/modprobe.d/e1000e.conf
options e1000e InterruptThrottleRate=3,3 RSS=1,1

2. 內核命令行參數(內建驅動)

# GRUB_CMDLINE_LINUX 中添加
e1000e.InterruptThrottleRate=3,3 e1000e.RSS=1,1

3. 運行時動態調整(ethtool)

# 查看/設置協商模式
ethtool eth0
ethtool -s eth0 speed 1000 duplex full autoneg on

# 啟用/關閉硬件卸載
ethtool -K eth0 rx on tx on sg on tso on gso on

六、網絡接口配置

1. 傳統 ifcfg 文件

# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
ONBOOT=yes
NM_CONTROLLED=no

2. NetworkManager (nmcli)

nmcli con add type ethernet con-name eth0 ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1
nmcli con mod eth0 ipv4.dns "114.114.114.114 8.8.8.8"
nmcli con up eth0

3. systemd-networkd

# /etc/systemd/network/20-eth0.network
[Match]
Name=eth0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=114.114.114.114

七、常見故障排查

現象排查步驟常見解決
啟動未檢測到網卡lspci | grep -i ethernet 確認硬件存在 → dmesg | grep -i eth 查驅動日志安裝對應驅動模塊;更新內核;BIOS 開啟板載網卡
驅動加載但無 ethXip link 查看命名(可能為 enp3s0、ens33)使用新命名配置;或用 udev 規則重命名
連接不上/掉包ethtool eth0 看 Speed/Duplex;dmesg -T 看錯誤關閉自協商強制千兆全雙工;換線/換口;關閉 TSO/GSO
性能低sar -n DEV 1 ethtool -S eth0 看隊列溢出開啟 RSS/RPS/RFS;調整隊列長度 ethtool -G;多隊列綁核

八、現代工具鏈推薦

  • 驅動管理:dkms 自動適配內核升級
  • 流量分析:tcpreplay、iperf3、bpftrace
  • 內核旁路:DPDK、XDP/eBPF(高性能場景)

總結

Linux 網卡驅動已高度成熟,絕大多數硬件開箱即用。手工安裝僅在極新硬件、極舊內核或定制優化場景需要。核心技能點:

  1. 理解驅動在協議棧中的位置與數據流向
  2. 掌握 modprobe/dkms 模塊生命周期管理
  3. 熟練使用 ethtool 診斷鏈路狀態與調優參數
  4. 適配 systemd-networkd/NetworkManager 等現代網絡管理工具
Copyright © Windows教程網 All Rights Reserved