depmod 命令

| 选择喜欢的代码风格  

depmod 命令补充说明:


depmod 命令可产生模块依赖的映射文件,在构建嵌入式系统时,需要由这个命令来生成相应的文件,由 modprobe 使用。

depmod 分析您的内核模块(在 /lib/modules/kernel-release 目录中)并创建一个依赖项列表(命名为 modules.dep),以便在使用 modprobe 添加和删除模块时,没有模块没有它们需要的其他模块。同时,它创建一个映射,将硬件标识符和处理它们的模块关联起来。此映射用于在硬件请求时找到正确的模块。

内核依赖 depmod 和 modprobe 按照加载模块的顺序向它传递模块的原始数据。

depmod 命令语法:


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...]

depmod 命令选项:


-a或--all:分析所有可用的模块;
-d或debug:执行排错模式;
-e:输出无法参照的符号;
-i:不检查符号表的版本;
-m<文件>或system-map<文件>:使用指定的符号表文件;
-s或--system-log:在系统记录中记录错误;
-v或--verbose:执行时显示详细的信息;
-V或--version:显示版本信息;
--help:显示帮助。

depmod 命令说明:


Linux 内核模块可以提供服务(称为“符号”)供其他模块使用(使用代码中的一个导出符号变体)。如果第二个模块使用此符号,则第二个模块显然依赖于第一个模块。这些依赖关系可能变得相当复杂。

depmod 通过读取 /lib/modules/kernel-release 下的每个模块并确定它导出的符号和需要的符号,创建一个模块依赖关系列表。默认情况下,此列表将写入 modules.dep 和名为 modules.dep.bin 的二进制哈希版本,位于同一目录中。如果在命令行中给出了文件名,则只检查这些模块(除非列出了所有模块,否则这些模块很少有用)。

depmod 还创建由 modules.symbols 文件及其二进制散列版本 modules.symbols.bin 中的模块提供的符号列表。

最后,如果模块提供了特殊的设备名(devname),则 depmod 将输出一个名为 modules.devname 的文件,该设备名应在启动时填充在 /dev 中(由 udev 等实用程序填充)。

如果提供了版本,则使用该内核版本的模块目录,而不是当前的内核版本(由 uname-r 返回)。

depmod 命令实例


下面的一系列命令演示了使用 depmod 的常见方法。每个命令都以 sudo 作为前缀,因为它们需要根权限:

sudo ln -s /path/to/your-kernel-module.ko /lib/modules/`uname -r`

sudo depmod -a

sudo modprobe your-kernel-module

这些命令执行以下操作

  • 在第一个命令中,我们使用 ln 命令 在目录 /lib/modules/kernel-release 中创建指向模块文件的符号链接。uname -r 命令用反引号括起来,由 shell 执行,并转换为表示内核版本的适当字符串。
  • 在第二个命令中,depmod -a 生成一个更新的依赖项列表,以确保我们正在安装的模块知道所有现有的模块和依赖项。在第三个命令中安装模块时,modprobe 将使用此依赖项列表。
  • 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

depmod 命令扩展阅读:




发表评论