Linux内核模块管理(命令)

1.什么是 Linux 内核模块?

内核模块是可以根据需要加载到内核中或从内核中卸载的代码块,因此无需重启就可以扩展内核的功能。事实上,除非用户使用类似lsmod这样的命令来查询模块信息,否则用户不太可能知道内核发生的任何变化。多数情况下,模块会根据需要加载的,而且用户不需要知道它们如何运作。

(以上内容参考:https://mp.weixin.qq.com/s/s3VSDEUD_gcQ0dF-Yk7Pqw

2.与内核模块相关的命令

(1)depmod:

Linux depmod命令用于分析可载入模块的相依性。

depmod(depend module)可检测模块的相依性,生成 modules.dep 和映射文件,供modprobe在安装模块时使用。

语法:

depmod [-adeisvV ][-m

参数说明

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

用法如下:

Linux内核模块管理(命令)

在输入depmod -a 命令后,红框目录下会生成橙色框所示的modules.dep文件,查看这个文件可以到各个模块的依赖关系,蓝框里的内容表示冒号前面的模块依赖冒号后面的模块。

(2)insmod

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

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

语法:

insmod [-fkmpsvxX ][-o

参数说明

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

用法如下:

输入命令 sudo insmod /lib/modules/uname -r/kernal/drivers/ata/pata_amd.ko,其中uname -r显示内核模块版本号。

Linux内核模块管理(命令)

加载成功以后可以看到如下情况:

Linux内核模块管理(命令)

使用insmod加载模块时要注意当模块依赖于另一个模块时,要确保那个模块已被加载,否则会有错误提示,可以去modules.dep文件里面查找。

(推荐使用modprobe命令,此命令会自动加载被依赖的模块,也不需要输入路径信息)

(3)lsmod

Linux lsmod命令用于显示已载入系统的模块。

执行lsmod(list modules)指令,会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编译成一个个单独的模块,待需要时再分别载入。

语法:

lsmod

lsmod命令是显示内核模块最方便的命令。然而,也有其他方式可以显示它们。lsmod列出的是/proc目录下的 modules

用法如下:

(4)modinfo

Linux modinfo命令用于显示kernel模块的信息。

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

语法:

modinfo [-adhpV ][模块文件]

参数

  • -a或–author 显示模块开发人员。
  • -d或–description 显示模块的说明。
  • -h或–help 显示modinfo的参数使用方法。
  • -p或–parameters 显示模块所支持的参数。
  • -V或–version 显示版本信息。

用法如下:

(5)modprobe

Linux modprobe命令用于自动处理可载入模块。

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

语法:

modprobe [-acdlrtvV ][–help ][模块文件][符号名称=符号值]

参数

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

用法如下:

(6)rmmod

Linux rmmod命令用于删除模块。

执行rmmod指令,可删除不需要的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放如核心。你可以将这些功能编译成一个个单独的模块,待有需要时再分别载入它们。

语法:

rmmod [-as ][模块名称…]

参数

  • -a 删除所有目前不需要的模块。
  • -s 把信息输出至syslog常驻服务,而非终端机界面。

用法如下:

rmmod只能移除目前没有被用到的模块。

更详细的内容可以参考:https://www.cnblogs.com/jacklikedogs/p/4659249.html

Original: https://www.cnblogs.com/vivianwenwen/p/12132891.html
Author: 温昀
Title: Linux内核模块管理(命令)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585259/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Linux中touch和mkdir、vi的区别

    touch:创建空白文档,新增文件 mkdir:创建一个目录 vi:同touch一样,都是创建一个空白文档 举个栗子:touch w;此时创建一个w的空白文档;file w 可以查…

    Linux 2023年6月13日
    084
  • Android安卓进阶技术分享之AGP工作原理

    1.基础准备 在分析源码之前,我想你应该对 Android 打包流程已经有基础的了解,至少了解了下图的打包过程: 否则你有可能不了解下文中的专业术语。 2.AGP源码的打开方式 看…

    Linux 2023年6月13日
    0124
  • tiddlywiki-nodejs 安装部署

    安装 tiddlywiki (root) 确认 npm 包全局&amp…

    Linux 2023年6月14日
    091
  • Python中的对象引用、浅拷贝与深拷贝

    最近项目中遇到一个Python浅拷贝机制引起的bug,由于对于Python中对象引用、赋值、浅拷贝/深拷贝机制没有足够的认识,导致调试了很久才发现问题,这里简单记录一下相关概念。 …

    Linux 2023年6月6日
    085
  • 虚拟机网络地址配置你不知道的事儿-服务器的种类

    想必大家在初学Linux过程中,应该都是跟我一样白嫖一台虚拟机进行使用把,但是在大家白嫖的同时知不知道我们公司内是使用的什么样的服务器呢?公司肯定不会跟我们一样在自己电脑进行安装虚…

    Linux 2023年5月27日
    099
  • 【Example】C++ 模板概念讲解及编译避坑

    C++ 不同于 Java,它没有标准的 Object 类型。也就意味着 C++ 并不存在完整的泛型编程概念。 为什么不存在完整的泛型编程概念,放到最后一个例子讲,先讲 &#8220…

    Linux 2023年6月13日
    091
  • 驱动写用户态应用程序的标准输出卡死

    问题描述 驱动写用户态应用程序的标准输出,pipe卡住,导致驱动不能正常继续工作注:感谢木三的解决方法. 问题解决 lsof 查看pipe管道 #lsof python3 2581…

    Linux 2023年6月6日
    0103
  • 19-TCP、UDP的区别和应用场景

    可靠性TCP 提供交付保证,这意味着一个使用TCP协议发送的消息是保证交付给客户端的,如果消息在传输过程中丢失,那么它将重发。UDP是不可靠的,它不提供任何交付的保证,一个数据包在…

    Linux 2023年6月7日
    085
  • Pycharm快捷键设置(鼠标滚动控制字体大小)

    一、pycharm字体放大的设置 File —> setting —> Keymap —>在搜寻框中输入:increase —> Increase Font…

    Linux 2023年6月8日
    0107
  • Java基础系列–05_面向对象

    1、概述:(1)面向过程:将问题一步一步的解决的过程(详细步骤),在C语言中所有的代码都是基于过程化的代码。(2)面向对象:面向对象是基于面向过程的编程思想,所有的事情都交由创建出…

    Linux 2023年6月7日
    0113
  • 快速掌握 Base 64 | Java JS 密码系列

    Java 密码系列 – Java 和 JS Base 64 Base 64 不属于密码技术,仅是编码方式。但由于在 Java、JavaScript、区块链等出现的频率较…

    Linux 2023年6月7日
    0102
  • Ceph创建一个新集群 报错: File “/usr/bin/ceph-deploy”, line 18, in……….

    [root@ceph-node1 ceph]# ceph-deploy new node1 Traceback (most recent call last): File &quo…

    Linux 2023年6月13日
    0103
  • 每天一个 HTTP 状态码 203

    203 ‘Non-Authoritative Informative’ 直译过来是「非权威信息」的意思… 203 Non-Authoritati…

    Linux 2023年6月7日
    0106
  • 嵌入式软件架构设计-程序分层

    1 前言 在嵌入式MCU软件开发过程中,程序分层设计也是重中之重,关系到整个软件开发过程中的协同开发,降低系统软件的复杂度(复杂问题分解)和依赖关系、同时有利于标准化,便于管理各层…

    Linux 2023年6月7日
    0147
  • Linux 进程卡住了怎么办?

    在我们使用 Linux 系统时,如果网络或者磁盘等 I/O 出问题,会发现进程卡住了,即使用 kill -9 也无法杀掉进程,很多常用的调试工具,比如 strace, pstack…

    Linux 2023年5月27日
    088
  • 接口

    一.抽象方法及抽象类 1-1 抽象方法 抽象方法:这种方法是不完整的,仅有声明而没有方法体。 public abstract void f(); 1-2 抽象类 包含抽象方法的类一…

    Linux 2023年6月8日
    0104
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球