Yocto Linux创建了一个带有糟糕的矮人调试信息版本的vmlinux(不是2,3,4)

时间:2016-06-15 15:01:25

标签: debugging linux-kernel gdb

我正在使用Yocto 1.8(fido)为通用64位x86构建Linux内核。内核构建并启动和运行。但是当我尝试使用调试器来调试它时,我抛出的所有调试器和工具都会停止并且无法使用vmlinux文件中的调试信息。我使用应该生成调试信息的设置构建了这个内核,并使用objdump -g找到了大量的调试信息。那部分对我来说似乎是正确的。

gdb抱怨:

(gdb) symbol-file /yoctobuild/qsp-yocto/poky/build/tmp/work/genericx86_64-poky-linux/linux-yocto/3.14.36+gitAUTOINC+162dfe3bb0_dbe5b52e93-r0/linux-genericx86_64-standard-build/vmlinux  
Reading symbols from /yoctobuild/qsp-yocto/poky/build/tmp/work/genericx86_64-poky-linux/linux-yocto/3.14.36+gitAUTOINC+162dfe3bb0_dbe5b52e93-r0/linux-genericx86_64-standard-build/vmlinux...  
Dwarf Error: wrong version in compilation unit header (is 26213, should be 2, 3, or 4)   
[in module /yoctobuild/qsp-yocto/poky/build/tmp/work/genericx86_64-poky-linux/linux-yocto/3.14.36+gitAUTOINC+162dfe3bb0_dbe5b52e93-r0/linux-genericx86_64-standard-build/vmlinux]  
(no debugging symbols found)...done.  

关键是这个,显然是完全破碎的版本:

  

Dwarf Error:编译单元标题中的版本错误(是26213,   应该是2,3或4)

Objdump对破坏的内容有不同的看法:

[jakob@mnshome010-1 linux-genericx86_64-standard-build]$ objdump -g vmlinux | more
objdump: Warning:
vmlinux:     file format elf64-x86-64
Contents of the .debug_aranges section:

Bogus end-of-siblings marker detected at offset 57646c3 in .debug_info section

objdump: Warning: Bogus end-of-siblings marker detected at offset 57646c4 in .debug_info section
objdump: Warning: Bogus end-of-siblings marker detected at offset 57646c5 in .debug_info section
objdump: Warning: Further warnings about bogus end-of-sibling markers suppressed
objdump: Warning: Invalid pointer size (99) in compunit header, using 4 instead
objdump: Warning: Debug info is corrupted, length of CU at 5768ed8 extends beyond end of section (length = 72746c70)

听起来像调试信息的方式不止一种。或者这可能只是导致gdb首先被抛出的原因。

那么如何使用实际允许调试的调试信息创建vmlinux呢?

创建这个损坏的文件会出现什么问题,怎么能修复?

1 个答案:

答案 0 :(得分:0)

对于记录,通过完全删除Yocto构建目录并从头开始设置新构建来解决此问题:

  • cd .... / poky /
  • rm -rf build /
  • source oe-init-build-env

复制自定义build / conf / bblayers.conf和build / conf / local.conf

重建图片。

分析就是在某处,我的第一个构建生成了一个包含损坏的调试信息的二进制文件。这被链接到内核vmlinux,并使我的所有调试工具都抱怨。不知道哪个文件或它是如何被破坏的。从头开始重建并不是一个非常令人满意的解决方案,但在这种情况下它确实解决了这个问题。