想知道系统启动时加载的内核模块的名称是否有特定的列表或位置。
lsmod
类似或 之类的命令cat /proc/kallsyms
仅显示已加载的命令。
想要确定哪些是已经手动加载的模块。
提前致谢!
答案1
可能有多个列表:一个列表用于在 initramfs 中加载的内核模块(即基本 I/O 和访问根文件系统所需的模块),另一个列表在挂载根文件系统后加载。
对于 Debian 和 Ubuntu 等相关 Linux 发行版,initramfs 中有要/etc/initramfs-tools/modules
加载的模块(按列出的特定顺序),以及/etc/modules-load.d/
用于指定在根文件系统可访问后要加载的模块的下拉目录。
对于使用dracut
initramfs 创建器的任何发行版,您可能需要查看/etc/dracut.conf
和/或和/或行/etc/dracut.conf.d/*.conf
的文件:这些将导致指定的模块被添加到 initramfs 中,并且在 的情况下,无论硬件检测如何,都会显式加载。add_drivers
force_drivers
filesystems
force_drivers
除此之外,在现代系统上,许多模块通常是通过硬件自动检测来加载的:内核会将在任何具有自动检测功能的总线上检测到的硬件 ID 格式化为特定的模块别名,并且模块本身将包含与其硬件相匹配的通配符字符串。支持。如果找到匹配,则加载匹配的模块。每个驱动模块通常都会有更详细的硬件检测例程,可以进一步验证模块与硬件之间的兼容性。
在没有自动检测功能的系统总线的架构上(例如 RasPi 和各种嵌入式设备),“设备树”(.dtb
附加到内核映像或由引导加载程序单独加载的文件)将描述系统硬件:它包括标识符用于兼容的“编程模型”,内核将使用它来形成模块别名字符串,以便自动加载适当的模块。
内核开发人员的目标是尽可能合理地自动加载内核模块。