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的调试信息
说明:gdb需要在编译版本的服务器上启动才能看到源码信息,否则的话是找不到源码信息的
备注:查看ELF文件的dwarf版本信息
1、首先通过readelf -S vmlinux
2、然后通过readelf -w* vmlinux (*表示section的第一个字母,比如段.debug_info,那选项就是-wi)
或者可以直接通过如下命令查看:
Readelf -wi vmlinux | grep Version