使用VirtualBox來(lái)調(diào)試FreeBSD內(nèi)核
1. 配置Guest的串口
更新ports,目前VirtualBox的版本為4.2.12。在VirtualBox里安裝完FreeBSD后,修改/boot/device.hints:
hint.uart.0.flag=”0x90”
這里只用把串口的高8位置為1即可。另外,現(xiàn)在FreeBSD版本里的串口設(shè)備不再以sio來(lái)命名;在device.hint配置的是uart,而實(shí)際連接的/dev/cuau0。
在VirtualBox的串口配置界面里,選擇使用com1,I/O端口采用默認(rèn)值,端口模式選用主機(jī)管道,勾選上創(chuàng)建通道。對(duì)應(yīng)的管道文件的路徑為/tmp/vboxpipe_FreeBSD9_64(路徑自行決定)。
在啟動(dòng)Guest系統(tǒng)后,就會(huì)在這個(gè)路徑上創(chuàng)建vboxpipe_FreeBSD9_64的socket文件。
2. 安裝socat
進(jìn)入/usr/ports/net/socat,安裝socat。這個(gè)工具目前用來(lái)代替nc,提供的功能非常強(qiáng)大,可以直接完成簡(jiǎn)單的NAT端口映射。我們這里用來(lái)做TCP到/tmp/vboxpipe_FreeBSD9_64連接。
3. 配置VirtualBox的Guest網(wǎng)絡(luò)環(huán)境
這里驗(yàn)證了好幾種方式,為了和Guest進(jìn)行通訊,我們能采用的網(wǎng)絡(luò)連接方式為:橋接和Host Only的方式。、
1.橋接
a.在Host里分別創(chuàng)建tap和bridge設(shè)備:
ifconfig bridge create
ifconfig tap create
上述命令會(huì)自動(dòng)分配bridge0和tap0
b.建立tap0和Host的物理網(wǎng)卡連接
ifconfig bridge0 addm tap0 add re0 up
這里re0是我的物理網(wǎng)卡。上述命令建立了從re0和tap0的橋接,而bridge0只是一個(gè)橋接設(shè)備。
c.給bridge0分配IP
我采用的都是DHCP方式,直接給bridge0分配IP地址:
dhclient bridge0
如果不這樣子做的話(huà),當(dāng)設(shè)置VirtualBox的Guest主機(jī)為橋接方式連接到tap0上時(shí),是無(wú)法ping通外網(wǎng)的。話(huà)說(shuō)這里的原因也沒(méi)有時(shí)間去追究,一切以先完成目標(biāo)為主。
d.配置Guest的網(wǎng)絡(luò)
在Guest的網(wǎng)絡(luò)配置里設(shè)置連接方式為橋接,連接的網(wǎng)卡為tap0
上述的bridge和tap的配置可以直接寫(xiě)到/etc/rc.conf里:
cloned_interfaces=”tap0 bridge0”
ifconfig_bridge0=”addm re0 add tap0”
但bridge0的IP地址只能通過(guò)手動(dòng)方式來(lái)獲取,即便是在上面的ifconfig_bridge0里添加SYNDHCP,結(jié)果還是一樣的,手動(dòng)進(jìn)行DHCP方式如下:
dhclient bridge0
2.Host Only
采用Host Only的時(shí)候,Guest的網(wǎng)絡(luò)配置那里會(huì)出現(xiàn)vboxnet0,選擇連接vboxnet0,此時(shí)啟動(dòng)Guest系統(tǒng),系統(tǒng)默認(rèn)采用DHCP來(lái)獲取IP。此時(shí)能得到和vboxnet0一個(gè)網(wǎng)段的IP地址。但此時(shí)仍然無(wú)法ping通外網(wǎng)。但可以通過(guò)scp等命令把帶調(diào)試信息的內(nèi)核傳給Guest主機(jī)。
4. 準(zhǔn)備調(diào)試環(huán)境
編譯帶調(diào)試版本的FreeBSD內(nèi)核,可以參考使用《qemu來(lái)調(diào)試FreeBSD系統(tǒng)內(nèi)核》,得到帶調(diào)試版本的內(nèi)核后,更新到Guest系統(tǒng)上。
5. 開(kāi)始調(diào)試
1.啟動(dòng)Guest系統(tǒng),此時(shí)會(huì)生成對(duì)應(yīng)的管道文件/tmp/vboxpipe_FreeBSD9_64
2.當(dāng)Guest系統(tǒng)進(jìn)入啟動(dòng)菜單項(xiàng)的時(shí)候,按Esc鍵進(jìn)入命令行模式,輸入boot -d進(jìn)入調(diào)試模式,然后輸入gdb進(jìn)入gdb調(diào)試方式
3.使用socat創(chuàng)建TCP到管道的連接:
socat tcp4-listen:1234 /tmp/vboxpipe_FreeBSD9_64
4.使用GDB開(kāi)始進(jìn)行調(diào)試:
我使用的是GDB7.5.1,接入gdb后,設(shè)置當(dāng)前的系統(tǒng)架構(gòu):
set architecture i386:x86-64:intel
加載完符號(hào)表后連接Guest主機(jī)進(jìn)行調(diào)試:
target remote 127.0.0.1:1234
posted on 2013-05-12 08:47 Young 閱讀(4243) 評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi): FreeBSD

