一次Linux驱动升级的问题记录

在Linux开机时驱动的加载过程中总结过驱动的加载方式,会涉及到initramfs文件中的驱动,因此在驱动升级的时候要考虑到initramfs文件中的驱动是否也对应的升级到对用的版本,这是本文想记录的一个点。

linux开机时先去加载initramfs文件中的驱动,具体的流程如下图所示。
因此我们需要注意的是在系统中升级完驱动后,要保证initramfs中的驱动进行更新。检查initramfs文件中是否包含我们要升级的驱动,如果不存在升级的驱动,则无需更新initramfs文件,检查命令为lsinitrd initramfs-xxx.img | grep module;
在这里插入图片描述

以i40e驱动为例,加入我们采用make&make install的方式在当前的环境上编译升级驱动时,i40e驱动的makefile文件自动会为我们执行dracut --force命令去同时更新initramfs文件使i40e驱动更新。
在这里插入图片描述

而当我们为其他的现场环境编译驱动时,这时无法直接在线程环境上make&make install命令去安装,而一般我们采用编好的i40e.ko驱动文件去替换掉原有的i40e.ko文件。
这时更新驱动的流程如下:

(1)将i40e驱动拷贝到/lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/i40e文件夹下,替换系统原有的i40e.ko.xz文件;(升级系统原有的驱动)
(2)执行depmod –a重新生成模块依赖关系;
(3)执行modinfo i40e查看相关信息是否与当前替换的版本信息一致;
(4)如果当前环境下可以成功执行rmmod i40e卸载当前环境下的驱动,则执行modprobe i40e加载驱动即可生效,无需重启;
(5)执行dracut --force命令重新生成initramfs文件(该文件中包含有老版本的i40e驱动,如果不进行更新则重启后依然后加载老版本的驱动);

(6)如果无法卸载当前环境下的i40e驱动,则重启后生效;

猜你喜欢

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