• (转)内核模块操作命令-lsmod+rmmod+modinfo+modprobe


    原文:http://watchmen.xin/2018/07/13/IT%E7%A7%91%E5%AD%A6%E6%8A%80%E6%9C%AF%E7%9F%A5%E8%AF%86%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84-Linux%E8%BF%90%E7%BB%B4%E6%96%B9%E5%90%91/Linux%E5%91%BD%E4%BB%A4/%E5%86%85%E6%A0%B8%E6%A8%A1%E5%9D%97%E6%93%8D%E4%BD%9C%E5%91%BD%E4%BB%A4-lsmod+rmmod+modinfo+modprobe/

    lsmod-查看内核模块信息

    lsmod命令用于显示已经加载到内核中的模块的状态信息。执行lsmod命令后会列出所有已载入系统的模块。

    Linux操作系统的核心具有模块化的特性,应此在编译核心时,可以不用把全部的功能都放入核心,而是将这些功能编译成一个个单独的模块,待需要时再分别载入使用。

    命令的输出如下:

    1
    2
    3
    4
    5
    6
    7
    [root@lvs001 modprobe.d]# lsmod 
    Module Size Used by
    iptable_nat 5923 0
    nf_nat 22676 1 iptable_nat
    nf_conntrack_ipv4 9186 3 iptable_nat,nf_nat
    nf_conntrack 79537 3 iptable_nat,nf_nat,nf_conntrack_ipv4
    nf_defrag_ipv4 1483 1 nf_conntrack_ipv4
    1
    2
    3
    4
    5
    [root@lvs001 modprobe.d]# lsmod | grep ip_vs
    ip_vs_rr 1420 0
    ip_vs 126705 2 ip_vs_rr
    libcrc32c 1246 1 ip_vs
    ipv6 336368 913 ip_vs,ib_ipoib,ib_addr

    说明:

    • 第1列:表示模块的名称。
    • 第2列:表示模块的大小。
    • 第3列:表示该模块调用其他模块的个数
    • 第4列:显示该模块被其他什么模块调用

    通常在使用lsmod命令时,都会采用类似lsmod | grep -i ipvs这样的命令来查询当前系统是否加载了某些模块。

    modinfo-查看内核模块信息

    modinfo会显示kernel模块的对象文件,以显示该模块的相关信息。

    modinfo列出Linux内核中命令行指定的模块的信息。若模块名不是一个文件名,则会在/lib/modules/version 目录中搜索,就像modprobe一样。

    modinfo默认情况下,为了便于阅读,以下面的格式列出模块的每个属性:fieldname : value。

    1
    2
    3
    4
    5
    6
    参  数:
    -a或--author  显示模块开发人员。
    -d或--description  显示模块的说明。
    -h或--help  显示modinfo的参数使用方法。
    -p或--parameters  显示模块所支持的参数。
    -V或--version  显示版本信息。
    1
    2
    3
    4
    5
    6
    7
    [root@lvs001 modprobe.d]# modinfo ip_vs
    filename: /lib/modules/2.6.32-696.el6.x86_64/kernel/net/netfilter/ipvs/ip_vs.ko
    license: GPL
    srcversion: 0FB85919D62C4255E412E5C
    depends: ipv6,libcrc32c
    vermagic: 2.6.32-696.el6.x86_64 SMP mod_unload modversions
    parm: conn_tab_bits:Set connections' hash size (int)

    注意,使用lsmod不能看到内核的相关参数配置,而使用modinfo命令则可以显示

    rmmod-卸载内核模块

    rmmod命令 用于从当前运行的内核中移除指定的内核模块。

    执行rmmod指令,可删除不需要的模块。

    1
    2
    3
    4
    5
    选项信息:
    -v:显示指令执行的详细信息;
    -f:强制移除模块,使用此选项比较危险;
    -w:等待着,直到模块能够被除时在移除模块;
    -s:向系统日志(syslog)发送错误信息。
    1
    2
    [root@lvs001 modprobe.d]# rmmod ip_vs
    ERROR: Module ip_vs is in use by ip_vs_rr

    使用rmmod卸载模块的时候,提示信息会比使用modprobe -r 的输出更详细,此时会显示该模块的被调用情况

    insmod-载入内核模块

    insmod(install module)命令用于载入模块。

    Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。

    语法:

    1
    insmod [-fkmpsvxX][-o <模块名称>][模块文件][符号名称 = 符号值]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    参数说明:

    -f  不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入。
    -k  将模块设置为自动卸除。
    -m  输出模块的载入信息。
    -o<模块名称>  指定模块的名称,可使用模块文件的文件名。
    -p  测试模块是否能正确地载入kernel。
    -s  将所有信息记录在系统记录文件中。
    -v  执行时显示详细的信息。
    -x  不要汇出模块的外部符号。
    -X  汇出模块所有的外部符号,此为预设置。

    在Linux中,modprobe和insmod都可以用来加载module,不过现在一般都推荐使用modprobe而不是insmod了。
    modprobe和insmod的区别是什么呢?

    • modprobe可以解决load module时的依赖关系,比如load moudleA就必须先load mouduleB之类的,它是通过/lib/modules//modules.dep文件来查找依赖关系的。而insmod不能解决依赖问题。
    • modprobe默认会去/lib/modules/目录下面查找module,而insmod只在给它的参数中去找module(默认在当前目录找)。

    但是insmod也有它的有用之处,举个例子吧。

    有/root/my-mod.ko这个module,cd /root/,然后用insmod my-mod.ko(insmod /root/my-mod.ko)就可以insert这个module了,

    但是用modprobe my-mod.ko(modprobe /root/my-mod.ko)却提示”FATAL: Module my-mod.ko not found”,这就是因为modprobe是到/lib/modules/uname -r/下去找module的,如果没找到就是这样了。

    depmod-分析模块依赖性

    modprobe-内核模块操作

    modprobe命令用于智能地向内核中加载模块或者从内核中移除模块。

    modprobe可载入指定的个别模块,或是载入一组相依的模块。

    modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    参数选项

    -a或--all:载入全部的模块/指定模块;
    -c或--show-conf:显示所有模块的设置信息;
    -d或--debug:使用排错模式;
    -l或--list:显示可用的模块;
    -r或--remove:卸载模块;
    -t或--type:指定模块类型;
    -v或--verbose:执行时显示详细的信息;
    -V或--version:显示版本信息;
    -help:显示帮助。

    例如:

    1
    2
    卸载:modprobe -r ip_vs 
    载入:modprobe -a ip_vs

    get_module

    需要安装sysfsutils包之后才能产生该命令

    1
    yum -y install sysfsutils
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    [root@lvs001 modprobe.d]# get_module ip_vs
    initstate : live
    refcnt : 2
    srcversion : 0FB85919D62C4255E412E5C

    Parameters:
    conn_tab_bits : 12
    Sections:
    .altinstr_replacement : 0xffffffffa039c2b8
    .altinstructions : 0xffffffffa039ef98
    .bss : 0xffffffffa03a1c60
    .data : 0xffffffffa039ff00
    .data.cacheline_aligned : 0xffffffffa03a1580
    .data.read_mostly : 0xffffffffa03a1040
    .exit.text : 0xffffffffa039c40e
    .gnu.linkonce.this_module : 0xffffffffa03a1a20
    .init.text : 0xffffffffa03aa000
    .note.gnu.build-id : 0xffffffffa039c454
    .rheldata : 0xffffffffa039fee0
    .rodata : 0xffffffffa039c480
    .rodata.str1.1 : 0xffffffffa039d6e8
    .rodata.str1.8 : 0xffffffffa039dc90
    .smp_locks : 0xffffffffa039eb68
    .strtab : 0xffffffffa03ae2f8
    .symtab : 0xffffffffa03aa4d0
    .text : 0xffffffffa038a000
    __kcrctab_gpl : 0xffffffffa039f540
    __kcrctab : 0xffffffffa039fe80
    __ksymtab_gpl : 0xffffffffa039f4f0
    __ksymtab_strings : 0xffffffffa039f590
    __ksymtab : 0xffffffffa039fdc0
    __mcount_loc : 0xffffffffa039f6e8
    __param : 0xffffffffa039f568
    __verbose : 0xffffffffa03a1980
     
  • 相关阅读:
    浏览器基础知识点及常考面试题
    java设计模式之综述
    maven的基本原理和使用
    maven的介绍和安装
    Spring整合Struts2的方法
    Spring整合Hibernate的方法
    Spring中的事务管理
    Spring中的JDBC操作
    基于XML配置的Sping AOP详解
    基于注解的Sping AOP详解
  • 原文地址:https://www.cnblogs.com/liujiacai/p/10423039.html
Copyright © 2020-2023  润新知