kgdb內(nèi)核調(diào)試

一、環(huán)境準(zhǔn)備

  1. centos操作系統(tǒng),并安裝VirtualBox虛擬機(jī),虛擬機(jī)使用ubuntu 14.04 desktop
  2. centos上安裝socat
  3. linux 3.10.1源碼包 下載地址
  4. 虛機(jī)上可能要安裝一些包 :[參考](apt-get install libncurses5-dev libssl-dev bison flex libelf-dev gcc make openssl libc6-dev)

PS. 針對(duì)想調(diào)試的kernel版本選擇虛擬機(jī)系統(tǒng)版本,盡量讓兩者版本接近,否則會(huì)因?yàn)?code>gcc版本造成一系列編譯錯(cuò)誤

二、在虛擬機(jī)上編譯linux kernel

  1. 在源碼根目錄,通過make menuconfig,配置編譯選項(xiàng)。為了支持kgdb需要勾選kernel hacking等,具體可以參考config配置參考1 config配置參考2。針對(duì)特定學(xué)習(xí)和測試場景,需要勾選一些其他配置,如默認(rèn)是沒有勾選ext2ext3的,若想調(diào)試ext2則需要勾選它。
  2. make -j8
  3. make bzImage,假如出現(xiàn)幺蛾子1,盡量換個(gè)和虛擬機(jī)系統(tǒng)版本接近的linux版本,避免浪費(fèi)時(shí)間
  4. make modules
  5. make modules_install
  6. make install
    搞定后,重啟虛擬機(jī)

三、調(diào)試前的準(zhǔn)備

  1. 虛擬機(jī)中更改grub文件配置
因?yàn)槲覀冃枰褂胟gdb進(jìn)行調(diào)試,所以需要在啟動(dòng)的時(shí)候多向kernel傳入兩個(gè)參數(shù),所以需要更改配置文件。
ubuntu下,文件位于/etc/default/grub,需要root權(quán)限進(jìn)行編輯。
在GRUB_CMDLINE_LINUX_DEFAULT選項(xiàng)后面增加kgdboc=ttyS0,115200 kgdbwait,我的這個(gè)選項(xiàng)最終變成了這樣:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash kgdboc=ttyS0,115200 kgdbwait"
然后保存, 更新grub,執(zhí)行update-grub2重啟,如果一切正常,你會(huì)發(fā)現(xiàn)啟動(dòng)卡住了,顯示等待connection from remote gdb。
————————————————
版權(quán)聲明:本文為CSDN博主「Anciety」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_29343201/article/details/73909928
  1. 將在虛擬機(jī)上編譯好的linux kernel完整拷貝到主機(jī)的某個(gè)目錄,如/home/teeth/debug_u14_linux3-10/linux-3.10.1
  2. 配置虛擬機(jī)的串口(kgdb需要主機(jī)通過串口和虛擬機(jī)通信)。虛擬機(jī)中不需要?jiǎng)?chuàng)建/tmp/serial文件。
    image.png

四、調(diào)試

  1. 啟動(dòng)虛擬機(jī)(注意選擇為自己編譯的內(nèi)核),然后虛擬機(jī)會(huì)卡在kgdb界面(如果剛啟動(dòng)就卡住,沒有進(jìn)入選擇內(nèi)核界面,關(guān)掉重啟就行了,自己環(huán)境各一次就遇到這種情況,不知道為啥會(huì)這樣,不過重啟很有效)
    image.png
  2. 主機(jī)上開個(gè)終端,執(zhí)行socat -d -d /tmp/serial pty,根據(jù)實(shí)際情況得到PTY is /dev/pts/2
    image.png
  3. 主機(jī)上再開一個(gè)終端,cd到主機(jī)的/home/teeth/debug_u14_linux3-10/linux-3.10.1,執(zhí)行gdb ./vmlinux 再輸入target remote /dev/pts/2。這個(gè)終端用來調(diào)試,此時(shí)斷在了kgdb。調(diào)試方法就是gdb,c,然后虛擬機(jī)就正常啟動(dòng)進(jìn)入了gui
  4. 如果需要再次斷在調(diào)試終端,需要在虛擬機(jī)執(zhí)行:echo "g" > /proc/sysrq_trigger。這樣控制權(quán)就又交給了調(diào)試終端??梢栽谡{(diào)試終端設(shè)置斷點(diǎn),進(jìn)行調(diào)試了。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android一天一題知識(shí)點(diǎn)http://m.itdecent.cn/u/f9fbc7a39b36Andro...
    不好辦啊呀閱讀 316評(píng)論 0 0
  • 目錄 如何遍歷數(shù)組 如何遍歷對(duì)象 http瀏覽器緩存機(jī)制 304狀態(tài)碼 500狀態(tài)碼具體場景 DNS原理 CND原...
    Grandperhaps閱讀 381評(píng)論 0 1
  • 彩排完,天已黑
    劉凱書法閱讀 4,501評(píng)論 1 3
  • 表情是什么,我認(rèn)為表情就是表現(xiàn)出來的情緒。表情可以傳達(dá)很多信息。高興了當(dāng)然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,938評(píng)論 2 7
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者,不喜歡去冒險(xiǎn),但是人生放棄了冒險(xiǎn),也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 8,212評(píng)論 0 4

友情鏈接更多精彩內(nèi)容