在安装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. 修改centos7容器的时间和宿主机时间一致

    一.问题 centos7系统容器时间与宿主机系统时间不一致,就进去查看一番,发现时区和宿主机上的时间不一致,下面就来解决一下 二.现象 1.查看centos宿主机的时间 输入如下命令查看 # date ...

  2. Springboot feign 传递request信息

    基础实现 requestInterceptor 实现类中添加信息 public class NativeFeignConf { @Bean public RequestInterceptor getR ...

  3. 9种分布式ID生成之 美团(Leaf)实战

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...

  4. day1 对java的认识

    对java的认识 1.java是一门跨平台的语言,由jvm进行预编译,转换成类似伪代码一样的东西,最后再转换成机器语言. 2.程序是由数据结构和算法构成,其他所有的工具类,方法都是为数据结构或者算法服 ...

  5. 获取域hash并破解

    ntds.dit ntds.dit是主要的AD数据库,存放在C:\Windows\NTDS\NTDS.dit,包括有关域用户,组和组成员身份的信息.它还包括域中所有用户的密码哈希值.为了进一步保护密码 ...

  6. 【HDU - 1087 】Super Jumping! Jumping! Jumping! (简单dp)

    Super Jumping! Jumping! Jumping! 搬中文ing Descriptions: wsw成功的在zzq的帮助下获得了与小姐姐约会的机会,同时也不用担心wls会发现了,可是如何 ...

  7. OpenCV检测Marker位姿

    Marker检测采用小觅相机,可以实时检测Marker的位置和姿态,效果如下: 参考代码如下: #include "pch.h" #include <Eigen/Dense& ...

  8. python打包生成可执行文件教程

    python打包生成可执行文件教程 安装环境: 1.打开命令行窗口,输入命令:pip install pyinstaller ,等待下载结束.示例: 2.下载结束后,测试是否成功安装,输入命令:pyi ...

  9. SQL中的real、float、decimal、numeric数据类型区别

    概述: 浮点数据类型包括real型.float型.decimal型和numeric型.浮点数据类型用于存储十进制小数. 在SQL Server 中浮点数值的数据采用上舍入(Round up)的方式进行 ...

  10. for _ in range(n) python里那些奇奇怪怪的语法糖

    for _ in range(n)中 _ 是占位符, 表示不在意变量的值 只是用于循环遍历n次. 例如在一个序列中只想取头和尾,就可以使用_ 其实意思和for each in range(n)是一个意 ...