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
因为 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
相关文章推荐
- bochs 2.4.2 ubuntu 安装运行问题《orange's 一个操作系统的实现》第二章 调试篇
- Orange's一个操作系统的实现 安装Bochs
- 关于一个操作系统实现中bochs的安装
- Orange's 一个操作系统的实现--Bochs遇到的问题
- 一个操作系统的实现--bochs下安装freedos
- 《Orange'S:一个操作系统的实现》学习笔记(三)--bochs
- 《Orange’s 一个操作系统的实现》3.保护模式3----保护模式进阶
- 《Orange's 一个操作系统的实现》读书手记2--- [ 搭建你的工作环境]
- 《Orange’s 一个操作系统的实现》2.最小的操作系统
- OS learning 自己动手写操作系统 & Orange'S:一个操作系统的实现 leaning tips
- 1.pmtest1.asm <Orange's 一个操作系统的实现>
- 《Orange’s 一个操作系统的实现》3.保护模式3----DOS加载.EXE过程
- 《Orange’s 一个操作系统的实现》3.保护模式4----LDT(Local Descriptor Table)
- 《Orange’s 一个操作系统的实现》3.保护模式1----pm.inc分析
- 《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-无特权级转换)
- 《Orange’s 一个操作系统的实现》3.保护模式5----特权级概述(转)
- 《Orange’s 一个操作系统的实现》1.搭建操作系统开发环境
- 《Orange's 一个操作系统的实现》读书手记3(2)--- [ 保护模式(Protect Mode)]
- 《Orange's 一个操作系统的实现》读书手记 1 --- [马上动手写一个最小的“操作系统”]
- 《Orange’s 一个操作系统的实现》3.保护模式2----认识保护模式A