如何在Amazon Linux上为自编译linux-4.14.14安装kernel-debuginfo?
解决自定义编译内核与SystemTap的调试信息匹配问题
我明白你现在的困境——自己编译了linux-4.14.14内核,但Amazon Linux官方的amzn-main-debuginfo源只提供他们发布的4.9系列内核调试包,完全找不到对应4.14.14版本的预编译kernel-debuginfo。其实这很正常,因为官方debuginfo源只会维护他们自己发布的内核版本,你自定义编译的内核得自己生成调试信息,再让SystemTap识别它,具体操作步骤如下:
第一步:重新编译内核,开启调试相关配置
如果之前编译内核时没开调试选项,得重新来一遍:
- 进入你的内核源码目录,打开图形化配置界面:
make menuconfig - 务必确保以下几个关键选项被启用(可以用界面里的搜索功能快速定位):
CONFIG_DEBUG_INFO=y:这是生成完整内核调试信息的核心开关CONFIG_DEBUG_INFO_REDUCED=n(如果有这个选项,一定要关闭,否则调试信息会被精简,SystemTap用不了)CONFIG_KPROBES=y:SystemTap依赖的内核探针功能必须开启CONFIG_RELAY=y、CONFIG_DEBUG_FS=y:这两个是辅助调试的文件系统支持,也得打开
- 保存配置后,重新编译并安装内核(
-j$(nproc)是用满CPU核心加速编译):make -j$(nproc) make modules_install make install
第二步:把调试信息放到SystemTap能找到的地方
编译完成后,内核的调试信息会存在源码目录下的vmlinux文件里(也可能在/boot/下对应版本的目录里),你需要把它放到SystemTap默认搜索的路径:
- 先创建对应版本的目录:
mkdir -p /usr/lib/debug/lib/modules/4.14.14 - 复制
vmlinux文件过去:cp /path/to/your/kernel/source/vmlinux /usr/lib/debug/lib/modules/4.14.14/ - 另外,只要你编译时开了
CONFIG_DEBUG_INFO,内核模块的调试信息会自动跟着模块安装到/lib/modules/4.14.14/目录下,SystemTap会自动识别,不用额外操作。
第三步:验证配置是否成功
写个最简单的SystemTap脚本测试一下:
stap -e 'probe begin { println("SystemTap 成功适配自定义内核啦!"); exit() }'
如果能正常输出这句话,没有报错,说明调试信息已经被正确识别,SystemTap可以和你的4.14.14内核协同工作了。
额外提醒
- 确保你编译SystemTap时用的内核头文件,和当前运行的4.14.14内核版本完全一致,哪怕是微小的版本差异都可能导致兼容性问题。
- 如果遇到类似
kernel version mismatch的错误,先跑uname -r看看输出的内核版本号(包括自定义后缀),确保所有路径和配置里的版本号都和它完全匹配。
内容的提问来源于stack exchange,提问作者Michael Martinez




