在安装bochs之前,我们先需要安装虚拟机和linux发行版,也可以安装双系统,总之有个linux操作系统就好。

  我是在ubuntu14.04系统下安装bochs的。

安装Bochs

  以下为安装步骤

  1. 下载bochs。官方地址是http://sourceforge.net/projects/bochs/files/bochs/,安装的版本是2.6.2,下载后的文件是bochs-2.6.2.tar.gz。
  2. 解压压缩包 tar zxvf bochs-2.6.2.tar.gz
  3. 编译。先进入到目录 cd bochs-2.6.2,开始configure、 make、 make install三步曲
./configure \
--prefix=/your_path/bochs \
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x \
--with-x11 \
LDFLAGS='-pthread' \
LIBS='-lX11'

  注意各行结尾'\'字符前有个空格,/your_path/要修改为你想要安装的路径,相比与原书的配置,我在上面增加了两行(红色)的配置,这对后面的编译有帮助,会减少一些问题的出现。

  configure之后,会生成Makefile,可以编译了。

make

  make的过程中可能遇到各种问题,我在下面罗列一下我遇到的。

  ① 由于g++没有安装,出现C++ preprocessor "/lib/cpp" fail sanity check。

  解决办法:安装g++

sudo apt-get install g++

  ② fatal error: gtk/gtk.h: No such file or directory

  

  解决办法:输入下面的命令行

