本文转载自 https://blog.csdn.net/YuDale/article/details/68500536?utm_source=copy
感谢作者的分享 另外我亲自试过文中的操作 如果问题请留言联系解决

搭建第三章pmtest1.com的bochs运行环境

一、前言

本来想跳过这本书的第二章直接进入第三章的,但是我还是too young too simply。第三章一开始讲的是实模式到保护模式的转换,所以什么是实模式,什么是保护模式,这些东西有啥子用?带着一大堆问题,翻来覆去的看了十几遍书,在网上看了许多的博客终于有些模糊的认识了,结果代码一敲,然后...这代码要怎么运行,我要怎样才能看到这个代码的效果呢?!

这里bochs的重要性就突显出来了。首先看到书上面的一段话(这段话在2.5小节里面):我们要写的是基于x86平台的32位操作系统,这需要我们队保护模式有非常好的了解。而学习保护模式时编写的代码需要依赖运行于实模式的DOS,而不是V86模式下的DOS。这段话告诉我们一个信息,第三章那该死的代码是要在DOS上面运行的!但是ubuntu是没有DOS的!所以我搜了几天的“在ubuntu/linux下运行pmtest1”根本就毫无意义。那么为了第三章能顺利的学习下去,但是又不想再安装一个VirtualPC,我决定在ubuntu内再装一个bochs。

首先,对bochs的理解,它是一款x86的模拟器。不过bochs它很有意思,它的界面是这样的,作为一款开源软件,感觉就是和商业软件那种妖艳的贱货不一样。而且在书上和众多博客上面都强烈的称赞了它的调试功能(虽然我现在并不会用,但是以后应该会慢慢接触到的)。

如此清新脱俗的模拟器,是不是很让人心动呢?现在我们开始将它收入囊中。(以下都是在权限模式下的命令)

二、bochs的安装

1.去http://nchc.dl.sourceforge.net/project/bochs/bochs/2.4.5/bochs-2.4.5.tar.gz 下载【bochs-2.4.5.tar.gz】

2.解压下载的源代码:
tar zxvf bochs-2.4.5.tar.gz

3.进入bochs-2.4.5目录,运行configure脚本:
./configure –enable-debugger –enable-disasm
(–enable-debugger和 –enable-disasm 表示开启调试和反汇编功能)

4.第3步正确运行后,会产生一个Makefile文件,于是可以编译:
make

5.安装:
make install

好了,我们已经把bochs安装完了,但是说着容易做着难,在安装过程中你会遇到许许多多,形形色色,奇奇怪怪的问题。bochs是基于C++的,所以在安装之前我们需要安装相关的依赖环境,也就是说在我们安装之前还要装一些东西。

1.apt-get install build-essential

2.apt-get install xorg-dev

3.apt-get install libgtk2.0-dev

4.apt-get install bison

到此为止,我们的安装还是不会很顺利。好了现在我们把一些出现的问题大致梳理一下(每次执行命令时候都会有一大串提示,只要看后面有没有报错就行):

1.error: C++ preprocessor “/lib/cpp” fails sanity check

因为Bochs是用C++写的,所以这里要安装GNU g++编译器。

解决方法:
apt-get install build-essential
apt-get install g++

2.checking for default gui on this platform… x11
ERROR: X windows gui was selected, but X windows libraries were not found.

解决方法:
apt-get install xorg-dev

3.ERROR: pkg-config was not found, or unable to access the gtk+-2.0 package.

解决方法:
apt-get install libgtk2.0-dev

4.make的时候提示

/usr/bin/ld: gui/libgui.a(gtk_enh_dbg_osdep.o): undefined
reference to symbol pthread_create@@GLIBC_2.1 //

lib/i386-linux-gnu/libpthread.so.0: error adding symbols: DSO missing
from command line collect2: error: ld r

解决方法1:修改"Makefile.in" 92 和 93行 为 "CC = @CC@ -pthread" and "CXX = @CXX@ -pthread"

解决方法2:在Makefile.in中183行

bochs@EXE@: @IODEV_LIB_VAR@ @DEBUGGER_VAR@ \
cpu/libcpu.a memory/libmemory.a gui/libgui.a \
@DISASM_VAR@ @INSTRUMENT_VAR@ $(BX_OBJS) \
$(SIMX86_OBJS) @FPU_VAR@ @GDBSTUB_VAR@ @PLUGIN_VAR@
@LINK@ @EXPORT_DYNAMIC@ $(BX_OBJS) $(SIMX86_OBJS) \
@IODEV_LIB_VAR@ @DEBUGGER_VAR@ cpu/libcpu.a memory/libmemory.a gui/libgui.a \
@DISASM_VAR@ @INSTRUMENT_VAR@ @PLUGIN_VAR@ \
@GDBSTUB_VAR@ @FPU_VAR@ \
@NONPLUGIN_GUI_LINK_OPTS@ \
$(MCH_LINK_FLAGS) \
$(SIMX86_LINK_FLAGS) \
$(READLINE_LIB) \
$(EXTRA_LINK_OPTS) \
$(LIBS)

