350
技術社區[雲棲]
用KGdb和VMware調試Linux內核,System Call
Linux的內核和System Call不好調試,參考這裏:
https://stackoverflow.com/questions/5999205/cannot-step-into-system-call-source-code
簡單來說,如果想在本機調試system call,那麼當你進入system call時,係統已經在掛起狀態了,那麼它又怎樣能響應用戶的輸入?
所以,有一個UML(https://user-mode-linux.sourceforge.net/)的方式,把內核當成一個進程啟動,這樣就可以在本機調試。
否則,隻能通過串口,或者網絡等從不同的機器來調試。
自己用KGdb和Vmware虛擬機折騰了下用串口調試Linux system call。總結一下。
編繹內核
首先,在虛擬機裏安裝好linux係統(注意把硬盤空間選擇大點),編繹帶Debug信息的內核:
先下載相關的包,及當前內核的源代碼,注意用apt-get source下載源代碼時,是放在當前目錄下的。
mkdir code cd code sudo apt-get dpkg-dev sudo apt-get source linux-image-$(uname -r) sudo apt-get install libncurses5-dev sudo apt-get install bc再配置編繹選項:
sudo make menuconfig會有一個界麵,可以自己設置編繹選項。在“Kernel hacking”下, 有KGDB的選項,不過貌似默認都選好了。
執行make編繹,再執行
sudo make make modules_install //編繹模塊我編繹花了3,4個小時,編繹出來竟然有11G。。
把這些編繹好的數據複製一份到宿主機上,等下調試的時候要用到。
為虛擬機配置串口
在Vmware的“Settings”,“Hardware”,點“add",選擇”Serial Port“,再”output to socket",在“Socket(named pipe)”裏,填上“/tmp/testsocket”。則虛擬機裏的串口數據會寫到/tmp/testsocket這個文件裏。
配置新內核啟動
編繹好了內核,要用新內核,最簡單的辦法是直接切換到root用戶:
make install會自動複製vmlinuz,.config, initrd.img等文件到boot目錄下,並默認以新內核啟動。
僅以新內核啟動還不可以調試,修改/boot/grub/grub.cfg 文件,在"linux"命令下增加kgdb參數,如:
linux /boot/vmlinuz-3.13.0-24-generic root=UUID=xxx-b91d-xxx-839d-xxxxxx ro quiet kgdboc=ttyS1,115200 kgdbwait如果隻是不想啟動時等待,可以去掉kgdbwait參數。
重啟虛擬機,可以發現停在這樣的畫麵上:
用socat來傳輸串口數據到PTS
虛擬機已經在暫停,等待我們的連接了。
先用socat來把虛擬機的串口輸出傳送到pts上(可以用man pts 查看pts的更多信息)。
用ctrl + alt + f1,進入tty1,再輸入下麵的命令:
sudo socat -d -d /tmp/testsocket PTY
如果成功的話,我們可以看到類似這樣的輸出:
successfully connected ... PTY is /dev/pts/14
用gdb連接pts,並調試
切換到root用戶,進入到從虛擬機複製出來的編繹好的代碼目錄,執行:
gdb ./vmlinux
如果不加載vmlinux文件的話,則打不了斷點。在gdb裏再輸入
Remote debugging using /dev/pts/14 continue
然後可以看到虛擬機裏的linux開啟正常啟動了。
注意,如果是想在system call上打斷點,則要在原來函數名前加上“sys_”。如
break sys_open
在gdb裏輸入continue之後,發現沒有辦法再打斷點了,可以在虛擬機裏以root用戶執行:
echo g > /proc/sysrq-trigger
這樣就可以讓虛擬機暫停,在宿主機的gdb裏可以重新操作了。
參考:
https://www.opensourceforu.com/2011/03/kgdb-with-virtualbox-debug-live-kernel/#https://www.eetop.cn/blog/html/21/766721-25573.html
https://blog.csdn.net/u011839461/article/details/12002075
https://wenku.baidu.com/view/baf6af3f0912a21614792996.html
https://my.oschina.net/fgq611/blog/113249
https://blog.csdn.net/star_xiong/article/details/17357821
最後更新:2017-04-03 12:56:30