我正在使用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呢?
创建这个损坏的文件会出现什么问题,怎么能修复?
答案 0 :(得分:0)
对于记录,通过完全删除Yocto构建目录并从头开始设置新构建来解决此问题:
复制自定义build / conf / bblayers.conf和build / conf / local.conf
重建图片。
分析就是在某处,我的第一个构建生成了一个包含损坏的调试信息的二进制文件。这被链接到内核vmlinux,并使我的所有调试工具都抱怨。不知道哪个文件或它是如何被破坏的。从头开始重建并不是一个非常令人满意的解决方案,但在这种情况下它确实解决了这个问题。