orange's一个操作系统的实现之环境搭建

                                                                                                                       搭建你的环境

1.  虚拟计算机Bochs

简单来讲,它相当于运行在计算机内的小计算机。这个好理解,我用的vmware 不就是这样的东东嘛。不过,现在看来,我得让Bochs 成为包含在vmware 中的 小小计算机 了。

1.1 Bochs初体验

嗯,我已经从书上的插图看到啦,是个黑底白字的、运行着Debian 的、满天繁星似的窗口!

1.2 Bochs的安装

ubuntu 8.10下安装还真方便:sudo apt-get install vgabios bochs bochs-x bximage

      停,作者在后面马上就说了: 不过这样安装虽然省事,但有个缺点不得不说,就是默认安装的Bochs 很可能是没有调试功能的,这显然不能满足我们的需要" 。阿弥陀佛,我们安装Bochs ,图得不就是它的调试功能吗,赶紧悬崖勒马,回头是岸。

立马去bochs 的老家 h t t p://bochs.sourceforge.net搬了几个源码包过来,先是下了书上用的bochs2.3.5

tar xzvf bochs-2.3.5.tar.gz

cd bochs-2.3.5

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

sudo make

出现了错误:

symbols.cc: At global scope:
       symbols.cc:137: error: ISO C++ forbids declaration of ‘hash_map’ with no type

symbols.cc:137: error: expected ‘;’ before ‘<’ token

symbols.cc:145: error: expected constructor, destructor, or type conversion before ‘<’ token
       symbols.cc: In constructor ‘context_t::context_t(Bit32u)’:
       symbols.cc:152: error: ‘map’ was not declared in this scope
       symbols.cc: In static member function ‘static context_t* context_t::get_context(Bit32u)’:
       symbols.cc:173: error: ‘map’ was not declared in this scope
       make[1]: *** [symbols.o] Error 1
       make: *** [bx_debug/libdebug.a] Error 2

此时应该按照下面的步骤:

1.sudo apt-get install build-essential

sudo apt-get install xorg-dev

sudo apt-get install bison (注意如果你的ubuntu是9点几的版本的话会出现缺少很多包,那么就从网上一个个下载,缺什么就下什么!)。

2../configure --enable-docbook=--enable-debugger --enable-disasm (启动调试和反汇编功能)

3.在做make之前,需要在bx_debug/symbols.cc97 行之后加上一些代码,加后如下所示:

using namespace std;

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

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

#endif  (新加的)

struct symbol_entry_t;

4.sudo make

5.sudo make install

 

1.3 Bochs的使用

所谓映像者,你可以理解为原始设备的逐字节复制,也就是说软盘的第M 个字节对应映像文件的第M 个字节。

现在就用Bochs 自带的组件bximage 做一个吧:

bximage回车,除了第一个选项输入"fd" 外,其余的直接按回车,完后在当前目录下多了一个a.img

到目前为止,我已经有了" 小小计算机" 难得的软盘 ,是时候把第一章的 小麻雀 装进软盘了。我使用dd 命令:

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

对了,还有件工具不能忘了:NASM。走捷径吧,sudo apt-get install nasm

装好后执行:nasm  boot.asm  -o boot.bin

至此,dd命令顺利执行。

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

# 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

注意,romimagevgaromimage 的路径,跟书上说的有点不同

把上面编写的bochsrca.img 放在同一个目录下,在这个目录下输入bochs命令( 什么参数也没带) ,一个回车:

========================================================================
                       Bochs x86 Emulator 2.3.5
            Build from CVS snapshot, on September 16, 2007
========================================================================
00000000000i[     ] reading configuration from bochsrc
------------------------------
Bochs Configuration: Main Menu
------------------------------

This is the Bochs Configuration Interface, where you can describe the
machine that you want to simulate.  Bochs has already searched for a
configuration file (typically called bochsrc.txt) and loaded it if it
could be found.  When you are satisfied with the configuration, go
ahead and start the simulation.

You can also start bochs with the -q option to skip these menus.

1. Restore factory default configuration
2. Read options from...
3. Edit options
4. Save options to...
5. Restore the Bochs state from...
6. Begin simulation
7. Quit now

Please choose one: [6] 
 
再输入回车:


Please choose one: [6]
00000000000i[     ] installing x module as the Bochs GUI
00000000000i[     ] using log file bochsout.log
Next at t=0
(0) [0xfffffff0] f000:fff0 (unk. ctxt): jmp far f000:e05b         ; ea5be000f0
c
 
回车:


如果用不带调试功能的Bochs2.4.5,那么在

Please choose one: [6] 回车之后,马上就可以看到上面的效果了。

注意:当用户输入bochs命令时,可能出现Message:ata0-0:could not open hard drive image file '30M.sample',此时说明不是从软盘启动的,那么用户应该输入完整的命令:bochs -f bochsrc,这样就可以了。

现在大家应该可以看到自己的小型操作系统了吧,在这里非常感谢《orange's一个操作系统的实现》的作者于渊,我非常佩服作者的耐心和能力,作者的一句话令我很有启发:只要用心,就没有学不会的东西!!!

 

 

 

你可能感兴趣的:(一个操作系统的实现)