商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 系统应用 > Linux怎么查看具体的内核模块列表

Linux怎么查看具体的内核模块列表

  发布于2026-08-14 阅读(0)

扫一扫,手机访问

要看内核里此刻到底加载了哪些模块,最直接、也最可靠的就是lsmod。它会读取/proc/modules,并输出模块名、大小(字节)以及Used by(引用计数和依赖模块)这些关键信息。不过要特别注意,Used by显示为0,并不等于这个模块就是空闲的;另外,模块名本身不带.ko后缀,而且大小写是严格区分的。真要做过滤,最好配合awk+grep正则来处理,这样更不容易漏掉目标。

Linux怎么查看具体的内核模块列表

直接用 lsmod 查当前已加载的模块

lsmod 是唯一能告诉你“此刻哪些模块真正在内核里跑着”的命令。它读的是 /proc/modules,不是磁盘上的文件列表,所以结果反映的是真实运行状态。

  • 执行 lsmod 就能看到三列:模块名、字节数大小、Used by(引用计数 + 依赖模块名)
  • Used by 列数字为 0 ≠ 模块空闲——比如 nvidia 正在渲染画面时,Used by 可能是 0,但 rmmod nvidia 仍会失败,报错 Module nvidia is in use
  • 模块名不带 .ko 后缀,也不含路径;insmod ./hello.ko 加载后,在 lsmod 输出里只显示 hello,除非模块代码里写了 MODULE_ALIAS

lsmod | grep 过滤时总找不到?注意模块名变体和大小写

直接 lsmod | grep nvme 可能漏掉 nvme_corenvme_pci,因为驱动常拆成多个关联模块。

  • 稳妥做法是:lsmod | awk '{print $1}' | grep -E '^(nvme|nvidia|usb|vfio)' —— 先取第一列模块名,再用正则匹配常见前缀
  • 模块名严格区分大小写:NVIDIAnvidia 是两个东西,实际加载名永远小写
  • 闭源模块(如 nvidia)若被标记为 tainted,lsmod 默认不显示 T 标志,得看 /proc/modules 原始行末尾才有

确认模块是否“可用”而非“已加载”,用 modprobe -l

lsmod 只管内存里的,而 modprobe -l 列的是磁盘上所有预编译好的 .ko 文件路径,适合查“系统有这个模块但没加载”的情况。

  • modprobe -l | grep ^/lib/modules/$(uname -r)/kernel/drivers/net/ | head -5 可快速定位网卡驱动位置
  • 输出路径含压缩后缀(如 .ko.xz)说明模块被压缩存储,modprobe 加载时自动解压,insmod 不能直接处理这类文件
  • 如果 modprobe -l | grep xxx 无输出,但你知道模块应该存在,大概率是 depmod -a 没跑过,或 /lib/modules/$(uname -r) 下根本没对应目录

模块加载失败?别只盯 lsmod,要配合 dmesg | tailmodinfo

lsmod 空了不代表没试过加载——失败的模块根本不会出现在里面。这时候得看内核日志和模块元数据。

  • dmesg | tail -20 通常包含最近加载失败的提示,例如 Unknown symbol in module 表示依赖缺失,Operation not permitted 往往是模块签名验证失败(CONFIG_MODULE_SIG_FORCE 开启)
  • modinfo xxx 能确认模块是否存在、路径对不对、有没有 depends: 字段——比如 modinfo veth 显示依赖 cfg80211,那得先确保后者已加载
  • modprobe --showconfig | grep -A5 xxx 查该模块是否被 blacklistinstall 指令覆盖,这是“明明有模块却死活不加载”的高频原因
真正难的不是列出模块,而是判断某个模块为什么没出现在 lsmod 输出里——它可能根本没被调用,可能加载失败被内核拒之门外,也可能被配置规则静默拦截。盯着 lsmod 本身,永远只能看到冰山浮出水面的那一角。
本文转载于:https://www.php.cn/faq/2979005.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注