如何在没有 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 指令来更改模块参数,除非内核使用模块默认参数加载模块