如何使gem5等待GDB连接以在模拟开始时可靠地中断并查看Linux内核的start_kernel?

时间:2018-03-15 09:47:22

标签: gem5

在QEMU上,我可以使用-S -s,它在开始模拟之前等待GDB连接

如何在gem5上做同样的事情,希望使用fs.py脚本?

当我交换终端并连接时,模拟已经超过start_kernel

我看到了--debug-break旗帜,但如果我这样做,我就不知道如何使用它:

--debug-break=1

运行失败了:

Trace/breakpoint trap   (core dumped)

编辑:在进一步了解之后,我现在发现提交c2baaab0ed43ad09fc8b7fcda25207b6ccd6c0e3添加了一个参数:

+    wait_for_remote_gdb = Param.Bool(False,
+        "Wait for a remote GDB connection");

这一定是我正在寻找的。但我没有找到如何从fs.py启用它,似乎没有曝光?

1 个答案:

答案 0 :(得分:0)

在34efcae1b532df56a7ef65f0e4b76179c9bc9479添加--param之后,您现在可以执行以下操作:

gem5.opt fs.py --param 'system.cpu[0].wait_for_remote_gdb = True'

然后连接gdb:

arm-linux-gdb
-q
-ex 'file vmlinux'
-ex 'target remote localhost:7000'

然后您就只剩下第一条指令了。

这里是highly automated setup

请记住aarch64在该提交时已损坏:https://www.mail-archive.com/gem5-users@gem5.org/msg15383.html

--param之前,例如在7bfb7f3a43f382eb49853f47b140bfd6caad0fb8处,应用此小补丁:

diff --git a/configs/example/fs.py b/configs/example/fs.py
index 3997ed76c..b4267ebc0 100644
--- a/configs/example/fs.py
+++ b/configs/example/fs.py
@@ -376,5 +376,6 @@ if buildEnv['TARGET_ISA'] == "arm" and options.generate_dtb:
             sys = getattr(root, sysname)
             sys.dtb_filename = create_dtb_for_system(sys, '%s.dtb' % sysname)

+test_sys.cpu[0].wait_for_remote_gdb = True
 Simulation.setWorkCountOptions(test_sys, options)
 Simulation.run(options, root, test_sys, FutureClass)