操作系统学习记录I——Bochs安装和配置

1.概述

相信不少对操作系统内核编程有兴趣的朋友或多或少都接触过于渊的《orange's一个操作系统的实现》,作为大三刚接触操作系统的笔者来说os内核无疑是神秘而充满吸引力的,因此在这里记录和分享一下对本书中实验操作的一些学习经历。博客内容大体就是原书中的内容,作者对各部分的介绍已经比较详细了,读者也可以自行查找资源学习。博客中会分享一些实验中遇到的问题,比如环境配置以及因为软硬件版本更新导致的一些奇奇怪怪的bug,当然也会推荐一些最快能够实现目的的方法。笔者能力有限,如果错误,欢迎指正 。


2.虚拟机环境

我用的win本,虚拟机是ubuntu-18.04.5,记得在安装完ubuntu后把vim(别的编辑器当然也可以)、GCC、make、NASM和xorg-dev(后面configure时要用到)装上,直接apt-get就行了。初始环境大概就这些,后续安装出现的问题我们再一一解答。


3.Bochs下载

原书中作者提供了两种下载方式,apt-get下载安装和源代码下载安装,个人推荐第二种,可避免一些可能存在的问题。笔者下载的是最新的bochs-2.6.11(比较推荐),这里提供所有历史版本的下载网址,读者可以自行选择:bochs历史版本。需要注意的是,有些版本在之后的配置文件上可能要求不同,也有可能出现一些十分奇怪的问题,所以可以考虑下载笔者推荐的版本。


4.Bochs安装

进入下载bochs的目录,ubuntu应该默认是Downloads目录下,执行以下命令进行解压,解压后进入bochs-2.6.11进行安装。

tar vzxf bochs-2.6.11.tar.gz
cd bochs-2.6.11
./configure --enable-debugger --enable-disasm
make
sudo make install

好了这里问题可能会比较多,原书作者为了简练并未对可能出现的问题进行讲解。首先configure操作后的enable是为了打开bochs的debug功能,但是configure操作可能会有以下问题。首先是笔者配了好几次都遇到的gui问题:

ERROR: X windows gui was selected, but X windows libraries were not found.

解决方法是上文提到过的:

sudo apt-get install xorg-dev

值得注意的是,当笔者用bochs-2.6.11版本时此问题在安装了xorg-dev后就解决了,但是最早笔者尝试的2.3.5(原书作者版本)和2.3.6时就算下载了xorg-dev后问题一直都在,虽然可以关掉configure的gui选项来无视报错,但是心里总觉得不舒服,这也是推荐使用新版本的原因。笔者比较幸运,遇到的问题不算很多,如有其他问题可以参考这一篇博客:bochs的安装问题,同时感谢博客作者。当bochs安装成功后,在你安装目录下可以找到bochs文件夹

笔者的地址在ubuntu默认的usr/local/share下


5.Bochs运行准备

I.虚拟软盘准备

Bochs的运行需要什么呢?对于《orange's》里第二章的实验内容来说,只要bochs和一张空软盘,bochs我们已经安装完毕了,那么下面开始软盘的准备吧。这里我们直接使用bochs提供的bximage来创建一个虚拟的软盘,需要使用时随时创建。首先在之前下载的bochs-2.6.11目录下,我们可以找到一个名叫bximage,顾名思义就是bochs自带的用来生成软硬盘镜像的软件。在该目录下执行以下命令打开bximage:

./bximage

然后以下选项进行创建:

========================================================================
                                bximage
  Disk Image Creation / Conversion / Resize and Commit Tool for Bochs
         $Id: bximage.cc 13481 2018-03-30 21:04:04Z vruppert $
========================================================================

1. Create new floppy or hard disk image
2. Convert hard disk image to other format (mode)
3. Resize hard disk image
4. Commit 'undoable' redolog to base image
5. Disk image info

0. Quit

Please choose one [0] 1

Create image

Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd] fd

Choose the size of floppy disk image to create.
Please type 160k, 180k, 320k, 360k, 720k, 1.2M, 1.44M, 1.68M, 1.72M, or 2.88M.
 [1.44M] 

