openwrt编译带源码信息的linux内核版本遇到的错误

1、在openwrt的根目录中可以执行如下命令:make menuconfig打开CONFIG_DEBUG选项就会生成待调试信息的内核版本

2、在openwrt的根目录中可以执行如下命令:make kernel_menuconfig打开CONFIG_DEBUG_INFO也会生成待调试信息的内核版本

问题描述:在gcc 7.5.0 和gdb 8.1.1的环境中编译出来的版本放在另一台PC上用gdb(版本7.6)调试的时候出现如下错误

Dwarf Error: wrong version in compilation unit header (is 5, should be 2, 3, or 4)

问题原因:出现此错误的原因主要是gcc 7.5.0生成的调试信息默认是dwarf 5,而gdb7.0支持的是dwarf 2,3,or 4。此问题是由于gcc和gdb的对Dwarf的版本不配套导致的,可以指定gcc编译时的版本。(-gdwarf-2、-gdwarf-3、-gdwarf-4)

解决方法:

1、这个问题的解决方法其实是编译环境的问题,可以更改gcc和gdb的版本,这需要去寻找合适的版本。当然也可以给gcc增加编译参数,使其生成dwarf 2 , 3, or 4 的调试信息,可以在.bashrc中加入alias gcc='gcc-gdwarf-2-gstrict-dwarf',重启终端使其生效,这样gdb可以使用,也不会出现上面的错误。

2、可以通过make kernel_menuconfig来让他产生dwarf 4的调试信息

参考:Dwarf Error: wrong version in compilation unit header (is 4, should be 2) [in module /dawnfs/users/-CSDN博客

说明:gdb需要在编译版本的服务器上启动才能看到源码信息,否则的话是找不到源码信息的

 

 

备注:查看ELF文件的dwarf版本信息

1、首先通过readelf -S vmlinux

2、然后通过readelf -w* vmlinux (*表示section的第一个字母,比如段.debug_info,那选项就是-wi)

或者可以直接通过如下命令查看:

Readelf -wi vmlinux | grep Version

  

 

posted on 2024-09-10 17:38  penglcool  阅读(79)  评论(0编辑  收藏  举报