在最后$(LIBS)后面加上 \ -lpthread如下:

bochs@EXE@: @IODEV_LIB_VAR@ @DEBUGGER_VAR@ \
cpu/libcpu.a memory/libmemory.a gui/libgui.a \
@DISASM_VAR@ @INSTRUMENT_VAR@ $(BX_OBJS) \
.
.
.
$(LIBS)\
-lpthread

5.make install:

无法获取“./bochsdbg”的文件状态(stat):没有那个文件或目录

make;[install_bin] 错误1(忽略)

解决方法:

在make之后将bochs拷贝一份,命名为bochsdbg

到此,bochs安装过程中的大部分问题都得到了解决,现在我们可以开心的用bochs了: )

这些博客对我起到了莫大的帮助,仅此对博主表示感谢:

http://blog.chinaunix.net/uid-24807808-id-3070251.html

http://blog.csdn.net/xiaoheiyohehe/article/details/19034541

http://blog.csdn.net/geeker_12/article/details/11409009

http://www.linuxdiyf.com/linux/15074.html

虽然我们已经安装好了bochs,但是我们现在还是不能使用,因为我们还需要写配置文件,做虚拟软盘,加载dos系统,这些我将会继续整理总结。

二、bochs的配置文件与镜像的生成

现在我将对bochs的使用进行总结,让pmtest1.com能够运行起来。首先我们得写配置文件,配置文件写在有镜像文件的目录里面,也就是和镜像文件同目录。

创建配置文件

vim bochsrc

配置文件的内容如下:

下面是几个值得注意的地方

1.#filename of ROM images下面的两行。

这两行是写的两个文件的路径,可以在cd /usr/local/share/doc/bochs里面的bochsrc-sample.txt文件中找到。

2.#what disk images will be used下面的这行。

这行是用来告诉bochs运行哪个镜像的。

接下来再来说一说如何创建镜像,bochs创建镜像是特别简单的,只需要敲下面命令:

bxiamge

然后会有几个选项(红框框里面的),第一个是选择生成硬盘镜像还是软盘,我们选择fd;第二个是镜像大小选择,1.44就可以了;第三个是命名,这里随便自己了。

接下来把第一章的boot.bin冲洗到这个镜像里面

dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

下面我们便来运行一下看一下效果

bochs -f bochsrc

出来了这个界面,我们选择6。然后会出现一个黑框,这时我们在红圈圈出的这里输入c。

再切换到bochs里面,点击左边的那个纸盒子就可以了,我们便会看到亲切的Hello,myOS!了。

然而,我们到这里就结束了吗?并没用!我们的目的远远不止于这里,我们是要能把第三章的pmtest1.com运行起来。前面说过,pmtest1.com这个程序的运行条件是在dos系统里面,所以我们需要在bochs里面安装dos。

三、bochs中的dos安装和pmtest1.com的运行

如何在bochs里面安装dos呢,下面我们就慢慢来学习。

1.在http://bochs.sourceforge.net/guestos/freedos-img.tar.gz上面下载FreeDos(需要翻墙)

2.解压

tar vxzf freedos-img.tar.gz

3.采用上节的方法bximage生成镜像pm.img,然后将freedos-img中的a.img改名为freedos.img并复制到工作目录下,也就是和pm.img同一目录下。

4.修改bochsrc配置文件,修改如图:

5.启动bochs

6.格式化B盘,退出bochs,过程见图。

这时可能会出现问题。

没关系,我们先继续下面的步骤

6.将pmtest1.com复制到虚拟软驱pm.img中

mkdir /mnt/floppy

mount -o loop pm.img /mnt/floppy

cp pm1.bin /mnt/floppy

umount /mnt/floppy

如果是出现步骤5的那个问题的,将前面的步骤再做一遍,重新格式化一遍B盘。

7.启动bochs

出现红色的P,这就表示我们成功了。(因为我将pmtest1.com命名为pm1.bin,所以我的B盘里面输入的是pm1.bin)。

再次特别感谢faileast_weiwei和河西无名氏的博客(点击即可进入他们的博客)

