如何在没有 modprobe.conf 的情况下加载(Linux 内核)网络模块

如何在没有 modprobe.conf 的情况下加载(Linux 内核)网络模块

如何在没有 modprobe.conf 的情况下加载(linux 内核)网络模块 我安装了 fedora 发行版,可以看到 e1000e 模块在系统中自动加载。

是否有指定自动加载该模块的配置?

我已经参考了 modprobe.conf,但是不存在这样的条目。就此而言,我已经 grep 了整个 /etc/ 目录来检查任何可以加载此模块的条目,但是无济于事。

请告诉我 1. 是否有任何配置文件提到在启动时自动加载特定模块? 2. 如果没有配置文件,系统如何获取模块?

谢谢!

答案1

它们是根据硬件检测来加载的。对于您的e1000e模块,您机器中的硬件(无论是板载还是插件卡)将使用 PCI 供应商 ID 和设备 ID 对来标识自己,并将这些与可用模块进行匹配,并且将加载任何使用该 ID 标识自己的模块。

e1000e您可以通过运行来查看与模块关联的 ID ,运行modinfo e1000e后将报告如下内容:

filename:       /lib/modules/3.9.5-301.fc19.x86_64/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
version:        2.2.14-k
license:        GPL
description:    Intel(R) PRO/1000 Network Driver
author:         Intel Corporation, <[email protected]>
srcversion:     28B371A0E50A24E26204016
alias:          pci:v00008086d00001559sv*sd*bc*sc*i*
alias:          pci:v00008086d0000155Asv*sd*bc*sc*i*
alias:          pci:v00008086d0000153Bsv*sd*bc*sc*i*
alias:          pci:v00008086d0000153Asv*sd*bc*sc*i*
...

只有很长的alias行列表,每一行都标识模块能够支持的特定 PCI 设备。

当设备出现时,Linux 内核将使用 uevents 将它们宣布给用户空间,然后 udev 守护进程将设备 ID 与模块数据库进行匹配并加载正确的模块。

答案2

在引导期间initrd,将加载初始 RAM 磁盘,其内容随后可用于第二阶段引导。请参阅 /boot。

该 RAM 磁盘通常包含未静态编译到内核中且系统启动所需的内核模块,即文件系统、RAID 控制器和网络的模块化驱动程序。

man initrd但有一个更好的解释。

答案3

你需要检查的第一件事是你的内核配置文件,看看你的模块是否内置在内核中,例如我的 redhat 5 服务器

grep -i e1000 /boot/config-$(uname -r) | grep -v ^#
CONFIG_E1000=m
CONFIG_E1000_NAPI=y
CONFIG_E1000E=m

当你插入 e1000 网卡时,内核使用内核用户模式 ​​api 调用 modprobe 程序“kernel.modprobe = /sbin/modprobe”

如果你的模块正在构建,你可以使用 modprobe.conf 用 options 指令来更改模块参数,除非内核使用模块默认参数加载模块

相关内容