2015-06-01 117 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