转载 《Orange’s 一个操作系统的实现》读书手记2— [ 搭建你的工作环境]
http://blog.csdn.net/iefswang/article/details/8455170]http://blog.csdn.net/iefswang/article/details/8455170 搭建你的工作环境古人云:“工欲善其事,必先利其器”。是的,俗话也说:“磨刀不误砍柴工”,先让我们放慢脚步,精心地打造传说中的Bochs吧。 2.1 虚拟计算机Bochs简单来讲,它相当于运行在计算机内的小计算机。这个好理解,我用的vmware不就是这样的东东嘛。不过,现在看来,我得让Bochs成为包含在vmware中的“小小计算机”了。 2.1.1Bochs初体验嗯,我已经从书上的插图看到啦,是个黑底白字的、运行着Debian的、满天繁星似的窗口! 2.1.2Bochs的安装ubuntu8.10下安装还真方便:sudoapt-getinstall vgabios bochs bochs-x bximage。 停,作者在后面马上就说了:“不过这样安装虽然省事,但有个缺点不得不说,就是默认安装的Bochs很可能是没有调试功能的,这显然不能满足我们的需要"。阿弥陀佛,我们安装Bochs,图得不就是它的调试功能吗,赶紧悬崖勒马,回头是岸。立马去bochs的老家 ht t p://bochs.sourceforge.net搬了几个源码包过来,先是下了书上用的bochs2.3.5。tarxzvf bochs-2.3.5.tar.gzcdbochs-2.3.5./configure--enable-debugger --enable--disasmsudomake 出现了错误:symbols.cc:At global scope:
symbols.cc:137: error: ISO C++forbidsdeclaration of ‘hash_map’ with no typesymbols.cc:137:error: expected ‘;’ before ‘<’ tokensymbols.cc:145:error: expected constructor, destructor, or typeconversion before ‘<’ token
symbols.cc: In constructor‘context_t::context_t(Bit32u)’:
symbols.cc:152: error: ‘map’ was not declared inthisscope
symbols.cc: In static member function‘staticcontext_t* context_t::get_context(Bit32u)’:
symbols.cc:173: error: ‘map’ was not declared inthisscope
make[1]: *** [symbols.o] Error 1
make: *** [bx_debug/libdebug.a] Error 2 然后,连续下了bochs2.3.7、bochs2.4.1、bochs2.4.5,竟然没有一个能顺利通过编译的。向Baidu求救,有人也遇到了同样的问题:h t tp://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.cc的97行之后加上一些代码,加后如下所示:usingnamespace std;#ifdef__GNUC__ (新加的,注意前后都是两个下划线)usingnamespace __gnu_cxx;(新加的,注意前面是两个下划线)#endif (新加的)structsymbol_entry_t; 4.好了,开始sudomake,噼哩啪啦一阵过后,还是有错误,"cannotfind -lXpm" ,少了libxpm库,这个库用来干嘛的我不知道,但我一定要把它找到,sudoapt-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.5,sudomake install。对于不带调试功能的bochs2.4.5,后面还有用得着它的地方。 2.1.3Bochs的使用所谓映像者,你可以理解为原始设备的逐字节复制,也就是说软盘的第M个字节对应映像文件的第M个字节。现在就用Bochs自带的组件bximage做一个吧:bximage回车,除了第一个选项输入"fd"外,其余的直接按回车,完后在当前目录下多了一个a.img。到目前为止,我已经有了"小小计算机"和“难得的软盘”,是时候把第一章的“小麻雀”装进软盘了。我使用dd命令: dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc对了,还有件工具不能忘了:NASM。走捷径吧,sudoapt-get install nasm,又是有些东西不能获得,真是欲速则不达,还是老实的去找:h t tp://ftp.debian.org/debian/pool/main/n/nasm/nasm_2.03.01-1_i386.deb
h t tp://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.debnasm 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 注意,romimage和vgaromimage的路径,跟书上说的有点不同。把上面编写的bochsrc和a.img放在同一个目录下,在这个目录下输入bochs 命令(什么参数也没带),一个回车:========================================================================
Bochsx86 Emulator 2.3.5
BuildfromCVS 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] 再输入回车:[img]http://hi.csdn.net/attachment/201012/30/0_1293692084sVKd.gif[/img] Pleasechoose 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): jmpfarf000:e05b ; ea5be000f0