Linux核心調試
本篇文章將介紹如何進行Linux的核心調試,我們的環境如下:
主機:Ubuntu 11.04
虛擬機器:VirtualBox的Ubuntu11.04
首先做如下準備工作:
1.
主機和虛擬機器之間要可以共用檔案,我用的是Samba,參見:http://blog.csdn.net/htttw/article/details/7216149
2.
主機和虛擬機器要可以通過串口通訊,參見:http://blog.csdn.net/htttw/article/details/7221510
本次實驗就相當於對之前實驗的小小總結啦~~
準備完之後,就可以開始了:
1.
首先我們先準備好核心鏡像bzImage和Busybox檔案系統initrd.gz,製作方法可以參考:
http://blog.csdn.net/htttw/article/details/7215858
這裡我們為了加快編譯bzImage的速度,所以精簡了Linux核心,具體參考:http://blog.csdn.net/htttw/article/details/7262239
2.
在主機上開啟minicon:
minicon
3.
第一步的兩個檔案準備好後就可以啟動虛擬機器了,出現grub菜單,以前的實驗都是按“c”後進入grub命令模式,然後輸入“linux”,“initrd”來指定核心鏡像和檔案系統,這對於本實驗是不夠的,我們還需要把虛擬機器的輸出資訊通過串口送到我們的主機上,但我摸索了很久還是沒有找到如何在grub命令模式下設定串口的命令,所以,我們換另一鐘方法:
在grub菜單中選擇一項功能表項目,按“e”編輯該功能表項目,把原有的命令全部刪除,然後輸入以下語句:
linux /boot/bzImage console=tty0 console=ttyS0, 115200initrd /boot/initrd.gz
就可以了,然後按F10啟動。
4.
這樣的話,在我們主機的minicom中就會出現虛擬機器從串口輸出的資訊啦~~
而且,在虛擬機器進入Busybox後,直接在主機的minicom中輸入命令就可以直接操作虛擬機器啦,~~
以上的操作全部在主機的minicom中完成
5
由於我的筆記本沒有串口,所以在gdb中執行target remote /dev/ttyS0時會出錯!錯誤資訊:/dev/ttyS0 輸入/輸出錯誤,所以我們可以把具名管道/tmp/vbox重新導向到某個連接埠,然後就可以啦,我們使用socat命令:
sudo apt-get install socat
socat tcp4-listen:8888 /tmp/vbox
表示把具名管道/tmp/vbox的輸出重新導向到tcp的8888連接埠
然後在gdb中輸入:
set remotebaud 115200
target remote tcp:localhost:8888
就可以了
後面呢?