[其他] Linux内核模块管理命令(modprobe、modinfo、rmmod、insmod)

----------------------------------------  modprobe  ----------------------------------------
#1 显示模块配置信息
    modprobe -c|grep tipc
    
#2 显示模块依赖关系
    modprobe --show-depends tipc
    
#3 开机加载模块
    systemd 读取 /etc/modules-load.d/ 中的配置加载额外的内核模块。配置文件名称通常为 /etc/modules-load.d/<program>.conf。
    格式很简单,一行一个要读取的模块名,而空行以及第一个非空格字符为#或;的行会被忽略,如:

    /etc/modules-load.d/virtio-net.conf
    # Load virtio-net.ko at boot
    virtio-net    
    
    /etc/modules-load.d/tipc.conf
    # Load tipc.ko at boot
    tipc
    也可以使用命令modules-load.d来配置开机加载的模块。
    
#4  配置模块参数
    要通过配置文件传递参数,在 /etc/modprobe.d/ 中放入任意名称 .conf 文件,比如:tipc.conf
    
#5  使用内核命令行
    如果模块直接编译进内核,也可以通过启动管理器(GRUB, LILO 或 Syslinux)的内核行加入参数:
    modname.parametername=parametercontents
    例如:thinkpad_acpi.fan_control=1
    
#7  模块黑名单
    #7-1 禁用内核模块
      有些模块作为 initramfs 的一部分装入。要阻止 initramfs 装入某些模块,可以在 /etc/modprobe.d/modprobe.conf 中将它们加入黑名单
    #7-2 使用 /etc/modprobe.d/ 中的文件
      在 /etc/modprobe.d/ 中创建 tipc.conf 文件,使用 blacklist 关键字屏蔽不需要的模块,例如如果不想装入 tipc 模块:
      /etc/modprobe.d/tipc.conf
      # Do not load the tipc module on boot
      blacklist tipc
      
          注:此处已经设置屏蔽了tipc模块,但是如果另外一个模块a依赖于tipc,那么tipc还是会被装载,也就是设置无效
          要避免这个行为,可以让 modprobe 使用自定义的 install 命令,直接返回导入失败:
              /etc/modprobe.d/blacklist.conf
              ...
              install tipc /bin/false
              ...
           这样就可以 "屏蔽" tipc及a模块
      #7-3 使用内核命令行
        同样可以通过内核命令行(位于 GRUB、LILO 或 Syslinux)禁用模块:
        modprobe.blacklist=modname1,modname2,modname3
        当某个模块导致系统无法启动时,可以使用此方法禁用模块。 

----------------------------------------  modinfo  ----------------------------------------
显示所有内核参数的脚本
下面的 bash 脚本可以显示当前装入模块、模块参数及当前参数的数值。它使用 /proc/modules 获取当前装入模块的列表,然后用 modinfo 获取模块的描述和
模块的参数,最后访问 sysfs 文件系统获得当前模块名和参数值。
function aa_mod_parameters () 

    N=/dev/null;
    C=`tput op` O=$(echo -en "\n`tput setaf 2`>>> `tput op`");
    for mod in $(cat /proc/modules|cut -d" " -f1);
    do
        md=/sys/module/$mod/parameters;
        [[ ! -d $md ]] && continue;
        m=$mod;
        d=`modinfo -d $m 2>$N | tr "\n" "\t"`;
        echo -en "$O$m$C";
        [[ ${#d} -gt 0 ]] && echo -n " - $d";
        echo;
        for mc in $(cd $md; echo *);
        do
            de=`modinfo -p $mod 2>$N | grep ^$mc 2>$N|sed "s/^$mc=//" 2>$N`;
            echo -en "\t$mc=`cat $md/$mc 2>$N`";
            [[ ${#de} -gt 1 ]] && echo -en " - $de";
            echo;
        done;
    done
}
示例输出:
# aa_mod_parameters
>>> ehci_hcd - USB 2.0 'Enhanced' Host Controller (EHCI) Driver
        hird=0 - hird:host initiated resume duration, +1 for each 75us (int)
        ignore_oc=N - ignore_oc:ignore bogus hardware overcurrent indications (bool)
        log2_irq_thresh=0 - log2_irq_thresh:log2 IRQ latency, 1-64 microframes (int)
        park=0 - park:park setting; 1-3 back-to-back async packets (uint)

>>> processor - ACPI Processor Driver
        ignore_ppc=-1 - ignore_ppc:If the frequency of your machine gets wronglylimited by BIOS, this should help (int)
        ignore_tpc=0 - ignore_tpc:Disable broken BIOS _TPC throttling support (int)
        latency_factor=2 - latency_factor: (uint)


----------------------------------------  rmmod  ----------------------------------------


----------------------------------------  insmod  ----------------------------------------