sudo apt-get install libgtk2.-dev

    如果还不行,尝试在bochs/gui下的makefile 第104后面增加`pkg-config --cflags --libs gtk+-2.0`(注意是  `  ),有可能这也解决不了,那么可以尝试根据出错信息定位所在的目录,修改该目录下的makefile,在相应位置加入`pkg-config --cflags --libs gtk+-2.0`。

$(CXX) -c  $(CXXFLAGS) $(LOCAL_CXXFLAGS) $< -o $@ `pkg-config --cflags --libs gtk+-2.0`

 ③ undefined reference to symbol ’XSetForeground'

  解决办法:输入下面命令行

sudo apt-get install xorg-dev

  如果上面configure时,没有设置LIBS='lX11',也会出现这个问题。

④ undefined reference to 'pthread_create'

  解决办法: configure时加入LDFLAGS='-pthread'。

  最后make install

make install

  至此,无错误信息,bochs安装成功。

运行bochs

  安装bochs的工作已经完成了,如果还出现其他问题,尝试一下在bing、google、baidu等等搜索解决问题,想当初在网上做操作系统JOS实验时,我也是花了大量时间在安装bochs上,那时都快崩溃了,总之很多因素都会导致配置过程中失败,请坚持下去,因为很多人像我一样在安装过程中挣扎着,匍匐前行,如果你安装成功了,也祝贺你,这等于成功了一大半!!

  下面开始准备运行bochs:

    我们先试试运行下bochs,先进入我们上面配置时制定的bochs地址,然后输入下面的命令:

bin/bochs

  正常来说会出现以下界面:

  如果不是,尝试根据错误信息解决。

  之后我打算省略书上的一些细节,直接描述应该做些什么。

  首先,我们创建一个虚拟硬盘,输入以下命令:

bin/bximage -hd -mode="flat" -size= -q hd60M.img

  然后,我们在当前目录创建一个bochsrc文件了,这是用来配置bochs的,文件名为bochsrc.disk,文件内容为:

#Bochs运行中使用的内存,设置为32M
megs: 32 #设置真实机器的BIOS和VGA BIOS
#修改成你们对应的地址
romimage: file=/home/thougr/Desktop/mybochs/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/thougr/Desktop/mybochs/bochs/share/bochs/VGABIOS-lgpl-latest
#设置Bochs所使用的磁盘
#设置启动盘符
boot: disk

#设置日志文件的输出
log: bochs.out

#开启或关闭某些功能,修改成你们对应的地址
mouse: enabled=
keyboard_mapping: enabled=1, map=/home/thougr/Desktop/mybochs/bochs/share/bochs/keymaps/x11-pc-us.map

#硬盘设置
ata0: enabled=, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=
ata0-master: type=disk, path="hd60M.img", mode=flat, cylinders=, heads=, spt=

#增加bochs对gdb的支持,我们在这里不使用,所以注释掉了
#gdbstub: enabled=, port=, text_base=, data_base=, bss_base=

  执行下列命令运行bochs:

bin/bochs -f bochsrc.disk

  结果如图下:

  输入'c'继续运行(默默地吐槽一句,这是书上没有提示做的)

  结果如下图:

  显示这个错误时正常的,因为我们还没有设置启动盘,不要桑心,这个问题之后会解决的,做到这里已经很成功了!!!

  

《操作系统真象还原》bochs安装的更多相关文章

  1. 《操作系统真象还原》BIOS

    以下是读本书第二章的收获. 记得我大学学习操作系统的时候会遇到一些奇奇怪怪的问题,因为觉得问题太奇怪了,所以羞于问老师.诸如ROM到底是个什么东西:如果用内存映射的方式访问外部设备,是不是内存条里专门 ...

  2. 《操作系统真象还原》ELF文件

    下面是第五章部分内容的收获. 用C语言编写内核 一直以来我们都是用汇编语言编写程序的,但接下来我们或许很少用汇编语言编写代码了,大多数都是使用C语言.为什么要这样呢?书上的解释我看的不是很懂,只能结合 ...

  3. 《操作系统真象还原》MBR

    以下是读本书第三章的收获. 如何知道一个源程序的各符号(指令和变量)地址?简单来说,地址就是该符号偏移文件开头的距离,符号的地址是按顺序编排的,所以两个相邻的符号,其地址也是相邻的.对于指令来说,指令 ...

  4. 开源虚拟机Bochs安装以及踩坑

    因为想要写一个简单的操作系统,所以需要安装虚拟机来模拟出硬件,VMware不适合这个场景,因为会使用硬件级别的虚拟化,而bochs这个开源虚拟机,是用软件虚拟了所有的硬件,所以调试可以做到非常细的粒度 ...

  5. 反射实现Model修改前后的内容对比 【API调用】腾讯云短信 Windows操作系统下Redis服务安装图文详解 Redis入门学习

    反射实现Model修改前后的内容对比   在开发过程中,我们会遇到这样一个问题,编辑了一个对象之后,我们想要把这个对象修改了哪些内容保存下来,以便将来查看和追责. 首先我们要创建一个User类 1 p ...

  6. 虚拟机中安装Linux_Centos7操作系统(最小化安装)

    我们打开之前安装的VM, 点击 “创建新的虚拟机”: 我们选 典型 安装  简单点 然后下一步: 我们稍后安装操作系统 ,点下一步: 这里选 Linux 然后下拉 选CentOS 64位,然后下一步: ...

  7. bochs安装一系列问题

    http://blog.chinaunix.net/uid-23817499-id-3418083.html http://www.mouseos.com/os/tools/bochs.html    ...

  8. 【安装操作系统】VMware 中安装 Redhat 5

    引言 已有一台 Windows XP 家用机,安装 Linux 虚拟机,一不小心就会走弯路,因此本文提供一些入门级的经验来帮助你躲开歧途. 欢迎来到 lovickie 的博客 http://www.c ...

  9. Windows 7操作系统下Apache的安装与配置(图文详解)

    我这里是 Apache2.4.X-win64 首先, 我的操作系统信息如下  Apache2.4-win64的下载 官网 http://www.apachelounge.com/download/ 因 ...

随机推荐

  1. 使用A线程打印1-52,B线程打印A-Z,要求按照12A34B56C....5152Z的顺序进行交替打印

    多线程同步问题,都需要用到监视器,用来监视资源是否可用.C++中使用condition_variable,Java中使用Condition来实现同步. 1. 实现思路 需要有一个全局变量控制当前该哪个 ...

  2. 理解设备像素、设备独立像素、css像素、viewport

    设备像素也叫物理像素. 设备像素指的是显示器上的真实像素,每个像素的大小是屏幕固有的属性,屏幕出厂以后就不会改变了. 设备分辨率描述的就是这个显示器的宽和高分别是多少个设备像素. 设备像素和设备分辨率 ...

  3. C语言三 语句练习

    输入一个整数day代表星期几,根据day的值输出对应的星期几,比如day==1,就输出“星期一”(用两种方式实现) int Day; printf("请输入一个1~7的数字"); ...

  4. JavaWeb学习(四) : JSP 基本语法

    引入 JSP 的概念: 通俗来讲 : 在 HTML 代码中混合 Java 代码能让网页具有动态的功能, 而嵌入了 Java 代码的网页就是 JSP. JSP 的特点(优点) : 1.运行于服务端(是一 ...

  5. warning Unexpected use of undefined no-undefined

    报错翻译:警告意外使用未定义的no-undefined(谷歌这次翻译的不行) 报错原因undefined直接使用了,如下↓ 其实报错的意思就是这样不安全,看下面一个例子 var foo = undef ...

  6. 错误:EfficientDet网络出现"No boxes to NMS"并且mAP:0.0的解决方案

    近日,在使用谷歌新推出来的一个网络EfficientDet进行目标检测训练自己的数据集的时候,出现了如下错误: 其中项目开源地址是:https://github.com/toandaominh1997 ...

  7. 并发编程之J.U.C的第二篇

    并发编程之J.U.C的第二篇 3.2 StampedLock 4. Semaphore Semaphore原理 5. CountdownLatch 6. CyclicBarrier 7.线程安全集合类 ...

  8. 用Markdown编写

    计算机视觉 图像分类 对象检测 目标检测 图像分割 语义分割 实例分割

  9. 第2章 在 HTML中 使用 JavaScript

    第2章 在 HTML中 使用 JavaScript 2.1 script 元素 2.1.1 标签的位置 2.1.2 延迟脚本 2.1.3 异步脚本 2.1.4 在XHTML中的使用 2.1.5 不推荐 ...

  10. 小Z的袜子(hose) HYSBZ - 2038 莫队+分块

    #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll>pl ...