kgdb远离init.c start_kernel()

时间:2011-11-12 10:36:48

标签: linux gdb linux-kernel

为什么kgdb总是从kernel/kgdb.c:1749行开始“kgdb:从远程gdb等待dor连接”只是踩到Linux内核的路上。

我想从头开始。

我的环境是:

  • PC ubuntu10.10
  • gdb-kernel 2.6.34.1
  • busybox制作的filesys
  • VirtualMach是qemu

根据网络搜索的提示,我已经制作了我的linux。我可以顺利使用它但是当我尝试远程gdb时,内核总是从:

开始
  

kernel / kgdb.c:1749“kgdb:等待来自远程gdb的连接”

离我想见的函数start_kernel太远了。

我使用以下内容:

qemu -kernel /usr/src/work/bzImage -append "root=/dev/sda kgdboc=ttyS0,115200 kgdbwait" 
     -boot c -hda /usr/src/work/busybox.img -k en-us -serial tcp::4321,server

gdb /usr/src/work/vmlinux  (gdb) target remote localhost:4321

然后我添加-S,以便它可以从头开始。但是当我gdb时,它仍然有问题。

当我输入命令next时,它不会转到下一行并转到其他地方。例如,我在init.c startkernel()之后的next处设置了一个断点。它在其他文件中。

1 个答案:

答案 0 :(得分:0)

如果“kgdb:从远程gdb等待dor连接”对你来说还不够早,你将不得不尝试除kgdb以外的其他东西。想一想:kgdb是内核提供的服务。您无法“从头开始”调试内核,因为内核必须执行足够的初始化才能提供kgdb服务。

幸运的是,还有另一种选择。根据{{​​3}},如果您使用标志-s -S启动qemu,qemu将启动系统并等待您在调试器加载内核之前将调试器附加到localhost:1234。那是那么早吗?