CentOS 8系统中找不到virtio-pci.ko的查找及替换方法咨询
CentOS 8 virtio-pci.ko查找与自定义模块替换方案
找不到文件的原因
CentOS 8开始virtio-pci模块默认打包进initramfs启动镜像,没有单独存放在文件系统的/lib/modules/$(uname -r)/路径下,因此直接搜索磁盘无法找到该文件。
查找现有virtio-pci.ko的方法
- 先确认模块已加载:执行
lsmod | grep virtio_pci,有输出则说明模块正常运行 - 从initramfs中提取原生模块:
- 创建临时解压目录:
mkdir -p /tmp/initramfs_unpack && cd /tmp/initramfs_unpack - 解压当前initramfs镜像:
lsinitrd /boot/initramfs-$(uname -r).img | cpio -idmv - 提取完成后,进入
/tmp/initramfs_unpack/usr/lib/modules/$(uname -r)/kernel/drivers/virtio/目录即可找到virtio-pci.ko文件
- 创建临时解压目录:
自定义模块替换操作步骤
- 先安装编译依赖:
yum install -y kernel-devel-$(uname -r) gcc make,确保安装的内核devel包版本和当前运行内核完全一致 - 基于内核头文件编译出自定义的
virtio-pci.ko - 备份原有initramfs镜像,避免操作失败无法启动:
cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak - 将自定义模块放到系统扩展模块目录:
cp 你编译好的virtio-pci.ko路径 /lib/modules/$(uname -r)/extra/ - 执行
depmod -a更新模块依赖关系 - 重建initramfs镜像,优先加载你自定义的模块:
dracut -f --add-drivers virtio_pci /boot/initramfs-$(uname -r).img $(uname -r) - 重启系统后执行
modinfo virtio_pci,检查输出的路径、版本信息,确认加载的是自定义模块即可
注意:如果系统开启了Secure Boot,自定义内核模块需要完成签名后才能被正常加载,否则会触发安全拦截无法生效。
内容的提问来源于stack exchange,提问作者VictorV
相关产品推荐
相关产品推荐

