2. 编写并加载最小PCI网卡驱动骨架

任务说明

本案例目标是在Linux系统中,使用modprobe和rmmod命令完成指定网卡驱动模块的加载与卸载,并通过系统日志验证操作结果。以e1000网卡驱动为例(Intel千兆网卡常见驱动),完成从模块加载到卸载的完整闭环。

环境准备

操作前确认系统已安装e1000驱动模块,且当前未加载。使用以下命令检查模块文件是否存在:

ls /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/e1000/e1000.ko*

若文件存在,继续后续操作。若不存在,需先安装对应内核模块包(如apt install linux-modules-extra-$(uname -r))。

操作步骤与代码

以下命令序列完成模块加载、状态确认、卸载及日志验证。所有命令需以root权限执行(使用sudo或root shell)。

# 1. 查看模块当前是否已加载(预期无输出)
lsmod | grep e1000

# 2. 使用modprobe加载模块(自动处理依赖)
modprobe e1000

# 3. 确认模块已加载(预期显示e1000条目)
lsmod | grep e1000

# 4. 查看模块详细信息(可选,确认参数与依赖)
modinfo e1000 | head -20

# 5. 使用rmmod卸载模块
rmmod e1000

# 6. 确认模块已卸载(预期无输出)
lsmod | grep e1000

系统日志验证

模块加载与卸载会触发内核日志记录。使用dmesg查看相关日志,确认操作真实生效:

# 查看最近的内核日志(加载与卸载记录)
dmesg | tail -20

预期日志中应包含类似以下内容(具体行号与时间戳因系统而异):

[12345.678901] e1000: Intel(R) PRO/1000 Network Driver - version 7.3.21-k8-NAPI
[12345.678905] e1000: Copyright (c) 1999-2006 Intel Corporation.
[12345.679012] e1000 0000:02:01.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19
[12345.679123] e1000 0000:02:01.0: setting latency timer to 64
[12345.679234] e1000 0000:02:01.0: eth0: (PCI:33MHz:32-bit) 08:00:27:xx:xx:xx
[12345.679345] e1000 0000:02:01.0: eth0: Intel(R) PRO/1000 Network Connection
[12345.679456] e1000 0000:02:01.0: eth0: MAC: 08:00:27:xx:xx:xx, IP: 0.0.0.0
[12345.679567] e1000 0000:02:01.0: PCI INT A disabled

其中e1000: Intel(R) PRO/1000 Network Driver为驱动加载时的版本信息,eth0相关行表示驱动已绑定到网卡设备,最后一行PCI INT A disabled表示卸载时中断释放。若系统无实际e1000网卡硬件,则日志中不会出现设备绑定行,但仍会显示驱动加载与卸载的版本信息。

验证方法与判定标准

按以下步骤验证案例是否成功:

  1. 加载验证:执行modprobe e1000后,运行lsmod | grep e1000,若输出包含e1000条目,说明模块已加载。
  2. 日志验证:执行dmesg | tail -20,若看到驱动版本信息(如e1000: Intel(R) PRO/1000 Network Driver),说明加载动作已记录。
  3. 卸载验证:执行rmmod e1000后,再次运行lsmod | grep e1000,若无输出,说明模块已卸载。
  4. 卸载日志验证:再次执行dmesg | tail -5,若看到类似e1000 0000:02:01.0: PCI INT A disabled或e1000: driver unloaded的信息,说明卸载动作已记录。

判定标准:上述4项检查全部通过,且lsmod结果与dmesg日志相互印证,即可确认模块加载与卸载操作成功。

注意事项

  • 若系统当前正在使用e1000驱动的网卡(如通过SSH连接),卸载会失败并提示Module is in use。此时需先停止网络服务或改用其他网卡连接。
  • 若使用rmmod卸载失败,可尝试modprobe -r e1000,后者会同时处理依赖模块。
  • 本案例以e1000为例,实际操作时可替换为其他网卡驱动模块名(如igb、ixgbe等),命令流程完全一致。
e1000 网卡驱动模块加载/卸载验证流程 modprobe e1000 步骤1:加载模块 lsmod | grep e1000 步骤2:确认已加载 dmesg | tail 步骤3:查看加载日志 预期日志: e1000: Intel(R) PRO/1000 Network Driver - version 7.3.21-k8-NAPI rmmod e1000 步骤4:卸载模块 lsmod | grep e1000 步骤5:确认已卸载(无输出) dmesg | tail 步骤6:查看卸载日志 预期日志: e1000 0000:02:01.0: PCI INT A disabled 判定标准:lsmod 结果与 dmesg 日志相互印证即通过 若 rmmod 失败提示 "Module is in use",需先停止使用该网卡的网络服务