当前位置:首页 > Linux > 正文

Linux内核编译模块查询方法

查看已编译的内核模块,最直接方法是检查内核配置文件: , grep '=m' /boot/config-$(uname -r) ,或使用 zcat /proc/config.gz | grep '=m'(若支持)。

在Linux系统中,了解内核编译时启用了哪些模块对系统管理、驱动调试和安全审计至关重要,以下是几种专业且可靠的查看方法,所有操作均需root权限:


方法1:直接查看内核配置文件(推荐)

内核编译配置通常存储在/boot目录下,文件名格式为config-$(uname -r)
操作步骤:

Linux内核编译模块查询方法  第1张

# 1. 定位当前内核版本的配置文件
ls /boot/config-$(uname -r)
# 2. 查看所有编译的模块(含状态)
grep =m /boot/config-$(uname -r)
# 3. 检查特定模块(如ext4文件系统)
grep CONFIG_EXT4_FS /boot/config-$(uname -r)
  • 输出说明
    =y表示功能直接编译进内核(非模块)
    =m表示以模块形式编译
    # CONFIG_XXX is not set表示未启用

️ 方法2:通过/proc文件系统(需内核支持)

若内核启用了CONFIG_IKCONFIG_PROC选项,可通过虚拟文件查看配置:

zcat /proc/config.gz | grep =m
  • 注意:若提示/proc/config.gz不存在,说明内核未启用此功能。

方法3:检查已加载模块(运行时状态)

此方法仅显示当前加载的模块(非全部编译模块):

lsmod        # 列出已加载模块
lsmod | grep nvidia  # 过滤特定模块

方法4:源码编译场景

若您自行编译过内核,可在源码目录查看.config文件:

cat /path/to/kernel-source/.config | grep =m

关键注意事项

  1. 模块 vs 内置功能
    • 模块:动态加载(.ko文件,位于/lib/modules/$(uname -r)/kernel/
    • 内置:直接集成到内核(不可卸载)
  2. 发行版差异
    CentOS/RHEL的配置文件在/boot,Arch Linux可能需安装linux-headers
  3. 安全实践
    通过grep CONFIG_MODULES /boot/config-$(uname -r)确认模块功能是否启用(避免反面模块加载)。

引用说明

  • 方法依据Linux内核官方文档《Kernel Build System》及CONFIG_IKCONFIG选项说明。
  • 文件路径规范参考Filesystem Hierarchy Standard (FHS 3.0)。
  • 命令验证环境:Linux kernel 5.15+ (Ubuntu 22.04/CentOS 9)。

通过以上方法,您可准确掌握内核编译的模块信息,为系统优化和故障排查提供权威依据。

0