A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
-bash: depmod command not found #Windows (WSL2) sudo apt-get update sudo apt-get install kmod #Debian apt-get install kmod #Ubuntu apt-get install kmod #Alpine apk add kmod #Arch Linux pacman -S kmod #Kali Linux apt-get install kmod #CentOS yum install kmod #Fedora dnf install kmod #Raspbian apt-get install kmod #Docker docker run cmd.cat/depmod depmod #Dockerfile dockerfile.run/depmod
depmod 命令可产生模块依赖的映射文件,在构建嵌入式系统时,需要由这个命令来生成相应的文件,由 modprobe
使用。
depmod 分析您的内核模块(在 /lib/modules/kernel-release
目录中)并创建一个依赖项列表(命名为 modules.dep
),以便在使用 modprobe 添加和删除模块时,没有模块没有它们需要的其他模块。同时,它创建一个映射,将硬件标识符和处理它们的模块关联起来。此映射用于在硬件请求时找到正确的模块。
内核依赖 depmod
和 modprobe
按照加载模块的顺序向它传递模块的原始数据。
depmod [-b basedir] [-e] [-E Module.symvers] [-F System.map] [-n] [-v] [-A] [-P prefix] [-w] [version] depmod [-e] [-E Module.symvers] [-F System.map] [-m] [-n] [-v] [-P prefix] [-w] [version] [filename...]
-a或--all:分析所有可用的模块; -d或debug:执行排错模式; -e:输出无法参照的符号; -i:不检查符号表的版本; -m<文件>或system-map<文件>:使用指定的符号表文件; -s或--system-log:在系统记录中记录错误; -v或--verbose:执行时显示详细的信息; -V或--version:显示版本信息; --help:显示帮助。
Linux 内核模块可以提供服务(称为“符号”)供其他模块使用(使用代码中的一个导出符号变体)。如果第二个模块使用此符号,则第二个模块显然依赖于第一个模块。这些依赖关系可能变得相当复杂。
depmod 通过读取 /lib/modules/kernel-release
下的每个模块并确定它导出的符号和需要的符号,创建一个模块依赖关系列表。默认情况下,此列表将写入 modules.dep
和名为 modules.dep.bin
的二进制哈希版本,位于同一目录中。如果在命令行中给出了文件名,则只检查这些模块(除非列出了所有模块,否则这些模块很少有用)。
depmod 还创建由 modules.symbols
文件及其二进制散列版本 modules.symbols.bin
中的模块提供的符号列表。
最后,如果模块提供了特殊的设备名(devname),则 depmod 将输出一个名为 modules.devname
的文件,该设备名应在启动时填充在 /dev
中(由 udev
等实用程序填充)。
如果提供了版本,则使用该内核版本的模块目录,而不是当前的内核版本(由
下面的一系列命令演示了使用 depmod 的常见方法。每个命令都以 sudo
作为前缀,因为它们需要根权限:
sudo ln -s /path/to/your-kernel-module.ko /lib/modules/`uname -r` sudo depmod -a sudo modprobe your-kernel-module
这些命令执行以下操作:
/lib/modules/kernel-release
中创建指向模块文件的符号链接。uname -r
命令用反引号括起来,由 shell 执行,并转换为表示内核版本的适当字符串。depmod -a
生成一个更新的依赖项列表,以确保我们正在安装的模块知道所有现有的模块和依赖项。在第三个命令中安装模块时,modprobe 将使用此依赖项列表。depmod -b /home/windsome/EMMA3PF-KernelSource-20080626/install_pos -e -F ./boot/System.map -v 2.6.18_pro500-bcm91250-mips2_fp_be -A -a #/home/windsome/EMMA3PF-KernelSource-20080626/install_pos是我make mod_install后,所有模块的存放路径。 #./boot/System.map是make linux后生成,我拷贝到此目录的。 #2.6.18_pro500-bcm91250-mips2_fp_be是我build的linux的版本。
编译 Linux 过程及执行 depmod 的例子:
genkernel.sh (at linux-2.6.18_pro500) ####### export INSTALL_ROOT_EMMA3PF="/home/windsome/EMMA3PF-KernelSource-20080626/install_pos" export INSTALL_MOD_EMMA3PF="/home/windsome/EMMA3PF-KernelSource-20080626/install_pos" rm /home/windsome/EMMA3PF-KernelSource-20080626/install_pos/lib -rf rm /home/windsome/EMMA3PF-KernelSource-20080626/install_pos/boot/* -rf cd <linux_src_dir> make make modules_install cp vmlinux System.map /home/windsome/EMMA3PF-KernelSource-20080626/install_pos/boot/ -p cd /home/windsome/EMMA3PF-KernelSource-20080626/install_pos depmod -b /home/windsome/EMMA3PF-KernelSource-20080626/install_pos -e -F ./boot/System.map -v 2.6.18_pro500-bcm91250-mips2_fp_be -A -a
其他用法:
在 Linux 桌面系统中,当你编译了新的驱动,为了能够用 modprobe ***
加载模块, 你需要先将模块拷贝到 /lib/modules /2.6.31-20-generic
目录下,然后运行 sudo depmod -a
将模块信息写入 modules.dep、modules.dep.bin、modules.alias.bin、modules.alias和modules.pcimap
文件中。
比如编译了一个新的 Wifi 驱动 r8192se_pci.ko
,将其拷贝到 /lib/modules/2.6.31-20-generic/wireless
下,然后到 /lib/modules/2.6.31-20-generic
运行 depmod -a,之后可以在任意目录运行 modprobe r8192se_pci
。