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

搭建你的工作环境

古人云:工欲善其事,必先利其器

是的,俗话也说:磨刀不误砍柴工,先让我们放慢脚步,精心地打造传说中的Bochs吧。


2.1  虚拟计算机Bochs

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


2.1.1 Bochs初体验

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


2.1.2 Bochs的安装

ubuntu8.10下安装还真方便:sudoapt-get install vgabios bochs bochs-x bximage

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

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

tarxzvf bochs-2.3.5.tar.gz

cdbochs-2.3.5

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

sudomake

 

出现了错误:

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 thisscope
      symbols.cc: In static member function ‘staticcontext_t* context_t::get_context(Bit32u)’:
      symbols.cc:173: error: ‘map’ was not declared in thisscope
      make[1]: *** [symbols.o] Error 1
     make: *** [bx_debug/libdebug.a] Error 2

 

然后,连续下了bochs2.3.7bochs2.4.1bochs2.4.5,竟然没有一个能顺利通过编译的。

Baidu求救,有人也遇到了同样的问题:

h t t p://www.kklinux.com/html/Love-Linux/Ubuntu/200908/31-6070_2.html

我就老老实实地照着做了一遍:

1.sudoapt-get install build-essential  (没问题,无须更新)

sudoapt-get install xorg-dev  (下了大部分,有些库没法下,先没理它)

sudoapt-get install bison(没问题,无须更新)


2../configure --enable-docbook=no -with-x11--enable-debugger --enable-disasm--enable-pci --enable-pcidev --enable-plugins --enable-ne2000 --enable-panic(有下划线是启动调试和反汇编功能,其他不知道有什么用)


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

usingnamespace std;

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

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

#endif (新加的)

structsymbol_entry_t;

 

4.好了,开始sudo make,噼哩啪啦一阵过后,还是有错误,"cannot find -lXpm" ,少了libxpm库,这个库用来干嘛的我不知道,但我一定要把它找到,sudo apt-get 没法获取了,那我就去其他地方找呗,总不至于在一棵树上吊死吧,诶,有了:

h t t p://ftp.debian.org/debian/pool/main/libx/libxpm/libxpm-dev_3.5.7-1_i386.deb


5.sudodpkg -i libxpm-dev_3.5.7-1_i386.deb


6.接下来就喜事连连了,bochs2.3.7发来贺电!bochs2.3.5发来贺电!不过boch2.4.5有点另类,上面的第3步不用做,第2步也 不能加--enable选项,加了连Makefile都产生不了,可能是因为缺少了gtk+_2.0的相关库,这也就意味着boch2.4.5编译出来是 不带调试功能的了,因为--enable-debugger打不开呀。最后,我索性试了一下bochs2.4.1,它确实有点顽固,死活不肯让我编译通 过,在proc_ctrl.cc:654行出现错误: "CheckPDPTR was not declared in thisscope"。懒得再跟它纠缠了。


7.为了尽量保持跟书上的环境一致,我选择了bochs2.3.5sudo make install。对于不带调试功能的bochs2.4.5,后面还有用得着它的地方。


2.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,又是有些东西不能获得,真是欲速则不达,还是老实的去找:

h t t p://ftp.debian.org/debian/pool/main/n/nasm/nasm_2.03.01-1_i386.deb
     h t t p://ftp.tcc.edu.tw/debian/pool/main/n/nasm/nasm_2.03.01-1_i386.deb
     h t t p://www.anheng.com.cn/debian/pool/main/n/nasm/nasm_2.03.01-1_i386.deb
     h t t p://www.nasm.us/pub/nasm/

sudodpkg -i  nasm_2.03.01-1_i386.deb

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 fromCVS 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 farf000:e05b         ; ea5be000f0
<bochs:1> c
 
回车:


如果用不带调试功能的Bochs2.4.5,那么在Please choose one: [6]回车之后,马上就可以看到上面的效果了。

bochs 还有很多东西没有挖掘出来,但是我们的目标并不在于研究Bochs本身。正如作者所说的"实践->遇到问题->解决问题->再实践",当哪一天我真的需要用到它的高级功能时,我想我是不敢偷懒的。

有关bochsubuntu8.10下的安装,也可参考"坠落天堂"的:

h t t p://hi.baidu.com/316194566/blog/item/b45fd124423be00e4d088d46.html


2.1.4 Bochs调试操作系统

其实,刚才我们已经开始调试了,输入的“c”就是 Bochs的一条指令,表示继续执行,直到遇上断点。我没有设断点,所以一口气就执行到底了,出现了Hello My world!” (我把OS改成My)

设断点,就用b;看cpu相关的状态,就用dump_cpu;看物理内存,就用xp;看线性地址,用x;即时跟踪cputrace-reg on,等等,我就懒得再一一例举了。总之,跟linux下大名鼎鼎的gdb很像是不是,遇到不清楚的,随时都可help的信息就用。


2.2  QEMU

我尝试着sudo apt-get install qemu 没有成功。没关系,我已经有了vmware。作者说的可让你不必总是这么辛苦的妙计,我就用不带调试功能的Bochs2.4.5来做吧。


2.3 平台之争:Windows还是*nix

