zoukankan      html  css  js  c++  java
  • 内核与内核模块:depmod,lsmod,modinfo,insmod,rmmod,mdprobe

    内核与内核模块:depmod,lsmod,modinfo,insmod,rmmod,mdprobe

      首先,我们得知道内核与内核模块放在哪里。
    内核:/boot/vmlinuz或/boot/vmlinuz-version;
    内核解压缩所需RAMDisk:/boot/initrd(/boot/initrd-version);
    内核模块:/lib/modules/version/kernel或/lib/modules/$(uname -r)/kernel;
    内核源码:/usr/src/linux 或 /usr/src/kernels;
      如果内核顺利被加载了,会有以下几个信息记录:
    内核版本:/proc/version
    系统内核功能:/proc/sys/kernel
      假如我有个新硬件,偏偏我的系统不支持,要这样做:
    重新编译内核,并加入最新的硬件驱动程序源码;
    将该硬件的驱动程序编译成为模块,在启动时加载该模块。
     
      下面我们着重讲一下内核模块
    一、内核模块与依赖性
      基本上,内核模块放置处是在 /lib/modules/$(uname -r)/kernel当中,里面的几个目录主要为:
    arch 与硬件平台有关的选项
    crypto 内核所支持的加密的技术
    drivers 一些硬件的驱动程序
    fs 内核所支持的文件系统
    lib 一些函数库
    net 与网络有关的各项协议数据,还有防火墙模块等
    sound 与音效有关的各项模块
      还有文件/lib/modules/$(uname -r)/modules.dep ,记录了内核支持的模块的依赖性。那么如何创建该文件呢?如下:
    #depmod [-Ane]
      -A:不加任何参数时,depmod会主动去分析目前内核的模块,并且重新写入/lib/modules/$(uname -r)/
    modules.dep当中。如果加-A参数,则会查找比modules.dep内还要新的模块,如果真找到,才会更新。
      -n:不写入modules.dep,而是将结果输出到屏幕上。
      -e:显示出目前已加载的不可执行的模块名称。
     
      例子:我做好一个网卡驱动程序a.ko(内核模块名以.ko结尾),该如何更新内核的依赖性?
    #cp a.ko /lib/modules/$(uname -r)/kernel/drivers/net
    #depmod
     
     
    二、内核模块的查看
      查看目前模块加载了多少的模块。
    #lsmod
    模块名称     模块的大小  此模块是否被其他模块使用
     
    查阅每个模块信息
    #modinfo [-adln] [module_name|filename]
      -a:仅列出作者名
      -d:仅列出该modules的说明
      -l:仅列出授权
      -n:仅列出该模块的详细路径
     
      例子:#modinfo mii
     
     
    三、内核模块的加载与删除
      最好使用modprobe这个命令加载模块,因为modprobe会主动查找modules.dep的内容,解决了依赖性后,才决定需要加载的模块有哪些。
      insmod则完全由用户自行加载一个完整文件名的模块,并不会主动分析模块依赖性。
    #insmod [/full/path/module_name] [parameters]
     
      例子:尝试载入cifs.ko这个文件系统模块
    #insmod /lib/modules/$(uname -r)/kernel/fs/cifs/cifs.ko
      记住,一定要是完整的文件名。
     
    #rmmod [-fw] module_name
      -f:强制将该模块删除掉,不论是否正在被使用
      -w:若该模块正在被使用,则等待该模块被使用完毕后再删除
     
      insmod与rmmod的问题时,你必须自行找到模块的完整文件名才行。所以,我们一般使用modprobe.
    #modprobe [-lcfr] module_name
      -c:列出目前系统上面所有的模块
      -l:列出目前在/lib/modules/`uname -r`/kernel当中的所有模块完整文件名
      -f:强制加载该模块
      -r:删除某个模块
     
      例子:加载cifs模块
       #modprobe cifs
      很方便,因为我们根本不用知道完整的模块文件名
     
    内核模块的额外参数配置:/etc/modprobe.conf
      如果你想修改某些模块的额外参数设置,就在这个文件内。
      #vi /etc/modprobe.conf
  • 相关阅读:
    linux 中安装 maven
    linux中如何安装jdk
    MySQL中的语法怎么执行的
    接口自动化--使用正则管理数据
    数学
    Java 并发--- 线程间协作的两种方式:wait、notify、notifyAll和Condition
    Java 并发--- Callable、Future和FutureTask
    Java 并发--- 线程池
    Java 并发--- 阻塞队列
    Java 并发---ConcurrentHashMap
  • 原文地址:https://www.cnblogs.com/lidabo/p/4619319.html
Copyright © 2011-2022 走看看