花了两天都没搞定bochs,出了一些error,网上搜不到,绝望之际老宋出现,虽然他也不知道自己点了写什么/微笑脸,但是就这么神奇的跑起来了。好了终于可以开始我的第一个操作系统实验了。/痛哭流涕
实验名称:系统boot1.1
先来介绍一下这个实验是干嘛的。这个实验叫boot嘛,其实就是想在bochs上跑一下boot这个程序。老师给了个boot.asm的文件,这个文件用nasm编译后会生成一个boot.bin文件,boot.bin一般放置在boot扇区。现在我们用软盘作为引导盘,然后在启动x86类型的计算机的时候,BIOS就自动把boot扇区的引导程序加载到内存中的0:7C00处了,然后跳转到0:7C00开始执行boot程序。
实验过程:
准备的东西(bochsrc,boot.asm):
其中bochsrc是bochs的配置文件,这个要根据自己电脑某些文件设置一些路径;boot.asm是老师给的文件这个不用管。
所以,我们要做的,就是
1.把boot.asm编译了,得到boot.bin;
2.弄个软盘
3.启动bochs跑他个boot
1:
这个简单。首先你得先装好NASM编译器,这个就不展开说了。
然后在当前工作目录下打开终端输入下列命令:
nasm -o boot.bin boot.asm
然后就得到boot.bin了
2:
在弄个软盘前,我们先设置bochsrc文件:
############################################################### # Configuration file for Bochs ############################################################### # how much memory the emulated machine will have megs: 32 # filename of ROM images romimage: file=/usr/share/bochs/BIOS-bochs-latest vgaromimage: file=/usr/share/vgabios/vgabios.bin # 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/share/bochs/keymaps/x11-pc-us.map
romimage和vgaromimage都是根据自己电脑上BIOS-bochs-latest和vgabios.bin的路径来设置的;而最后一行关于keyboard的设置,一开始代码是这样的:
keyboard_mapping:enabled=1,map=/usr/share/bochs/keymaps/x11-pc-us.map
但是会产生一个这样的错误:
keyboard_mapping\' is deprecated - use \'keyboard\' option instead.
如果你直接按照他的提示,把keyboard_mapping改成keyboard,那么还会产生错误:
keyboard directive malformed.
此处感谢CSDN的作者沈郎,他机灵地看了sample-txt,知道了keyboard的参数格式,于是解决了这个问题。
设置完后,输入命令:
bximage
然后选择,fd,然后剩下的直接回车就好了,就会在bochsrc所在文件夹下,即现在的工作文件夹下生成一个a.img文件,这就是我们的软盘了。
3:
先执行以下命令:
dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
好了现在可以启动bochs了,在当前工作文件夹下打开终端输入命令:
bochs
然后选择6,会弹出一个黑框,这就是bochs了。
然后在终端输入c,回车,就会出现以下结果:
如果你没有出现以上结果,而是报错:
[BIOS]No bootable device.
那么你先检查一下boot.asm最后一行有没有dw 0xaa55,这是结束符的标志,如果没有就加上。
然后检查一下生成的boot.bin是不是512byte,如果不是512byte,那么添加times 510-($-$$)db 0来填满512byte。
然而我这两个都没错,也是出现了上面的Error。
再次感谢CSDN的作者沈郎,他意识到可能是dd运行失败,于是我也重新运行了一次dd,果然成功了,得到了上面的“Hello,OS world!”
结语:
当我看到这个框的时候,真的是内心翻滚着不可描述的激动。。。。。。
鬼知道我这两天为了装个bochs搭个做OS实验的环境经历了什么。。。。。。
但是我秉着学蛙泳的精神,在老宋的帮助下,坚持了下来,特此鸣谢我的同学老宋还有CSDN的作者沈郎。
这只是操作系统实验刚刚开始,我也清楚意识到这个实验小组不容易,并且现在退出这个mini-OS开发小组还来得及,但是我向来是个执着的人,所以希望能坚持完成这个小组的所有实验,然后在实验结束的时候还有头发哈哈哈哈哈。。。。。
(做硬件和操作系统什么的最掉头发了不是/微笑脸)