发现问题步骤:
1.在openeuler 24.03上,旧版本上安装过外部驱动安装包,用dnf命令升级内核到6.6.0-145.0.2.130.oe2403。
2.重启后用rpmbuild命令编译外部驱动rpm包。
3.rpm命令安装卸载rpm包失败。
4.modinfo 读取驱动信息,发现vermagic指向的是升级前的版本号。
问题原因:
1.新的内核配置了weak-modules选项,升级内核之后会对外部驱动进行kabi检查,如果没变化,就会在/lib/modules//weak-updates/下面生成一个软连接指向之前内核安装的驱动。
2.新版本内核修改了kernel config,编译的驱动模块格式是megaraid_sas.ko.xz, 旧版本内核编译的是megaraid_sas.ko。
所以内核升级之后,驱动指向的是之前的ko格式,但是当前版本编译的安装包是ko.xz格式,安装卸载的时候格式不匹配。会导致找不到文件。安装卸载失败。
解决办法:
目前想到的有两种,一种是升级内核之前,卸载外部驱动,升级之后在安装。另一种是升级内核之后,删除旧版本驱动的软链接,再进行安装。