Use*_*erK 88 kernel-modules linux-kernel
我正在寻找一些内核模块来加载i2c-dev和i2c-bcm2708. 但modprobe命令返回:
sudo modprobe i2c-dev
modprobe: module i2c-dev not found in modules.dep
Run Code Online (Sandbox Code Playgroud)
如何列出系统中所有可用的模块?它们位于哪个目录中?
jim*_*mij 106
默认情况下,modprobe从位于/lib/modules/$(uname -r)目录中的内核子目录加载模块。通常所有文件都有扩展名.ko,所以你可以用
find /lib/modules/$(uname -r) -type f -name '*.ko'
Run Code Online (Sandbox Code Playgroud)
或者,考虑到压缩文件:
find /lib/modules/$(uname -r) -type f -name '*.ko*'
Run Code Online (Sandbox Code Playgroud)每个模块也可以通过引用它的别名来加载,存储在/lib/modules/$(uname -r)/modules.alias(和modules.alias.bin)中。
但是,要成功加载模块,modprobe需要在文件中列出它们的依赖项/lib/modules/$(uname -r)/modules.dep(以及相应的二进制版本modules.dep.bin)。如果系统上存在某个模块,但不在列表中,那么您应该运行一个命令depmod,该命令将生成此类依赖项并自动将您的模块包含到modules.dep和 中modules.dep.bin。
此外,如果模块成功加载,它将在文件中列出/proc/modules(也可以通过 command 访问lsmod)。
Mar*_*sen 12
键入modprobe并按 Tab,自动完成列表应包含所有可加载模块
小智 9
Arch Linux 中有lsmod一个kmod包命令,它列出并显示包含其他有用命令的 Linux 内核模块的状态,例如, 。modinformmod modprobe
要升IST由您可以键入程序包提供的所有二进制文件:
pacman -Ql kmod | grep /bin/ --color=always
Run Code Online (Sandbox Code Playgroud)
,你也可以检查该Ø用二进制的wner包pacman -Qo lsmod。
Q开关是q uery本地安装的软件包(不像S到小号ynchronize,即远程查看)。
我更喜欢使用depmod. 使用命令:depmod -av|grep MOD_NAME,您的系统将生成modules.dep/map 文件并通过它进行grep。该-v参数对于详细程度非常重要,并-a确保所有可能的模块都/lib/modules/用于modules.dep 文件。
这样就可以确保所请求的内核模块被映射到可加载的内核。当输出中没有列出所需的内核模块时,您就知道内核找不到它。
您可以检查自动补全是如何执行的:
$ complete -p modprobe
complete -F _modprobe modprobe
declare -f _modprobe
_modprobe ()
{
...
Run Code Online (Sandbox Code Playgroud)
在该函数中有一个内部_installed_modules
$ declare -f _installed_modules
_installed_modules ()
{
COMPREPLY=($(compgen -W "$(PATH="$PATH:/sbin" lsmod |
awk '{if (NR != 1) print $1}')" -- "$1"))
}
Run Code Online (Sandbox Code Playgroud)
所以lsmod | awk '{if (NR != 1) print $1}'应该显示模块列表
| 归档时间: |
|
| 查看次数: |
204364 次 |
| 最近记录: |