编辑
2025-04-03
工作知识
0
请注意,本文编写于 64 天前,最后修改于 64 天前,其中某些信息可能已经过时。

目录

一、设置saft-path
1.1 指定路径
1.2 设置所有的路径
1.3 启动参数设置
二、运行RTEMS
三、gdb连接
四、设置pretty-printing

gdb工具可以调试RTEMS操作系统,本文介绍如何使用gdb开展调试

一、设置saft-path

总共三种方法设置safe-path,分别如下

1.1 指定路径

我们可以设置自己想要的路径作为saft-path,如下

# vim ~/.gdbinit add-auto-load-safe-path /home/user

1.2 设置所有的路径

也可也将所有路径作为saft-path,如下

# vim ~/.gdbinit set auto-load safe-path /

1.3 启动参数设置

可以通过启动参数来设置,如下

# aarch64-rtems6-gdb -iex "set auto-load safe-path /" build/aarch64/zynqmp_qemu/testsuites/samples/ticker.exe

二、运行RTEMS

我们可以通过-s来运行RTEMS,这样默认情况下,qemu会启动gdb,远程可以连接RTEMS来进行调试,如下

# qemu-system-aarch64 -no-reboot -nographic -s -serial mon:stdio -machine xlnx-zcu102 -m 4096 -kernel build/aarch64/zynqmp_qemu/testsuites/samples/ticker.exe

三、gdb连接

在qemu启动rtems之后,可以通过127.0.0.1连接,如下

# aarch64-rtems6-gdb build/aarch64/zynqmp_qemu/testsuites/samples/ticker.exe # target extended-remote 127.0.0.1:1234

当连接成功之后,出现如下信息

Remote debugging using 127.0.0.1:1234 _CPU_Thread_Idle_body (ignored=0) at ../../../cpukit/score/cpu/aarch64/aarch64-thread-idle.c:46 46 while ( true ) { (gdb) bt #0 _CPU_Thread_Idle_body (ignored=0) at ../../../cpukit/score/cpu/aarch64/aarch64-thread-idle.c:46 #1 0x000000000001edd0 in _Thread_Handler () at ../../../cpukit/score/src/threadhandler.c:164 #2 0x000000000001ece0 in ?? ()

至此,gdb远程加载成功

四、设置pretty-printing

为了支持pretty-printing,可以导出.debug信息如下

# aarch64-rtems6-objdump -s -j .debug_gdb_scripts build/aarch64/zynqmp_qemu/testsuites/samples/ticke r.exe build/aarch64/zynqmp_qemu/testsuites/samples/ticker.exe: file format elf64-littleaarch64 Contents of section .debug_gdb_scripts: 0000 04676462 2e696e6c 696e6564 2d736372 .gdb.inlined-scr 0010 6970740a 696d706f 72742073 79730a69 ipt.import sys.i 0020 6d706f72 74206f73 2e706174 680a7379 mport os.path.sy 0030 732e7061 74682e61 7070656e 64286f73 s.path.append(os 0040 2e706174 682e6a6f 696e2867 64622e50 .path.join(gdb.P 0050 5954484f 4e444952 2c202772 74656d73 YTHONDIR, 'rtems 0060 2729290a 696d706f 72742072 74656d73 ')).import rtems 0070 2e707072 696e7465 72206173 20707072 .pprinter as ppr 0080 696e7465 720a00 inter..

然后通过pprint.py来加载,如下即可

(gdb) source ../out/share/gdb/python/rtems/pprinter.py