谁好谁坏,我想我不愿沉湎于如此的争辩漩涡,毕竟是两种完全不同类型的文化理念,虽说一山不能容二虎,但如果是一公一母呢?我不至于偏激到绝对不用这个而用那个的地步,这事没有绝对,Windows上搞个虚拟机,可以装一个linuxlinux上搞个虚拟机,照样可以跑windows。两个平台我都在 用,最合适的才是最好的。


2.4 GNU/Linux 下的开发环境

在工作环境中,虚拟机是个重头戏,除了虚拟机之外,还有几样重要的东西,分别是编辑器、编译器和自动化工具GNU make

编译器呢,我现在暂时用的是vim,简单实用。早就听说强悍的Emacs了,还没见过他的庐山真面目,至于mc,看上去功能也很强大,什么时候把两个都搞来玩玩。

汇编语言编译器NASM,刚才装过了;C语言编译器,我的ubuntu8.10上带的是GCC 4.3.2GNU Make当然有了。


2.5  Window 下的开发环境

这个就不多说了,我的环境是windowxp sp3 + vmware6.5.1 + ubuntu8.10


2.6 总结

好了,我的小小计算机也已健健康康地呆在了vmware之中,为小麻雀发育提供了可能的生长环境。至于能不能顺利地变成胚胎,关键还在于"护胎",下一章就要开始胎教”----32Intel CPU保护模式的运行机制了!

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
畅销书《自己动手写操作系统》第二版。   从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程。    翔实的文字,丰富的图表,清晰的代码,作者 于渊 畅销书《自己动手写操作系统》第二版。   从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程。     翔实的文字,丰富的图表,清晰的代码,作者亲自用LAATEX排版,内容与形式并重。   人性化的代码组织,帮读者关注每节重点,完备的行号标识,便于读者对照实际代码。   专属网站和邮件列表,方便读者交流。   立足实践层面,关注动于操作过程中的细节,一步一步熟读者完成自己的操作系统:最简单的Boot Sector-由Boot Sector和Loader加载的内核-实现一个和多个进程-多控制台-进程间通信-轻巧的FS-简单的MM-自己的C运行时库-运行自己的应用程序-在真机进行自己操作系统。 本资料共包含以下附件: Orange S:一个操作系统实现(PDF+光盘).part1.rar Orange S:一个操作系统实现(PDF+光盘).part2.rar Orange S:一个操作系统实现(PDF+光盘).part3.rar Orange S:一个操作系统实现(PDF+光盘).part4.rar 四卷下载完后一起解压,资源非本人制作,也是从网上找来,本着方便大家学习的原则分享。 文档很清晰,光盘内容完整。
畅销书《自己动手写操作系统》第二版。   从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程。    翔实的文字,丰富的图表,清晰的代码,作者 于渊 畅销书《自己动手写操作系统》第二版。   从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程。     翔实的文字,丰富的图表,清晰的代码,作者亲自用LAATEX排版,内容与形式并重。   人性化的代码组织,帮读者关注每节重点,完备的行号标识,便于读者对照实际代码。   专属网站和邮件列表,方便读者交流。   立足实践层面,关注动于操作过程中的细节,一步一步熟读者完成自己的操作系统:最简单的Boot Sector-由Boot Sector和Loader加载的内核-实现一个和多个进程-多控制台-进程间通信-轻巧的FS-简单的MM-自己的C运行时库-运行自己的应用程序-在真机进行自己操作系统。 本资料共包含以下附件: Orange S:一个操作系统实现(PDF+光盘).part1.rar Orange S:一个操作系统实现(PDF+光盘).part2.rar Orange S:一个操作系统实现(PDF+光盘).part3.rar Orange S:一个操作系统实现(PDF+光盘).part4.rar 四卷下载完后一起解压,资源非本人制作,也是从网上找来,本着方便大家学习的原则分享。 文档很清晰,光盘内容完整。
《orange's个操作系统实现》是一本关于操作系统实现的书籍,其中第六章无法运行可能有以下几个原因。 首先,书中的代码可能存在错误。编写代码时,一些细节的失误可能导致程序无法正确运行。这可能是作者在编写书籍时出现的问题,或者是影响到第六章的代码遗漏或错误。在实际操作中,我们应该检查在书中提供的代码并尝试找到错误。 第二,缺少必要的软件或工具。在开发操作系统时,通常需要使用一些特定的软件和工具,例如汇编器、编译器、链接器等。如果这些软件或工具没有正确安装或配置,可能会导致第六章中的代码无法运行。 第三,硬件环境不符合要求。在实际操作系统的开发中,硬件环境的要求可能较高。如果硬件配置不符合第六章中所述的要求,例如内存容量过低或者缺少某些关键的硬件设备,那么无法保证代码能够正确运行。 最后,操作系统开发环境的设置可能有问题。正确设置开发环境操作系统开发的关键。如果遗漏了某些设置步骤,例如环境变量的配置或者文件路径的设置等,那么第六章的代码可能无法正常运行。 针对以上可能的原因,我们可以先检查书中代码的正确性,然后逐步检查所需软件和工具的安装与配置,以及硬件环境是否符合要求。如果仍然无法解决问题,我们可以尝试在相关的开发社区或论坛上寻求帮助,与其他开发者交流并寻找解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值