linux开机时驱动的加载流程

Linux开机加载驱动时,涉及到了initramfs文件中包含的驱动以及硬盘中包含的驱动两个部分;而系统启动后手动加载驱动时只会用到硬盘中的驱动库,与initramfs无关。首先介绍下initramfs文件生成的原理及流程,然后在介绍下开机加载的流程及本地验证步骤。
一、 initramfs文件生成原理
1、 镜像安装时生成initramfs文件
在安装镜像时,会去扫描所安装的服务器中在位的设备,系统会将扫描到的设备的驱动以及默认常用的一些驱动包含在initramfs文件中;解压initramfs文件后生成的目录文件如下所示:
(解压initramfs文件的命令:
/usr/lib/dracut/skipcpio initramfs.xxx.img | zcat | cpio -ivd)
在这里插入图片描述
Initramfs中包含的驱动ko文件在目录lib/modules/下,具体包含的ko可依次查看。
在这里插入图片描述

注意:安装镜像的时候先生成initramfs文件,然后才会去执行post脚本,如果想在post脚本中去更改驱动或者一些依赖关系的话,无法写入initramfs文件中。

2、 主动更新构建initramfs文件
当我们想去更改模块的依赖关系,或者替换掉原有的ko,如果此时原有的ko已经存在于initramfs中,那么如果单纯的替换掉ko依然不会生效,需要使用dracut –force命令重新构建initramfs文件,使其写入到initramfs文件中。(具体原有后续介绍)
二、 开机加载驱动的流程
Linux系统开机后,首先加载initramfs文件中包含的驱动程序,如果相应的设备对应的驱动不在initramfs文件包含范围内,那么会去硬盘中存储的驱动库中去寻找匹配的驱动进行加载;硬盘中驱动库的位置即为:/lib/modules/“uname -r”/;所以相应的驱动只要在硬盘的驱动库或者initramfs中至少存在一个就可以正常加载,一旦在initramfs中加载成功,无论硬盘中的驱动库中存在的驱动版本是否相同都不会重新去加载。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/biaotai/article/details/106723307