内核与内核模块

目录

1. 内核与内核模块

在整个启动过程中,是否能够成功地驱动主机的硬件设备是内核的工作
内核一般是压缩文件,在使用内核前,要将其解压缩后,才能加载到内存中

为了应付日新月异的硬件,目前的内核都具有 可读取模块化驱动程序 的功能,亦即是所谓的 模块化(modules) 的功能。
所谓模块化可将它想成一个插件,该插件可能由硬件开发商提供,也有可能内核本来就支持,较新的硬件通常都需要硬件开发商提供驱动程序模块

如果有个操作系统恰好不支持的新硬件,接下来应该:

  • 重新编译内核,并加入最新的硬件驱动程序源代码
  • 将该硬件的驱动程序编译成为模块,在启动时加载该模块

1.1 内核模块与依赖性

内核提供的模块之间具有相关性,Linux提供一些模块依赖性的解决方案,检查 /lib/modules/$(uname -r)/modules.dep文件,它记录了内核支持的模块的各项依赖性

depmod命令 – 生成模块映射文件dependency modules)
depmod命令可产生模块依赖的映射文件,在构建嵌入式系统时,需要由这个命令来生成相应的文件

[root@study ~] depmod [参数]
-a : 分析所有可用的模块
-b<目录> : 指定内核模块目录
-e : 输出无法参照的符号
-F : 提供内核编译时生成的system.map文件
-n : 将各种内核映射文件打印到标准输出
-A : 快速模式

范例:
若自己做好了一个网卡驱动程序,文件名为a.ko,如何更新内核依赖性

[root@study ~] cp a.ko /lib/modules/$(uname -r)/kernel/drivers/net
[root@study ~] depmod

1.2 查看内核模块

lsmod命令 – 显示已加载模块状态
lsmod命令用于显示已经加载到内核中的模块的状态信息。

执行lsmod命令后会列出所有已载入系统的模块。linux操作系统的核心具有模块化的特性,因此在编译核心时,务须把全部的功能都放入核心。可以将这些功能编译成独立的模块,待需要时再分别载入

[root@study ~] lsmod

模块名称 | 模块大小 | 此模块是否被其他模块所使用
内核与内核模块
modinfo命令 – 显示kernel模块的信息

[root@study ~] modinfo [参数] [模块文件]
-a : 显示模块开发人员
-d : 显示模块的说明
-p : 显示模块所支持的参数

范例:
列出drm模块的相关信息

[root@study ~] modinfo drm

内核与内核模块

1.3 内核模块的加载与删除

modprobe命令 – 内核模块智能加载工具

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

modprobe命令可载入指定的个别模块,或是载入一组相依的模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。内核模块加载成功或失败信息可以使用dmesg指令来查看

[root@study ~] modprobe [参数] [模块名]
-a : 加载命令行给出的全部的模块
-c : 显示所有模块的设置信息
-d : 使用排错模式
-l : 显示可用的模块
-r : 从内核中移除模块
-t : 指定模块类型
-s : 记录错误信息到系统日志中
-- -show-depends : 显示模块依赖关系
-v : 执行时显示详细的信息
-V : 显示版本信息
-help :	显示帮助

范例:
加载vfat模块
移除vfat模块

[root@study ~] modprobe vfat
[root@study ~] modprobe -r vfat

1.4 内核模块的额外参数设置:/etc/modprobe.d/*conf

如果有某些特殊的需求导致必须要让内核模块加上某些参数
重点是要自己建立扩展名为 .conf 文件,通过选项与参数(option)来带入内核模块参数

上一篇:懒汉式单例模式的线程安全实现(最新)


下一篇:消息驱动的微服务 - Spring Cloud Alibaba RocketMQ