bochs虚拟机的安装 - 动手写一个最小的操作系统环境搭建

最近在研究操作系统,读了理论的书籍后,打算自己实现一遍,加深理解。因此选了于渊老师的书《Orange'S一个操作系统的实现》跟着书实战一遍。在安装bochs虚拟机过程中遇到一些问题并已解决,特记录在此。

我的环境:

  • 宿主机为win10
  • 虚拟机为vagrant(底层是virtualbox),这里使用virtualbox,vmware都是可以的
  • 虚拟机中的系统为CentOS 7,命令行版,无界面。当然,这里如果你是有界面的linux发现版更好。
  • win上的命令行终端使用的是git bash,这里使用其他的如xshell或者secureCRT也可以

bochs要启动调试功能的话不能直接使用yum安装,只能下载源码包编译安装了。

安装编译环境和依赖包

yum install -y gcc glibc-headers gcc-c++ libXrandr-devel

下载并安装bochs

现在时间是2019年12月26日,输入如下命令下载2.6.9版本的即可

# 下载
curl -O https://nchc.dl.sourceforge.net/project/bochs/bochs/2.6.9/bochs-2.6.9.tar.gz

# 解压
tar -zxvf bochs-2.6.9.tar.gz

cd进入解压后的目录并配置编译选项

# cd进入目录
cd bochs-2.6.9

# 配置编译选项
./configure --with-x11 --with-wx --enable-debugger --enable-disasm --enable-all-optimizations --enable-readline --enable-long-phy-address --enable-ltdl-install --enable-idle-hack --enable-plugins --enable-a20-pin --enable-x86-64 --enable-smp --enable-cpu-level=6 --enable-large-ramfile --enable-repeat-speedups --enable-fast-function-calls --enable-handlers-chaining --enable-trace-linking --enable-configurable-msrs --enable-show-ips --enable-cpp --enable-debugger-gui --enable-iodebug --enable-logging --enable-assert-checks --enable-fpu --enable-vmx=2 --enable-svm --enable-3dnow --enable-alignment-check --enable-monitor-mwait --enable-avx --enable-evex --enable-x86-debugger --enable-pci --enable-usb --enable-voodoo

输入make命令编译。

make

报错解决

报错如下:

make: *** No rule to make target 'misc/bximage.cc', needed by 'misc/bximage.o'.  Stop.

解决方案为:

cp misc/bximage.cpp misc/bximage.cc

接下来还有类似的No rule to make target 'xxxx',解决方案类似。

cp iodev/hdimage/hdimage.cpp iodev/hdimage/http://hdimage.cc
cp iodev/hdimage/vmware3.cpp iodev/hdimage/http://vmware3.cc
cp iodev/hdimage/vmware4.cpp iodev/hdimage/http://vmware4.cc
cp iodev/hdimage/vpc-img.cpp iodev/hdimage/http://vpc-img.cc
cp iodev/hdimage/vbox.cpp iodev/hdimage/http://vbox.cc

make执行成功后,安装。

make install

bochs配置文件

要启动bochs运行我们编写的操作系统,需要先配置bochs。bochs解压目录bochs-2.6.9下,复制一份配置文件,

# cp后的第一个参数有点号.
cp .bochsrc bochsrc

这里假设你已经写好了汇编代码并写入软盘镜像boot.img了。vi bochsrc打开文件按如下步骤修改。

# romimage: file=$BXSHARE/BIOS-bochs-latest, options=fastboot改为如下,其中$BXSHARE改为你的解压目录下+bios
romimage: file=/usr/local/bochs-2.6.9/bios/BIOS-bochs-latest, options=fastboot
# 同上
vgaromimage: file=/usr/local/bochs-2.6.9/bios/VGABIOS-lgpl-latest

# floppya: 1_44=/dev/fd0, status=inserted这行改为你的软盘镜像,我的是boot.img
floppya: 1_44=boot.img, status=inserted

#ata0-master: type=disk, mode=flat, path="30M.sample"这行要加注释注释掉

# 启动盘修改,改为软盘启动
boot: floppy
#boot: disk

#sound: driver=default, waveout=/dev/dsp. wavein=, midiout=注释掉这行声音配置

OK,以上配置完毕,使用如下命令启动bochs

sudo ./bochs -f bochsrc

注意这里要使用sudo权限执行,否者会报no bootable device错误。

bochs启动报错解决

Message: ata0-0: could not open hard drive image file '30M.sample'

上面这个报错,是因为引导设备默认为硬盘,这里应该换为我们写的boot.img软盘。注释掉下面硬盘这行,打开软盘这行。

boot: floppy
#boot: disk

Bochs is not compiled with lowlevel sound support.

注释掉配置文件中这行关于声音设备的即可。

sound: driver=default, waveout=/dev/dsp. wavein=, midiout=

下面这个报错如果你使用的是命令行连接虚拟机的方式,那么就会有这个报错。

00000000000p[GUI   ] >>PANIC<< Cannot connect to X display
========================================================================
Event type: PANIC
Device: [GUI   ]
Message: Cannot connect to X display

如下图:


20191226205936.png

这个问题的原因是,我是使用git bash命令行连接虚拟机里的CentOS 7,而bochs是有界面的,图像界面无法在git bash命令行下展示。
解决方案有两种:

    1. 你在图形界面下的linux安装bochs,这种当然不符合我们的需求,因为我们已经在命令行下安装了bochs,在安装图形界面版的linux太麻烦。
    1. 在linux中安装X11,win使用vnc viewer连接到linux上,vnc viewer就可以显示图形界面啦。

我们使用第二种,安装vnc viewer连接linux显示图形界面,见我的另一篇文章,VNC Viewer登录Linux(centos7)可视化界面


no bootable device

如果确认自己的引导设备已经配置为软盘并且没有配置错误,那就是你执行./bochs -f bochsrc没有加sudo,加上sudo执行即可。


最终运行起来的界面如下:


20191226231401.png

刚执行完sudo ./bochs -f bochsrc启动bochs时并没有马上显示我们的Hello OS World!,因为bochs启动debug模式了,如下图。

20191226225725.png

这时我们需要切到shell终端界面,终端显示的是<bochs:1>,我们输入c回车,继续让bochs运行即可。

最后,如果觉得卡的话,调大虚拟机内存。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 223,858评论 6 521
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,753评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 170,876评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,560评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,574评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,097评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,477评论 3 427
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,452评论 0 278
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,980评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,017评论 3 343
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,168评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,807评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,497评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,976评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,094评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,659评论 3 380
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,196评论 2 363

推荐阅读更多精彩内容