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。