You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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=yCONFIG_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

火山引擎 最新活动