簡體   English   中英

如何在Linux內核模塊`init()`中調試問題?

[英]How to debug problems in Linux kernel module `init()`?

我正在使用遠程(k)gdb來調試模塊中的問題,該問題在加載時會引起混亂,例如在調用init()時。

堆棧跟蹤只顯示do_one_initcall(mod->init)導致崩潰。 為了獲得在gdb中加載的符號文件,我需要獲取模塊文本部分的地址,並獲得我需要加載模塊。

因為busybox(1.16.1)中的insmod不支持-m所以我堅持使用grep modulename /proc/modules +從nm添加偏移來計算地址。

所以我在這里面臨一個雞和蛋的問題 - 為了能夠調試模塊加載,我需要加載模塊 - 但是為了加載模塊,我需要調試問題。 ..

所以我目前正在考慮兩種選擇 - 是否有辦法獲取地址信息:

  1. 通過模塊初始化代碼中的printk()
  2. 通過printk()在內核代碼中的某個地方

所有這一切都在調用mod->init() - 所以我可以在那里放置一個斷點,加載符號文件,點擊c然后看到它崩潰並燒掉......

您可以將代碼構建到內核而不是模塊中嗎? 這可能會簡化調試init()調用。

您還可以在do_one_initcall()設置斷點,並查看do_one_initcall() mod->init的地址以獲取加載地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM