您的位置:首页 > 其它

ORANGE’S:一个操作系统的实现:Windows和Ubuntu分别安装bochs-hello world

2017-10-14 16:20 489 查看
Ubuntu12.04下安装和配置bochs:

因为 Bochs 是用C++写的,所以这里要安装GNU gcc/g++编译器。

sudo apt-get install build-essential;sudo apt-get install xorg-dev;sudo apt-get install bison;sudo apt-get install g++

可能的错误:有些软件不能通过验证

sudo apt-get update 即可

具体安装步骤:

1.先去https://sourceforge.net/projects/bochs/files/

下载 bochs-2.6.9.tar.gz

2.解压下载的源代码:

sudo tar -zxvf bochs-2.6.9.tar.gz

3.进入bochs-2.6.9目录,执行如下命令安装bochs

sudo ./configure --enable-debugger --enable-disasm

sudo make

cp bochs bochsdbg

sudo make install

其中--enable-debugger --enable-disasm使能调试功能和反汇编功能。

可能的错误:gtk_enh_dbg_osdep.cc:20:21: 致命错误: gtk/gtk.h:没有那个文件或目录

编译中断。解决方法:

sudo apt-get install libgtk2.0-dev

sudo make dist-clean

sudo ./configure --enable-debugger --enable-disasm

sudo make

cp bochs bochsdbg

sudo make install

bochs的使用:
到bochs-2.6.9安装目录下运行bximage制作软盘镜像,选择fd(软盘),然后回车n下默认知道生成镜像a.img。不多说,上图:



拿到该书附带文件中的引导汇编文件boot.asm,用nasm命令生成boot.bin,再将boot.bin和上面生成的a.img放在同一目录下,这里我创建了xxj-sources目录,两个文件都放进去了,然后用dd命令将boot.bin的内容写进a.img:

dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

以下是boot.asm的内容:

——————————————————————————

    org    07c00h            ; 告诉编译器程序加载到7c00处

    mov    ax, cs

    mov    ds, ax

    mov    es, ax

    call    DispStr            ; 调用显示字符串例程

    jmp    $            ; 无限循环

DispStr:

    mov    ax, BootMessage

    mov    bp, ax            ; ES:BP = 串地址

    mov    cx, 16            ; CX = 串长度

    mov    ax, 01301h        ; AH = 13,  AL = 01h

    mov    bx, 000ch        ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)

    mov    dl, 0

    int    10h            ; 10h 号中断

    ret

BootMessage:        db    "Hello, OS world!"

times     510-($-$$)    db    0    ; 填充剩下的空间,使生成的二进制代码恰好为512字节

dw     0xaa55                ; 结束标志

——————————————————————————

这样是否就可以运行bochs了呢,还差一点点。将该书附带文件bochsrc拷贝到xxj-sources中,这是bochs的配置文件,该文件的配置需参考bochs提供的参考文件bochsrc.5根据自己的系统情况修改,莫慌,不会改的先拷过来,,运行期间遇到错误再改就行。我的是这样的:

————————————————————————————————————

###############################################################

# Configuration file for Bochs

###############################################################

# how much memory the emulated machine will have

megs: 32

# filename of ROM images

romimage: file=/usr/local/share/bochs/BIOS-bochs-latest

vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest

# what disk images will be used

floppya: 1_44=a.img, status=inserted

# choose the boot disk.

boot: floppy

# where do we send log messages?

# log: bochsout.txt

# disable the mouse

mouse: enabled=0

# enable key mapping, using US layout as default.

keyboard: keymap=/usr/local/share/bochs/keymaps/x11-pc-us.map

————————————————————————————————————
执行命令 bochs -f bochsrc ,顺利的话看到这个,输入6回车或者直接回车



然后你会看到虚拟机启动了,因为是带调试功能的,所以你会看到黑屏哈哈,接下来开始最简单的调试吧:



回到命令行界面,输入b 0x7c00,再连续输入两个c,你就能看到美丽的"Hello OS world!"了。最开始的“b 0x7c00”在0x7c00处设置了断点,随后的命令“c”让代码继续执行。



部分Bochs调试指令如下:



注:本人尝试在Windows下用vmware安装了ubuntu 12.04,再在ubuntu中安装bochs,结果爆炸了,一重起ubuntu虚拟机直接卡在加载界面,动都不动,猜想可能是bochs修改了ubuntu的引导吧,用镜像进去chroot后一查看引导文件/boot/grub/grub.cfg,发现真的被修改了,所有的set root='(hd0,msdos1)'都被改成了set root='(hd1,msdos1)',本人将其改回来,无效哈哈。估计是还有别的地方被改了吧,咱也不是大神,就不研究了,直接进入双系统的Ubuntu系统中,安装bochs后,重启安然无恙。这个问题留待以后研究吧。

——————————————————————————

Windows下安装就简单了,下载安装包直接安装。不过按书中第一章想运行出Hello os world还是出了点波折。

用软件安装后自带的bximage生成的a.img总是有问题,报错如下:

ata0-0: could not open hard drive image file 'a.img
百度必应搜了愣是查不出来,难道就我遇到?无奈之下使用软件自带hd10meg.img,结果可以了,我只能看出两个文件的大小不一样,又是个遗留问题。我把hd10meg.img名字改成a.img,然后将boot.bin写进去,能够正常启动。因为该书是用Linux的,接下来我也用Linux吧哈哈。



——————————————————————————————————————————————
参考链接,感谢这些前辈!

ubuntu安装和配置bochs:

http://www.linuxidc.com/Linux/2016-10/135905.htm

自己动手写操作系统之Windows7下使用Bochs搭建工作环境:
http://blog.csdn.net/the_important/article/details/40615797
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