《orange'S一个操作系统的实现》 笔记

简述:

跟着《orange'S一个操作系统的实现》一书进行操作,将其中需要注意的过程记录下来。

 

第1章 略。

第2章 搭建bochs开发环境

参考链接 《Orange's 一个操作系统的实现》读书手记2--- [ 搭建你的工作环境]

 

计算机环境:ubuntu10.04TLS


bochs是由C++编写的,我们要安装相应的编译环境

sudo apt-get install build-essential

如果要图形界面,

sudo apt-get install xorg-dev

安装bison,

sudo apt-get install bison

bochs官方网站下载源码包bochs-2.3.5.tar.gz,解压后,执行命令:

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

修改bx_debug/symbols.cc97行之后加上一些代码,如下红色字体所示:

usingnamespace std;

#ifdef__GNUC__  (新加的,注意前后都是两个下划线)

usingnamespace __gnu_cxx;(新加的,注意前面是两个下划线)

#endif (新加的)

structsymbol_entry_t;


make

make install


bochs 配置文件bochsrc:

#memory
megs:32

# file of rom images
romimage: file=/usr/local/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest  #也可以使用,vgaromimage: file=/usr/share/vgabios/vgabios.bin

# disk will be used
floppya: 1_44=a.img, status=inserted

# boot disk
boot:floppy

# log messages
log:bochsout.log

# disable the mouse
mouse:enabled=0

#enable key mapping
keyboard_mapping:enabled=1, map=/usr/local/share/bochs/keymaps/x11-pc-us.map   #位置与书中位置稍有不同


 

最后,运行 命令:

bochs -qf bochsrc

这样就可以看到模拟界面上有字符显示了。如果不输入c/continue命令的话,界面上是黑屏,不显示字符的。


第3章  保护模式

1.运行第一个例子,目的是在屏幕上11行,79列处打印一个红色字符'P'

如果bximage新建软盘映像a.img,将pmtest1.asm编译成pmtest1.bin,并装入a.img,通过bochs运行时,出错:无法找到启动设备。

因为,在a.img的512字节的最后两个字节不是0xaa55,所以bios无法识别软盘的0面0磁道0扇区是引导扇区。

书中给出的是依赖于chapter2中做好的a.img启动映像。

当然,修改pmtest1.asm后,使得512字节的最后两个字节为0xaa55,这样就可以单独使用pmtest1.asm,而不需要依赖于以前的启动映像了。由于对nasm不熟悉,具体怎么修改,暂时放在这里。

 

 2. 保护模式的运行环境

以上都是应用程序(如pmtest1.bin)写到引导扇区运行的,很方便。但如果应用程序超过了512B,就有两种方法解决。

1.通过引导扇区将读取程序并运行,类似操作系统内核的启动。

2.把程序编译成com文件通过DOS来执行。

 

freedos的获取:1)这里使用书中附带的光盘(我已上传,由于光盘资料压缩后将近100MB,所以分成4部分上传了,其中一个的下载地址,《Orange'S:一个操作系统的实现》随书光盘(完整版))。2)也可以到http://www.freedos.org/download/下载。我下载使用的是fdboot.img,选择使用启动选项2

 

这里有一个问题,就是我们没有软盘,使用的是虚拟软盘。关于虚拟软盘pm.img的建立过程在这里说明一下。

bximage

fd

1.44

pm.img

建立pm.img成功。将pm.img格式化成dos可以识别的格式。

losetup /dev/loop0 pm.img  (loop设备,伪设备,使得伪块设备像真实块设备一样使用的设备。这一步的意思是,用一个循环设备节点连接pm.img文件)

mkfs.msdos  /dev/loop0

losetup -d /dev/loop0

挂载虚拟软盘:

mount -o loop pm.img /mnt

cp pmtest1b.com /mnt

这样应用程序就放入到pm.img中了。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(《orange'S一个操作系统的实现》 笔记)