-----------------------------------------写操作系统的第二天---------------------------------------------------
今天读于渊的《Orange's 一个操作系统的实现》一书的第2 3章,把自己遇到的一些问题记录下来。希望对大家有所帮助。
我以前以为,博客就是自己想什么写什么,简单的很。昨天写了第一篇博客之后,才发觉写博客也需要头脑和技术……不简单!
笔者目前在windows下学习
--------------------------------------------说正事的分割线------------------------------------------------------
chapter 2 搭建你的工作环境
在第一章里,我们自己制作了一个非常简单的引导扇区;而且我们的PC真的可以运行它!
毫无疑问,我们以后还要写很多很多的OS代码,还要做很多次的实验。难道每次都关机重启吗?处于节约效率+关爱PC的目的,我们想到了使用虚拟机,即书中使用的——bochs。(读音同box)
bochs的下载和安装都非常简单,不过他的使用方法,估计会让习惯VMware的同学头大(因为我以前就是用VMware的)。
bochs有很长的manual,大家可以去官网看。我只想在这里说一下自己的理解。安装完bochs后,乱糟糟的目录下应该会出现这么些东西——如图
我选中的三个exe,就是咋们经常使用的。
bochs.exe -虚拟机主程序,当它正确的加载(load)一个虚拟机.bxrc配置文件的时候,虚拟机就可以开始运行
bochsdbg.exe -用于虚拟机调试,单步运行/查看寄存器/CPU都可以做到
bximage.exe -用于制作.img文件(磁盘映像文件)
bochs的使用步骤大致如下:
1.先使用bximage.exe,创建一个新的磁盘映像new.img(相当于虚拟了一个软盘)
2.将我们用nasm编译好的.bin文件“烧录”到new.img,这样一张虚拟启动盘就做好了。我使用了WinHex进行“烧录”过程,就是复制+写入(是写入,不是粘贴;写入是覆盖原块,粘贴是插入新块),很轻松。
3.自己创立一个新的.bxrc配置文件,在里面填好配置(比如)
############################################
# Configuration file for Bochs 这是我的配置文件,给大家看一下
############################################
#how much memory the emulated machine will have
megs:32
#filename of ROMimages 即设置BIOS
romimage: file=..\BIOS-bochs-latest
vgaromimage: file=..\VGABIOS-lgpl-latest
#上面这两个文件在bochs安装文件的顶级目录下,不太好找
#what disk images will be usedfloppya: 1_44=boot.img,status=insertedfloppyb: 1_44=pm.img,status = inserted#choose the boot disk.设置很关键的启动盘,这个非常重要boot: floppy#where do we send log messages?log: bochsout.txt#disable the mousemouse: enabled=0#enable key maapping, using US layout as defaultkeyboard: keymap=..\keymaps\x11-pc-us.map
如果大家加载配置文件时报错no bootable device,问题大概出在以下几个方面
1.配置文件某个地方写错了几个字符
2.img文件的第512个字节没有被写改成0x55AA,造成引导区识别故障
除此之外,这章没有其它难点。
-----------------------2017.4.6更新-----------------------
bochs常用调试命令。节选自《Orange's》一书,在此附录
大致的调试流程:调试前规划好断点位置,启动调试后先使用b命令创建多个断点,然后使用c命令跳到断点去,进行寄存器的查看。注意,r命令只能查看到通用寄存器,段寄存器和控制寄存器分别需要用sreg和creg来查看。
----------------------------------2017.4.9 更新-----------------------------
最近写汇编不再使用记事本…因为记事本这个东西,对换行的支持太不完善了;改用Notepad++,工作效率成倍上升。