2015-06-01 83 views
0

我试图让内核调试在启动过程中工作。我已经按照所有的安装(how to use kgdb over ethernet(kgdboe)?)的步骤,并能正常连接,当我加载后用insmod,但如果我添加此kgdboe在启动时kgdb内核调试

BOOT_IMAGE=/vmlinuz-4.0.0-rc7+ root=UUID=<my_root> ro drm.debug=0x04 kgdbwait [email protected]<src_ip>/eth1,@<target_ip>/ vt.handoff=7 

内核引导行,我没有看到加载的模块,它不包含kgdbwait。

当我看着我的kern.log,我看到以下内容:

kgdboe: eth0 does not have a in_ifaddr struct associated. Cannot get default IP address. 

我有eth0和eth1的方式,但只有eth1的连接。

有什么建议吗?是否只是在启动后才加载pcie网卡,并导致我的问题?

另外,为什么我需要指定源或目标IP地址?有没有办法让kgdboe接受所有的IP地址,甚至在试图在启动时加载它?

感谢

回答

1

是,对于早期的内核调试kgdboe并未真正发挥作用。有几个问题,一些容易解决,有些不能解决。您可以硬连接所需模块,而不是要求加载它们来解决简单问题。但核心问题是kgdb提前等待会暂停所有工作线程,并且几乎所有以太网PCIe卡驱动程序都需要工作线程,否则需要IRQ。即使在轮询的以太网驱动程序支持(非常有限),IRQ也可以被抢占(或非法保持锁定),并阻止轮询的以太网驱动程序运行。因此,早期的内核调试不能可靠地与kgdboe一起工作,并且完全不能与一些以太网驱动程序一起工作。 (例如GRUB2引导线上的kgdbwait)。偶尔会有人讨论如何篡改各种以太网驱动程序源,试图通过专用以太网驱动程序提供kgdboe支持,但我没有发现它。如果需要使用kgdboc(代理代理),您仍然可以使用串行端口以及全功能的串行控制台,该控制台可以复用到单个串行端口。如果需要真正的远程访问,则远程进入启动串行连接的调试系统。

您也可以使用USB端口,但需要特定的USB < - >不再销售的串行USB加密狗。 (Ajays蓝色加密狗)。这些在大约6个月前停止使用,目前还没有更换。 (这是一种适用于Linux的Windows调试设备,而Windows已经转向了本机USB3.0调试功能,而Linux尚未赶上这一点。)因此,除非您有所需的USB转换器或者有其他来源,或者有一个替代适配器,你在USB2.0上运气不佳。

串行依然是你最好的选择,遗憾的是,即使在2016年 见:http://kdbg.wiki.kernel.org