搭建 bochs 运行环境相关推荐

  1. OSGI企业应用开发(二)Eclipse中搭建Felix运行环境

    上篇文章介绍了什么是OSGI以及使用OSGI构建应用的优点,接着介绍了两款常用的OSGI实现,分别为Apache Felix和Equinox,接下来开始介绍如何在Eclipse中使用Apache Fe ...

  2. ubuntu下php服务器搭建_Ubuntu服务器下搭建php运行环境的方法

    本文实例讲述了Ubuntu服务器下搭建php运行环境的方法.分享给大家供大家参考,具体如下: 安装 Apache2: sudo apt-get install apache2 安装PHP模块: sud ...

  3. CentOS7安装wdCP面板,快速搭建web运行环境(图文详解)

    文章目录 1. wdCP简介 2. 安装过程 2.1 源码安装 2.1.1 ssh登录服务器 2.1.2 源码的下载.解压.安装 2.1.3 软件安装目录 2.2 进入后台管理 3.wdCP面板的卸载 ...

  4. 漫游Kafka实战篇之搭建Kafka运行环境

    原文地址:http://blog.csdn.net/honglei915/article/details/37564329 Kafka视频教程同步首发,欢迎观看! 接下来一步一步搭建Kafka运行环境 ...

  5. JDK+Tomcat搭建JSP运行环境--JSP基础

    一.搭建JSP运行环境之前需要了解的基本知识 配置JSP运行环境之前,我们需要了解JSP的运行机制.只有了解JSP运行机制后,我们才能知道为什么要搭建JSP运行环境?如何去搭建JSP运行环境?为什么要 ...

  6. 如何搭建html运行环境,搭建真实的运行环境2019.4.22

    1.搭建真实运行环境步骤 ①先下载phpstudy软件 ②按照安装步骤进行phpstudy安装,安装后启动服务,点击<其它选项菜单>里面的<My HomePage>选项,正常显 ...

  7. Idea中搭建Resin运行环境(Mac)

    一.背景 idea中搭建Resin运行环境,可以在idea中通过点击Run按钮直接调试应用. 二.Resin下载地址 下载地址:https://caucho.com/products/resin/do ...

  8. win主机上搭建php网站运行环境,Windows server 2008搭建php运行环境图文详解(php5.3)

    这篇文章主要为大家分享下Windows server 2008搭建php运行环境的步骤,需要的朋友可以参考下 下载php组件包 首先到http://windows.php.net/download/下 ...

  9. PHP(2):搭建PHP 运行环境中可能出现的问题及处理方法

    PHP(2):搭建PHP 运行环境中可能出现的问题及处理方法         初学者在搭建PHP运行环境中经常可能遇到一些错误,这个时候可能就无所事从了!其实,错误是任何人都难免的,即使是程序高手!关 ...

最新文章

  1. 如何组织成功的bug bash--摘录
  2. Oracle视图添加约束,Oracle的约束视图
  3. UA MATH567 高维统计专题1 稀疏信号及其恢复7 LASSO的预测误差与变量选择一致性
  4. PowerDesigner建立UML序列图
  5. jquery通过ajax提交form
  6. 百度NeurIPS全球顶会冠军团队,带你7日从零实践强化学习
  7. python求最大素数_Python实现求最大公约数及判断素数的方法
  8. 【ARM】协处理器指令
  9. 剑指offer 重建二叉树
  10. linux和win10运行效率,Ubuntu与Win10周年版Ubuntu Bash性能对比
  11. 日历控件如何切换语言 vant_看看甘特图控件VARCHART XGantt的亮点
  12. 腾讯笔试:把两个数和告诉A,积告诉B,求这两个数是什么
  13. mysql hyperloglog_Redis HyperLogLog
  14. C语言用冒泡法对数组元素降序,冒泡法排序c语言
  15. java pdf 水印 加密_Java生成PDF 加密 水印
  16. 水木周平戏说中国网络黑幽默
  17. CRM八面体:客户关系管理成功案例2 Yorkshire Water
  18. 基于MATLAB的TODA定位算法的仿真
  19. 想做游戏测试工程师?这几点不知道可不行!
  20. 机器人II_ny_371

热门文章

  1. 金山词霸和卡巴斯基冲突
  2. Reflections 介绍
  3. 使用python生成文字图片,画圆圈 ,生成圆形图片
  4. 企业发展最大的敌人------内耗
  5. 天选姬 - 桌面宠物
  6. PTA L2-16愿天下有情人都是失散多年的兄妹(25分)(python)
  7. _beginThreadex的用法
  8. glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用
  9. 万亿OTA市场进入新爆发期,2025或迎中国汽车软件付费元年
  10. TIME_WAIT状态下的连接“搞怪“