免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5796 | 回复: 7

[虚拟化] [原创]openSUSE 10.3 + Bochs搭建操作系统调试环境。 [复制链接]

论坛徽章:
0
发表于 2008-02-08 08:37 |显示全部楼层
作者:future0906,阿肠
前言:
本文主要阐述利用Bochs和Grub,如何搭建一个操作系统的调试环境和发布。

如果你需要寻找的是如果开发环境创建,十分抱歉,本文并不会起任何作用,请直接忽略。


开发自己的操作系统是大部分计算机爱好者所向往的。操作系统也是软件,同样必须进行调试和测试。然而,操作系统的调试并没有想象中容易,我们必须依靠虚拟机。显然VMWare并不是我们的最佳选择。虽然它在速度上有着无可比拟的优势,但在调试方面却显得相形见绌。而且它的大块头并不是我们想要的。经过筛选,我选中了Bochs。Bochs在调试方面有着巨大的优势,内置反汇编,单步调试,并且能结合gdb对C代码进行单步,而且它还支持NE2000虚拟网卡。

操作系统的开发其实不必从头开始(也很难从头开始)。特别是BootLoader(系统装载程序),它本来就是一个细小而完整的操作系统。如果你真的认为BootLoader是必须重写的,也可以推迟到操作系统的内核编写后再重写,这完全是可以的。所以我们需要一个BooLoader。为了调试和发布的方便,BootLoader必须支持从网络加载内核。我选择了Grub(或者你可以选择gPXE,这是一个纯网络BootLoader)。Okay,开始吧。

正文:

1.首先,我们必须下载grub和bochs的源代码包来重新编译。我用的是grub-0.97和bochs-2.3.5(我没有用最新的bochs-2.3.6,因为在我的机器上编译有问题,如果你想,可以试试2.3.6)。

2.解压grub-0.97.tar.gz。进入源代码目录进行编译,命令如下:
        引用:
       
                                                        $ ./configure --enable-ne --enable-ne-scan=0x220
$ make                                       

--enable-ne选项的意思是启动Ne2000网络模块,这是因为bochs的网卡是Ne2000。
--enable-ne-scan=0x220选项是网卡的端口地址,不一定是0x220,可以是其他,但该值必须和bochsrc里面的值相同,后面会有提及。

3.编译完后,我们要将stage1和stage2做成一个img文件,以便bochs能加载。制作过程如下:
    a.先创建一个10M大小的镜像文件,命令如下:
        dd if=/dev/zero of=grub.img bs=512 count= 20160
    b.然后将文件装载为回环设备:
        losetup /dev/loop0 grub.img
    c.将stage1和stage2写入回环设备
        cat ./stage1/stage1 ./stage2/stage2 > /dev/loop0
    d.卸载回环设备
        losetup -d /dev/loop0
至此,grub的准备工作完毕。下面继续bochs的准备工作。

4.解压bochs源代码,进入目录进行编译,命令如下:
        引用:
       
$ ./configure --prefix=/opt/bochs --with-all-libs --enable-plugins--enable-ne2000 --enable-vbe --enable-debugger --enable-disasm

$ make                                       

su切换到root用户,然后
        引用:
       
                                                        $ make install                                       

--prefix=/opt/bochs 选项是指定bochs的安装位置,你可以自行选择。
--with-all-libs 自动选择所需要的库
--enable-plugins 启动插件,必须
--enable-ne2000 启动ne2000的虚拟网络
--enable-vbe 启动Vesa Bios
--enable-debugger 启动内置调试器
--enable-disasm 打开反汇编
更多的选项请参考官方文档:点我

5.bochs编译安装后。将步骤3生成的grub.img文件复制到/opt/bochs/share/bochs/目录下。并在该目录创建一个bochsrc文件。这是bochsrc的配置文件。附上我的文件内容给大家参考:
        引用:
       
                                                        # edit these to point to the latest bios files
romimage: file=$BXSHARE/BIOS-bochs-legacy, address=0xf0000
vgaromimage: file=$BXSHARE/VGABIOS-elpin-2.40
floppya: 1_44=/dev/fd0:, status=inserted
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path=$BXSHARE/hda.img, cylinders=20, heads=16, spt=63
megs: 32
boot: disk
vga_update_interval: 30000
keyboard_serial_delay: 20000
keyboard_paste_delay: 100000
floppy_command_delay: 50000
ips: 500000
#realtime_pit: 0
mouse: enabled=0
#ne2k: ioaddr=0x280, irq=9, mac=b0:c4:20:00:00:00, ethmod=fbsd, ethdev=xl0
ne2k: ioaddr=0x220, irq=3, mac=b0:c4:20:00:00:00, ethmod=linux, ethdev=eth1
log: bochsout.txt
panic: action=ask
error: action=report
info: action=report
debug: action=ignore                                       

需要注意的是ne2k的那行。其中ioaddr=0x220,就是刚才在编译时候指定的端口地址,若不同,则需要修改。

6.配置tftp服务和dhcp服务从略。请参考论坛的其他文章。

7.启动bochs,装入配置文件bochsrc,开始模拟。若刚才整个过程没有出错,bochs会运行grub,并有"grub>"提示符。输入命令:dhcp(网络上需要有dhcp服务器),grub能为网卡获取地址。然后输入命令:
        引用:
       
                                                        tftpserver 192.168.1.2
kernel (nd)/kernel
boot                                       

192.168.1.2 为ftp服务器地址
kernel 为内核文件名

这样,Bochs就能从网络上加载内核并启动。利用内置的调试器就能方便的对内核进行调试。

若需要到硬件环境进行测试,只需要将grub修改--enable-ne选项,指定机器的网卡,并从新编译。再用命令cat stage1stage2 > /dev/fd0 把stage1stage2写入到软盘。利用软盘启动测试机器,在测试机器上通过网络加载内核。避免了每一次修改内核,就要将内核重新写入软盘。

后记:
搭建运行环境只是开发操作系统的第一步。我会陆续的将得到经验总结,并与大家分享。希望能与更多的操作系统爱好者交流。
email,msn:future0906[at]gmail[dot]com
qq:231725801

参考资料:
bochs使用(linux下搭建操作系统开发环境,原创)
创建自己的操作系统开发环境
Linux 0.11调试向导

论坛徽章:
0
发表于 2008-02-14 13:39 |显示全部楼层
host CPU是x86-64,运行bochs没问题吧?  NND连点时间都没有,什么东西都搞不了

论坛徽章:
0
发表于 2008-02-15 13:10 |显示全部楼层
opensuse 10.3 自带bochs,不需要重新编译

论坛徽章:
0
发表于 2008-02-18 20:18 |显示全部楼层
原帖由 albcamus 于 2008-2-14 13:39 发表
host CPU是x86-64,运行bochs没问题吧?  NND连点时间都没有,什么东西都搞不了


Bochs主页上没特别注明。Bochs是纯软件模拟的,host是什么指令集应该没什么关系,编译器支持就行了吧?

把老板宰了

论坛徽章:
0
发表于 2008-02-18 20:20 |显示全部楼层
原帖由 ljhb 于 2008-2-15 13:10 发表
opensuse 10.3 自带bochs,不需要重新编译


做冤大头了,编译bochs还搞了很久 。

论坛徽章:
0
发表于 2008-02-28 01:03 |显示全部楼层
等待楼主更新。
到上海来了,已经找到工作了。最近没啥时间,我会继续关注的。

论坛徽章:
0
发表于 2008-12-05 15:03 |显示全部楼层
刚装个XP,bochs真是短小精悍啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP