内核与内核模块
作者:互联网
目录
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)来带入内核模块参数
标签:study,内核,模块,modprobe,内核模块,加载 来源: https://blog.csdn.net/weixin_48524215/article/details/115040972