Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux命令 > 系统设置 > » 正文

linux depmod命令参数及用法详解--分析可载入模块的相依性

来源: 未知 分享至:

功能说明:分析可载入模块的相依性。

语  法:depmod [-adeisvV][-m <文件>][--help][模块名称]

补充说明:depmod可检测模块的相依性,供modprobe在安装模块时使用。

 

   Linux内核模块可以为其它模块提供提供服务(在代码中使用EXPORT_SYMBOL),这种服务被称作"symbols"。若第二个模块使用了这个symbol,则该模块很明显依赖于第一个模块。这些依赖关系是非常繁杂的。 

   depmod读取在/lib/modules/version 目录下的所有模块,并检查每个模块导出的symbol和需要的symbol,然后创建一个依赖关系列表。默认地,该列表写入到/lib/moudules /version目录下的modules.dep文件中。若命令中的filename有指定的话,则仅检查这些指定的模块(不是很有用)。 

 

   若命令中提供了version参数,则会使用version所指定的目录生成依赖,而不是当前内核的版本(uname -r 返回的)。 


参  数:

-a 检查所有模块,如果命令中没有文件名称,这个选项默认是开启的。 

-b basedir  --basedir basedir  若你的模块并没有正确的在/lib/mdules/version下,可以指定目录生成依赖。 

-e  --errsyms  和-F选项一起使用,当一个模块需要的symbol在其它模块里面没有提供时,做出报告。正常情况下,模块没有提供的symbol都在内核中有提供。 

-F  --filesyms System.map 提供一个System.map文件(在内核编译时生成的)许-e选项报告出unresolved symbol。 

-n  --dry_run  将结果modules.dep和各种映射文件输出到标准输出(stdout),而不是写到模块目录下。 

-A --quick  检查是否有模块比modues.dep中的模块新,若没有,则退出不重新生成文件。 

 

 

在构建嵌入式系统时,需要由这个命令来生成相应的文件,由modprobe使用。

 

[示例] 

由于会修改文件,为了防止这个现象,例子使用了-n,不修改文件却写出结果。 

*查看usbserial.ko的依赖: 

#depmod -n usbserial.ko 

输入之后,输出如下: 

usbserial.ko: 

# pci module         vendor     device     subvendor  subdevice  class      class_mask driver_data 

# usb module         match_flags idVendor idProduct bcdDevice_lo bcdDevice_hi bDeviceClass bDeviceSubClass bDeviceProtocol bInterfaceClass bInterfaceSubClass bInterfaceProtocol driver_info 

# ccw module         match_flags cu_type cu_model dev_type dev_model 

# ieee1394 module    match_flags vendor_id model_id specifier_id version 

# isapnp module      cardvendor carddevice driver_data vendor     function   ... 

# module         matchBits bustype vendor product version evBits keyBits relBits absBits mscBits ledBits sndBits ffBits [swBits] driver_info 

# of module          name                 type                 compatible 

# serio module       type extra id   proto 

# Aliases extracted from modules themselves. 

# Aliases for symbols, used by symbol_request(). 

alias symbol:usb_serial_generic_write_bulk_callback usbserial 

alias symbol:ezusb_set_reset usbserial 

alias symbol:usb_serial_register usbserial 

alias symbol:usb_serial_deregister usbserial 

alias symbol:usb_serial_generic_read_bulk_callback usbserial 

alias symbol:ezusb_writememory usbserial 

alias symbol:usb_serial_probe usbserial 

alias symbol:usb_serial_port_softint usbserial 

alias symbol:usb_serial_generic_open usbserial 

alias symbol:usb_serial_disconnect usbserial 

资料整理:www.linuxso.com   linux安全网

 

扩展示例:

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。

扩展阅读:内核模块相关命令:lsmod,depmod,modprob...

 

lsmod
功能:列出内核已载入模块的状态
用法:lsmod
描述:
    lsmod 以美观的方式列出/proc/modules的内容。
    输出为:
    Module(模块名)    Size(模块大小)   Used by(被...使用)
 
eg. ne2k_pci           8928               0
     8390                 9472              1 ne2k_pci
 
    在/proc/modules中相应的是:
    (模块名,模块大小,被...使用,模块地址(猜的,以后确认)) 
    ne2k_pci 8928 0 - Live 0x3086400
    8390 9472 1 ne2k_pci , Live 0xe086000
 
depmod
功能:分析可加载模块的依赖性,生成modules.dep文件和映射文件。
用法:depmod [-b basedir] [-e] [-F System.map] [-n] [-v] [version] [-A]
        depmod [-e] [-F System.map] [-n] [-v] [version] [filename...]
描述:
    Linux内核模块可以为其它模块提供提供服务(在代码中使用EXPORT_SYMBOL),这种服务被称作"symbols"。若第二个模块使用了这个symbol,则该模块很明显依赖于第一个模块。这些依赖关系是非常繁杂的。
    
    depmod读取在/lib/modules/version 目录下的所有模块,并检查每个模块导出的symbol和需要的symbol,然后创建一个依赖关系列表。默认地,该列表写入到/lib/moudules/version目录下的modules.dep文件中。若命令中的filename有指定的话,则仅检查这些指定的模块(不是很有用)。
 
    若命令中提供了version参数,则会使用version所指定的目录生成依赖,而不是当前内核的版本(uname -r 返回的)。
                                
选项:
    -b basedir  --basedir basedir  若你的模块并没有正确的在/lib/mdules/version下,可以指定目录生成依赖。

Tags: linux命令
分享至:
最新图文资讯
1 2 3 4 5 6
相关文章列表:
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史