What should be the name of the image?
[a.img] 

Creating floppy image 'a.img' with 2880 sectors

The following line should appear in your bochsrc:
  floppya: image="a.img", status=inserted

首先进入程序后选择1进入镜像的创建,后面几乎一路都可以默认直接enter就行,只有在选择软盘还是硬盘那里我们需要选择软盘fd。如果出现上图所示结果说明创建成功了。


II.引导程序写入软盘

这里的引导程序我们就用《orange's》第一章里的代码,具体含义原书说的十分清楚了:

    org 07c00h          ; 告诉编译器程序加载到7c00处
    mov ax, cs
    mov ds, ax
    mov es, ax
    call    DispStr         ; 调用显示字符串例程
    jmp $           ; 无限循环
DispStr:
    mov ax, BootMessage
    mov bp, ax          ; ES:BP = 串地址
    mov cx, 16          ; CX = 串长度
    mov ax, 01301h      ; AH = 13,  AL = 01h
    mov bx, 000ch       ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
    mov dl, 0
    int 10h         ; 10h 号中断
    ret
BootMessage:        db  "Hello, OS world!"
times   510-($-$$)  db  0   ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw  0xaa55              ; 结束标志

下面我们需要将引导程序写入上述第一步创建的虚拟软盘中,这样我们就得到了一张引导软盘。以下第一条是asm文件通过nasm编译为bin文件,第二条进行软盘写入:

nasm boot.asm -o boot.bin
dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

dd指令的使用方式读者可以自行查找,后续还会用到。原则上上述过程在哪个目录下进行操作都可以,只要最后把a.img文件放进bochs安装目录下就行。


III.配置文件bochsrc编写

我们需要在bochs安装目录下放进配置文件,因为涉及到权限所以可以用以下指令创建bochsrc

sudo vim bochsrc.disk

原书讲解了配置文件内容的大体情况这里不再赘述,需要说明的是因为版本问题原书中的配置文件很可能是用不了的。笔者也是参考了很多博客后才找到适合新版本bochs的配置文件,具体作者当时没记录记不清了,这里对他表示一下感谢,当然后续章节我们也会经常和配置文件打交道:

###############################################
# Configuration file for Bochs
###############################################

# 第一步,首先设置Bochs在运行过程中能够使用的内存,本例为32MB。
# 关键字为:megs
megs: 32
# 第二步,设置对应真实机器的BIOS和VGA BIOS.
# 对应两个关键字为:romimage 和 vgaromimage
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
# 第三步,设置Bochs所使用的磁盘,软盘的关键字为floppy。 
# 若只有一个软盘,则使用floppya即可,若有多个,则为floppya,floppyb...
floppya: 1_44=a.img, status=inserted
# 第四步,选择启动盘符。
boot: floppy
# 第五步,设置日志文件的输出。
log: bochsout.txt
# 第六步,开启或关闭某些功能。
# 下面是关闭鼠标,并打开键盘。
mouse: enabled=0
keyboard:keymap=$BXSHARE/keymaps/x11-pc-us.map

6.Bochs运行

终于到达最后一步了,成败在此一举。现在你的bochs目录下应该要比刚安装时多了一个a.img和bochsrc.disk,那么我们就来运行bochs吧。在该目录下输入以下指令:

bochs -f bochsrc.disk

bochs开启会让你选择初始命令,我们选6begin simulation。然后会中断等待你的指令,这时候在终端输入c,表示continue。如果成功的话就会出现以下画面,可以看见Hello,OS world!
bochs页面

到此为止,bochs安装配置就成功了,我们通过本次实验也实现了系统执行简单引导程序的功能。

7.总结

bochs配置一直是个挺累人的事儿,当时配环境也花了快一天的时间,找了很多资料和解决方法。后续的实验也经常遇到很多无法预见的问题,并非跟着某个教材一字不差把代码抄下来就一定会成功运行。分享一句《V forVendetta》里的台词,"There is no certainty,only opportunity."os就是要尝试各种可能的机会,才有可能走到最后。

你可能感兴趣的:(操作系统学习记录I——Bochs安装和配置)