启用lockdep后Linux内核重编译失败问题求助
内核编译报错的解决办法
核心问题根源
你使用的/usr/src/linux-headers-5.15.0.72仅包含内核头文件,没有完整的内核源码(像arch/arm/tools/syscall.tbl这类编译必需的文件不在headers目录内),同时ARCH参数与虚拟机架构不匹配,导致编译失败。
具体解决步骤
获取完整内核源码
不要在headers目录下进行编译操作,先下载对应版本的完整内核源码:
如果是Debian/Ubuntu系系统,执行:sudo apt install dpkg-dev apt source linux-image-$(uname -r)下载完成后会生成完整的内核源码目录,切换到该目录再进行后续操作。
匹配虚拟机架构
M1 Pro是arm64(aarch64)架构,UTM中的Linux虚拟机必然也是arm64架构,编译时必须指定ARCH=arm64,绝对不能用ARCH=arm(这是32位架构,与你的环境不兼容)。安装编译依赖
缺失classmap.h大多是因为缺少编译依赖,执行以下命令安装:sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev重新配置并编译
- 清理之前的错误配置:
make ARCH=arm64 distclean - 复制当前运行内核的配置作为基础:
cp /boot/config-$(uname -r) .config - 重新启用lockdep:
在菜单中找到make ARCH=arm64 menuconfigKernel hacking->Lock debugging (spinlocks, mutexes, etc.),勾选lockdep相关选项后保存退出。 - 开始编译:
用sudo make ARCH=arm64 -j$(nproc)$(nproc)自动匹配CPU核心数,比固定-j4效率更高。
- 清理之前的错误配置:
验证虚拟机架构
执行uname -m,如果输出为aarch64,说明是正确的arm64环境;如果不是,需要重新创建UTM的arm64架构虚拟机。
内容的提问来源于stack exchange,提问作者Luisa Cicolini
相关产品推荐
相关产品推荐

