modprobe: ERROR: could not insert ‘kvm‘: Exec format error

博客讲述在5.3.0-45-generic内核上用5.3.0源码编译kvm时,modprobe kvm出现Exec format error错误。通过dmesg发现版本号不匹配问题,解决办法是将源码Makefile文件修改为当前运行内核版本号,重新生成.config文件、编译module并modprobe。
部署运行你感兴趣的模型镜像

在5.3.0-45-generic内核上,使用5.3.0的源码编译kvm,在modprobe kvm时,出现了错误:

modprobe: ERROR: could not insert ‘kvm’: Exec format error

使用dmesg发现以下log:

kvm: version magic '5.3.0 SMP mod_unload ’ should be '5.3.0-45-generic SMP mod_unload ’

查阅资料后发现,只需要将源码中的Makefile文件修改为当前运行内核的版本号即可:

VERSION = 5
PATCHLEVEL = 3
SUBLEVEL = 0
EXTRAVERSION = -45-generic

然后重新生成.config文件,编译module并modprobe即可

不太确定这种方法在版本号相差很大的内核和源码之间是否可行!

您可能感兴趣的与本文相关的镜像

Dify

Dify

AI应用
Agent编排

Dify 是一款开源的大语言模型(LLM)应用开发平台,它结合了 后端即服务(Backend as a Service) 和LLMOps 的理念,让开发者能快速、高效地构建和部署生产级的生成式AI应用。 它提供了包含模型兼容支持、Prompt 编排界面、RAG 引擎、Agent 框架、工作流编排等核心技术栈,并且提供了易用的界面和API,让技术和非技术人员都能参与到AI应用的开发过程中

在加载内核模块时遇到 `modprobe: error: could not insert 'chrdevbase': Exec format error` 错误通常表明模块的二进制文件与当前运行的内核不兼容,或者模块文件本身存在格式问题。以下是一些可能的原因和解决方法: ### 原因分析 1. **模块与内核版本不兼容** 内核模块是针对特定内核版本编译的,如果模块是为另一个内核版本构建的,加载时会失败。例如,模块可能是为旧版本或不同架构的内核构建的。 2. **模块文件损坏或格式错误** 模块文件(`.ko` 文件)可能已损坏,或者未正确编译,导致其格式无法被内核识别。 3. **交叉编译问题** 如果模块是在不同的架构或平台上编译的,可能会导致模块文件格式不符合当前系统的预期。 4. **缺少模块签名或签名验证失败(适用于启用模块签名的系统)** 某些系统启用了模块签名验证,如果模块未正确签名或签名不匹配,加载将被拒绝。 --- ### 解决方法 #### 1. 确保模块是为当前内核编译的 使用以下命令检查当前运行的内核版本: ```bash uname -r ``` 然后确认模块是否是为该内核版本构建的。如果不是,请重新编译模块: ```bash make -C /lib/modules/$(uname -r)/build M=$(pwd) modules ``` #### 2. 检查模块文件是否存在并具有正确的格式 使用 `file` 命令检查 `.ko` 文件的格式: ```bash file chrdevbase.ko ``` 正常情况下,输出应类似于: ``` chrdevbase.ko: Linux kernel module ELF 64-bit LSB relocatable, x86-64, ... ``` 如果输出显示文件不是有效的 ELF 文件或格式异常,则模块文件可能已损坏或未正确编译。 #### 3. 使用 `modinfo` 检查模块信息 运行以下命令查看模块的详细信息: ```bash modinfo chrdevbase.ko ``` 如果模块信息无法显示或报错,说明模块文件存在问题。 #### 4. 确保模块未被签名或签名正确(适用于启用模块签名的系统) 如果系统启用了模块签名验证,可以使用以下命令检查模块签名: ```bash modinfo chrdevbase.ko | grep -i signature ``` 如果没有输出或显示签名不匹配,则需要重新签名模块或禁用模块签名验证(不推荐用于生产环境)。 #### 5. 禁用模块签名验证(仅限测试) 如果怀疑是签名问题,可以尝试在内核启动参数中添加: ``` module.sig_enforce=0 ``` 编辑 `/etc/default/grub` 文件,修改 `GRUB_CMDLINE_LINUX` 添加上述参数: ```bash GRUB_CMDLINE_LINUX="module.sig_enforce=0" ``` 然后更新 GRUB 配置和 initramfs: ```bash sudo update-grub sudo update-initramfs -u ``` 重启后再次尝试加载模块。 --- ### 示例:重新编译并加载模块 假设模块源文件为 `chrdevbase.c`,执行以下步骤: ```bash make clean make -C /lib/modules/$(uname -r)/build M=$(pwd) modules sudo insmod chrdevbase.ko ``` 如果一切正常,模块应成功加载。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值