3. 使用lspci与sysfs定位目标网卡PCI配置空间

使用lspci与sysfs定位目标网卡PCI配置空间 学习卡片

任务说明

本案例目标是通过 modinfo 和 depmod 两个命令,查看网卡驱动模块的依赖关系及参数信息。我们将以 Linux 内核自带的 e1000 网卡驱动模块为例,完成以下操作:

  1. 使用 modinfo 查看 e1000 模块的详细信息(包括依赖、参数、作者、描述等);
  2. 使用 depmod 生成模块依赖关系文件,并通过 modprobe --show-depends 查看 e1000 的实际依赖链;
  3. 验证模块参数是否可被读取,并确认依赖关系文件已正确生成。

环境准备

本案例需要一台装有 Linux 系统(内核版本 2.6+)且已安装 e1000 网卡驱动模块的主机。绝大多数发行版默认包含该模块。执行以下命令确认模块存在:

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

若输出文件路径,则模块可用。若未找到,可先执行 modprobe e1000 加载,或安装对应内核模块包(如 linux-modules-extra-$(uname -r))。

实现步骤

1. 使用 modinfo 查看模块信息

modinfo 直接读取模块文件中的元数据,无需加载模块即可显示信息。执行:

modinfo e1000

关键输出字段说明:

  • filename:模块文件路径;
  • license:许可证类型;
  • description:模块功能描述;
  • depends:该模块直接依赖的其他模块(逗号分隔);
  • parm:模块可接受的加载参数及其类型和默认值。

对于 e1000,典型输出中 depends 为空(表示无强制依赖),parm 包含 TxDescriptors、RxDescriptors、Speed、Duplex、AutoNeg、FlowControl 等参数。

2. 使用 depmod 生成依赖关系

depmod 扫描内核模块目录,生成 modules.dep 文件(含依赖关系)及 modules.symbols、modules.alias 等辅助文件。执行:

sudo depmod -a

该命令会为当前内核版本($(uname -r))更新 /lib/modules/$(uname -r)/modules.dep。若只想处理指定内核目录,可加 -b 参数指定根路径。

3. 查看实际依赖链

生成依赖文件后,使用 modprobe --show-depends 查看 e1000 的完整依赖链(包括间接依赖):

modprobe --show-depends e1000

该命令输出类似:

insmod /lib/modules/5.15.0-91-generic/kernel/drivers/net/ethernet/intel/e1000/e1000.ko

若 e1000 依赖其他模块(如 crc32c),则会在 insmod e1000 之前先列出对应模块的 insmod 行。

4. 验证模块参数可读

加载模块后,可通过 sysfs 查看当前参数值:

sudo modprobe e1000
ls /sys/module/e1000/parameters/
cat /sys/module/e1000/parameters/TxDescriptors

若输出数值(默认通常为 256),说明参数已生效且可读。

SVG:模块依赖与参数查看流程

e1000 网卡驱动模块依赖与参数查看流程 e1000.ko /lib/modules/.../e1000.ko modinfo e1000 读取模块元数据 depmod -a 生成 modules.dep modinfo 输出 filename: .../e1000.ko license: GPL depends: (空) parm: TxDescriptors:int parm: RxDescriptors:int parm: Speed:int depmod 生成文件 /lib/modules/$(uname -r)/ ├── modules.dep ├── modules.symbols └── modules.alias modprobe --show-depends e1000 → insmod .../e1000.ko 参数验证 modprobe e1000 cat /sys/module/e1000/ parameters/TxDescriptors

验证方法与判定标准

完成上述步骤后,按以下标准确认任务成功:

  1. modinfo 输出完整:执行 modinfo e1000 能显示 filename、license、description、depends、parm 等字段,且 parm 字段至少包含 3 个以上参数定义;
  2. 依赖文件已生成:执行 ls -l /lib/modules/$(uname -r)/modules.dep,文件存在且大小非零;
  3. 依赖链可解析:modprobe --show-depends e1000 能输出至少一行以 insmod 开头的完整路径,且路径指向的 .ko 文件真实存在;
  4. 参数可读:加载模块后,cat /sys/module/e1000/parameters/TxDescriptors 能输出一个整数值(默认 256),无错误提示。

以上四项全部满足,即判定本案例验证通过。若 depmod 因权限不足失败,请使用 sudo 重新执行;若 modinfo 提示模块不存在,请先确认内核模块包已正确安装。