Linux之kmod

背景

最近在解决某些问题的时候,发现了内核模块很多以前没怎么接触的配置和用法,所以想深入了解下modinfodepmod等这些内核模块工具,想简单看看其背后一些原理,但是发现这些工具的路径都指向了/bin/kmod

$ ls -all $(which modinfo)
lrwxrwxrwx 1 root root 9 75  2021 /usr/sbin/modinfo -> /bin/kmod

可能很多人听到kmod会很陌生,但是像insmodmodprobelsmod等工具会很熟悉。没错,这些工具都是属于kmod包的,所以就会发现上面的现象。

关于kmod

kmod 是 Linux 系统中用于管理内核模块(kernel modules)的工具包。它提供了一组用户空间工具,用于加载、卸载、列出和查询内核模块、解决依赖关系和别名等。kmodmodule-init-tools 的替代品,与与 module-init-tools 项目的工具、配置和索引保持兼容,自 Linux 内核 3.0 版本以后成为默认的内核模块管理工具。

这些工具基于 libkmod 开发,libkmod是一个随 kmod 一起提供的库。有关该库的更多详细信息以及如何使用它,请参阅 libkmod/README

官方git:https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git

kmod 包提供了以下常用工具:

  • modprobe:加载或卸载内核模块,自动处理依赖关系。
  • insmod:加载指定的内核模块(不处理依赖)。
  • rmmod:卸载指定的内核模块。
  • lsmod:列出当前加载的内核模块。
  • modinfo:显示内核模块的详细信息。
  • depmod:生成模块依赖关系文件。

所以也就对应了kmod 的主要功能:

  1. 加载内核模块:

    • 使用 modprobe 或 insmod 加载内核模块。
  2. 卸载内核模块:

    • 使用 rmmod 或 modprobe -r 卸载内核模块。
  3. 列出已加载的模块:

    • 使用 lsmod 查看当前加载的内核模块。
  4. 查询模块信息:

    • 使用 modinfo 查看内核模块的详细信息。
  5. 解决模块依赖:

    • modprobe 可以自动解决模块之间的依赖关系。

上面都是些关于kmod简单介绍,后面有时间会深入看看这些工具的详细使用及背后的原理。