Ubuntu 12.04安裝帶調試功能的Bochs 2.6.2, 調試linux 0.11 內核

轉自:http://shenan1984.blog.163.com/blog/static/25308510201362465220720/

要下載的軟件包:
bochs-2.6.2
linux-0.11-081030.tar.gz 
linux-0.11-devel-060625.zip(hdc-0.11-new.img 文件系統)
(hdc-0.11-new.img 只用這一個文件也可以時入linux 0.11系統,只需在配置bochs時稍做修改就可以,但是要調試源碼的話,還是自己編譯來得爽)

安裝bochs之前做一些準備工作
sudo apt-get install build-essential
sudo apt-get install xorg-dev

sudo apt-get install libgtk2.0-dev
sudo apt-get install bison

一.安裝bochs
1. 解包
tar xvfz bochs-2.6.2.tar.gz
2.進入bochs-2.6.2目錄
cd bochs-2.6.2
3. 配置
編譯兩份不同的配置的版本
第一個的版本爲使用bochs自帶的內部調試器

./configure --prefix=/opt/bochs/debug --enable-plugins --enable-debugger --enable-disasm
註釋:
    * --prefix=/opt/bochs/debug 軟件將被安裝到哪個目錄下
    * --enable-plugins 是必須要的
    * --enable-debugger 是打開bochs的自帶調試器
    * --enbale-disasm 允許反彙編
4. 編譯
make
5. 安裝
sudo make install
6.加一個符號連接
ln -s /opt/bochs/debug/bin/bochs /usr/bin/bochsdbg

第二個版本爲使用gdb-stub的版本
1. 清理
在配置第二個版本之前,需要把剛纔編譯的東西清理掉,輸入以下命令:
make clean
2. 配置
然後配置,配置命令爲
./configure --prefix=/opt/bochs/gdbstub --enable-plugins --enable-disasm --enable-gdb-stub
配置註釋:
    * --enable-gdb-stub 打開gdb stub支持
    * 其他選項同上,注意這個不同版本會安裝到不同的目錄下。
3. 編譯
make
4. 安裝
sudo make install
這樣bochs使用外部調試器gdb的版本就編譯好了。
5.建一個符號鏈接
ln -s /opt/bochs/gdbstub/bin/bochs /usr/bin/bochs

二. 編譯linux 0.11 內核
linux 0.11源碼文件在linux-0.11-081030.tar.gz中,進入目錄解壓後的目錄linux-0.11中

1. ubuntu 8.04 gcc 版本爲4.2.4,但是GCC4.x 默認檢查stack安全,會導致出現__stack_chk_fail錯誤,所以在編譯之前應先修改Makefile:
    linux-0.11/Makefile
    linux-0.11/kernel/Makefile
    linux-0.11/kernel/chr_dev/Makefile
    linux-0.11/kernel/blk_dev/Makefile
    linux-0.11/fs/Makefile
    在 CFLAGS參數中加入-fno-stack-protector

2. 安裝 as86 ld86
下載dev86-0.16.3-8.i386.rpm包,轉爲deb,然後安裝
sudo apt-get install alien (安裝rpm轉deb工具)
sudo alien dev86-0.16.3-8.i386.rpm (轉爲deb)
sudo apkg -i dev86-0.16.3-8.i386.deb (安裝as86與ld86)
更簡單的方法是: sudo apt-get install bin86 (這種方法等下次重裝系統的時候試一下,呵呵)

3.編譯 make (編譯不成功記得在下次編譯前 make clean 一下),如果編譯成功則在linux-0.11目錄下生成 Image

三. 配置bochs

這是bochs-2.3.5的配置文件

romimage: file=$BXSHARE/BIOS-bochs-latest  
megs: 16 
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
vga: extension=vbe 
floppya: 1_44="Image", status=inserted 
floppyb: 1_44=diska.img, status=inserted 
ata0-master: type=disk, path="hdc-0.11-new.img", mode=flat,cylinders=410, heads=16, spt=38 
boot: a 
log: bochsout.txt
parport1: enable=0 
vga_update_interval: 300000 
keyboard_serial_delay: 200 
floppy_command_delay: 50000 
ips: 4000000 
mouse: enabled=0 
private_colormap: enabled=0 
fullscreen: enabled=0
screenmode: name="sample"

(注:如果編譯內核不成功且只是想啓動bochs,看一下linux 0.11 界面的話,可以直接把上述配置的boot:a,改爲boot:c)

運行bochs
bochs -f bochsrc.bxrc
注:用gdb 調試時出現“system bios must end at 0xffff”,可把*.bxrc romimage 一行中的address=0f0000 去掉
#romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000
 romimage: file=$BXSHARE/BIOS-bochs-latest
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章