编译Linux内核kernel-debuginfo RPM失败:无法找到debugfiles.list
解决CentOS7下编译Linux 3.10内核kernel-debuginfo RPM包的问题
我来帮你搞定这个问题。你遇到的debugsources.list找不到的错误,是因为移除%define debug_package %{nil}后,RPM构建流程会尝试生成调试包,但内核源码的默认打包脚本没有自动生成这个文件。下面给你两种可行的解决思路:
方法一:修复当前mkspec修改,补全调试包生成逻辑
调整mkspec的修改方式
不要直接删除echo "%define debug_package %{nil}"这一行,而是把它替换成系统默认的调试包定义,让RPM使用标准的调试包生成机制:# 原行:echo "%define debug_package %{nil}" echo "%define debug_package %{__debug_package}"确保内核编译时开启调试信息
调试包需要内核编译时包含调试符号,必须开启对应配置:- 运行
make menuconfig,进入Kernel hacking->Compile-time checks and compiler options - 勾选
Compile the kernel with debug info(对应配置项CONFIG_DEBUG_INFO=y) - 可选:如果需要更详细的调试信息,可勾选
Compile the kernel with dwarf4 debug info(CONFIG_DEBUG_INFO_DWARF4=y) - 保存配置后退出。
- 运行
手动生成debugsources.list文件
在执行make rpm前,在内核源码根目录执行以下命令生成该文件:find . -name "*.c" -o -name "*.h" | grep -v ".git" | sort > debugsources.list构建时RPM会自动读取这个文件,避免找不到的错误。
方法二:用rpmbuild标准流程强制生成调试包
这种方法不需要修改内核的mkspec脚本,更稳定可靠:
先生成内核的SRPM包
make dist make srpm执行完成后,SRPM包会生成在
../rpmbuild/SRPMS/目录下。使用rpmbuild重新构建并强制生成调试包
通过--with debug参数覆盖内核spec里的调试包禁用设置:rpmbuild --rebuild --with debug ../rpmbuild/SRPMS/kernel-3.10*.src.rpm获取生成的调试包
构建完成后,kernel-debuginfo*.rpm会出现在../rpmbuild/RPMS/对应的架构子目录下(比如x86_64)。
额外注意事项
- 确保系统安装了所有必要的构建依赖:
yum install -y rpm-build redhat-rpm-config gcc make ncurses-devel flex bison openssl-devel elfutils-libelf-devel - 调试包体积较大,确保磁盘有足够存储空间;如果构建中出现其他依赖错误,根据提示安装对应包即可。
内容的提问来源于stack exchange,提问作者绗ㄩ笩鍏堥
相关产品推荐
相关产品推荐

