【操作系统】Bochs安装和配置

        Bochs是使用C++编写的高度可移植开源IA-32(X86)PC模拟器,能在大多数流行的平台上运行。它包括模拟Intel x86 CPU、常见I/O设备和自定义BIOS。Bochs可以被编译以模拟许多不同的x86 CPU,从386早期到最新的x86-64英特尔和AMD处理器甚至可能还没有进入市场。Bochs能跑仿真中的大多数操作系统(例如DOS),Linux或Windows。

一.下载和编译

        可以在官网:https://sourceforge.net/projects/bochs/files/bochs/ 下在源码,本文下载的版本为2.6.11。

        下载的压缩文件使用指令“tar –zxvf bochs-2.6.11.tar.gz”解压文件,解压完成后进入文件夹目录中,开始执行编译操作。

默认配置编译

        使用指令“./configure”可以直接按照默认的配置运行源码编译操作,位于目录下的”configure”脚本可以检测你机器的一些基本配置,比如C/C++编译器、环境依赖库等,以便发现那些设置可以在系统上面工作。

手动配置选项编译

         如果你想自己设定一些配置,可以在”./configure”后面追加一些配置项以便在编译时将功能带上,如果不知道有什么可以配置,可以使用“./configure --help”来查看支持的配置项:

        比如本例中,我将使用以下配置信息进行编译:

“./configure  --prefix=/user_path  --enable-debugger-gui  –enable-disasm  --enable-iodebug  --enable-x86-debugger  –with-x  --with-x11”

         这些配置信息的作用如下:

配置名称

作用

--prefix

设置安装bochs的目录路径

--enable-debugger-gui

打开Bochs内部拥有gui界面的调试器

--enable-disasm

使得Bochs支持反编译

--enable-iodebug

启用io接口调试器,常常与--enable-debugger一起搭配使用

--enable-x86-debugger

启用X86调试器

–with-x

启用X窗口

--with-x11

启用X11图形用户窗口

         编译成功后会在当前文件夹生成一个状态文件”./configure.status”记录配置信息,并且在每个源代码目录中创建以恶搞Makefile以及config.h文件夹,其中所有的选项值都是为了预处理器#define编写的。

        配置完成后会生成Makefile文件,使用指令”make”开始编译程序:

        在make结束后再执行“make  install”开始安装程序(安装的路径就是上面—prefix中设置的路径):

        安装完成后,在安装路径下既可以看见文件夹目录

二.Bochs配置

        安装完成后还需要编写配置文件才能让Bochs开始模拟PC环境,这个配置就类似于电脑的BIOS程序,BIOS会显示各种硬件的信息以及硬件的启动顺序等,Bochs要想模拟计算机,它就得知道这台计算机的配置是什么样子的,有哪些硬件?启动顺序是什么?软盘启动还是硬盘启动?这些都是需要在配置文件中说明,并且导入到Bochs中。

          在路径下的文件:bochs/share/doc/bochs/bochsrc-sample.txt为配置文件的参考例子,说明了每个配置项的具体使用定义:

        以下贴出博主自己经常使用的配置信息以供参考,更多配置请自行查看上面的样例(文件名为boch.disk):

megs:32  //关键字megs,用于设置Bochs在运行时能够使用的内存,本例为32MB
romimage:file=XXX /bochs/share/bochs/BIOS-bochs-latest  //设置实际机器的BIOS,地址看你的安装路径
vgaromimage:file=XXX/bochs/share/bochs/VGABIOS-lgpl-latest  //设置实际机器的VGA BIOS,地址看你的安装路径
boot:disk  //使用硬盘启动,如果使用软盘启动则为boot:floopy
log:bochs.out  //日志输出文件名
mouse:enabled=0  //关闭鼠标
keyboard:keymap=XXX/bochs/share/bochs/keymaps/x11-pc-us.map  //打开键盘
ata0:enabled=1,ioaddr1=0x1f0,ioaddr2=0x3f0,irq=14  //硬盘设置信息
ata0-master:type=disk,path="XX.img",mode=flat,cylinders=121,heads=16,spt=63  //硬盘的设置信息,其中path=”XXX”为后续生成的xxx.img文件的路径,没有这个镜像文件的话启动会失败。

三.镜像生成和Bochs运行

        只有配置文件还不能够运行让模拟系统运行,这就相当于你只是买了一大堆零散的硬件,配置文件把它们组装起来而已,还有关键的MBR程序、操作系统这些软件还需要你亲自编写才能真正得运行。当然你也可以直接运行Bochs程序:

        如果你能进入到这个界面,说明你的Bochs已经安装成功,剩下的就是启动程序怎么写,内核怎么写以及操作系统怎么编的问题了。众所周知,程序需要有介质进行存放的,Bochs提供了一个创建虚拟硬盘的工具,路径位于“/bin/bximage”,该工具可以生成一个空白的硬盘,我们写的程序就可以往硬盘里面写,让Bochs来读取该硬盘的程序。

         Bximage工具的使用方法可以使用后缀参数”--help”来查看:

         我们参照以上格式生成一个简单的60MB的虚拟硬盘:

        参数说明如下:

指令

作用

-fd

创建软盘

-hd

创建硬盘

-mode

创建硬盘的类型,如flat、sparse、growing

-size

创建硬盘的大小,MB为单位

-q

以静默模式创建,创建过程中不会和用户交互

         创建成功后,我们会在boch.disk文件(不知道这个是什么的请看第二点Bochs配置)里面添加该镜像文件,镜像文件中添加我们自己写的MBR程序、引导程序等,Bochs就可以开始模拟我们所编写的系统啦。

         比如本人已经编写好了一个简单的MBR程序,而且也已经写入到镜像里面,这时候只要运行Bochs程序:

        这里可以看到默认是选择6的,6的功能就是开始模拟,我们直接按下回车,程序就会开始模拟:

        这时候就可以看到有调试信息以及弹出一个模拟的窗口,我们在命令行里面输入“c”以便让模拟继续往下进行,就可以看到你写的系统是否正常了:

        如果你想知道”c”代表什么意思,可以直接输入”help”查看指令使用说明:

        如果想要知道MBR程序怎么编写的,可以查看之前写过的文章:【操作系统】计算机硬件软件知识汇总

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/181846.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【UE】用样条线实现测距功能(下)

目录 效果 步骤 一、实现多次测距功能 二、通过控件蓝图来进行测距 在上一篇(【UE】用样条线实现测距功能(上))文章基础上继续实现多次测距和清除功能。 效果 步骤 一、实现多次测距功能 打开蓝图“BP_Spline”&#xff0c…

RTOS的任务触发底层逻辑

(定时器用于计时和触发事件,任务则由调度器进行调度和执行:每当时钟节拍到达时,系统会触发一个称为 tick 中断的事件。当 tick 中断发生时,操作系统会在中断服务例程中执行一定的处理,其中包括更新任务的运…

MySQL的Redo Log跟Binlog

文章目录 概要Redo Log日志Redo Log的作用Redo Log的写入机制 Binlog日志Binlog的作用Binlog写入机制 两段提交 概要 Redo Log和Binlog是MySQL日志系统中非常重要的两种机制,也有很多相似之处,本文主要介绍两者细节和区别。 Redo Log日志 Redo Log的作…

JMeter压测常见面试问题

1、JMeter可以模拟哪些类型的负载? JMeter可以模拟各种类型的负载,包括但不限于Web应用程序、API、数据库、FTP、SMTP、JMS、SOAP / RESTful Web服务等。这使得JMeter成为一个功能强大且灵活的压力测试工具。 2、如何配置JMeter来进行分布式压力测试&a…

保护你的APP!快速了解如何进行APP安全性测试!

通常我们队APP所进行的安全性测试包含以下几个模块:安装包安全性、数据安全性、软键盘劫持、账户安全性、通信安全性、备份检查等。下面针对每个模块我们详细说明具体的测试方法。 安装包安全性 1、反编译 目的是为了保护公司的知识产权和安全方面的考虑等&#x…

Appium 全新 2.0 全新跨平台生态,版本特性抢鲜体验!

关于Appium V2 Appium V2 beta版本在2021年发布,从2022年1月1号开始,Appium核心团队不会再维护Appium 1.x版本了,所有近期官方发布的平台驱动(如Android平台的UIAutomator,IOS平台的XCUITest)不再兼容Appi…

相比其他关系型数据库,AntDB JDBC驱动特性有哪些不同之处

摘要:使用Java语言进行各类应用程序的快速开发成为目前比较主要且流行的开发方式。JDBC是 Java 语言中用来连接和操作关系型数据库的 API,在业务程序与关系型数据库通信时,必然会使用JDBC驱动。 本文将通过国产关系型数据库AntDB中的JDBC为大…

在PCL视图器中使用随机生成的颜色来可视化一组匹配的点对

std::vector<Eigen::Vector2d> centroids_unknown_motion_underk; std::vector<Eigen::Vector2d> centroids_unknown_motion_k; // 进行数字填充 pcl::visualization::PCLVisualizer viewer("Centroid Visualization");int id 0;// 添加 XY 坐标系doub…

中国人总爱乱吃药,这些家庭常见药我劝你别乱吃!

你可能在各种抖音快手上都看到过博主推荐生活小窍门—— 比如巧用二甲双胍减肥&#xff0c;六味地黄丸包治百病&#xff0c;阿司匹林巧治高血压…… 世上本没有神药&#xff0c;用得多了&#xff0c;也就变成神药了。 ——这句话鲁迅没说&#xff0c;也没有任何道理可言。 说…

uni-app开发小程序,利用scroll-view实现自动滚动至对应数据

uniapp scroll-view 官网 vue文件内容&#xff1a;dom: <scroll-view scroll-y :scroll-into-view"seqToView"><view class"pop-scroll"><viewv-for"(item,index) in seqList":id"seq- item":key"index"cl…

ubuntu20.04安装多版本cuda,切换版本

1. 安装cuda toolkit: 下载网站 https://developer.nvidia.com/cuda-11.3.0-download-archive 选择版本&#xff0c;这里选择11.3 wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run给cuda权限: chmod x…

数据结构与算法【红黑树】的Java实现+图解

前言 建议先阅读普通二叉搜索树与平衡二叉搜索树的文章。理解一些基本的二叉树知识数据结构与算法【二叉搜索树】Java实现-CSDN博客 介绍 红黑树也是一种自平衡的二叉搜索树&#xff0c;较之 AVL&#xff0c;插入和删除时旋转次数更少。 首先介绍代码实现会用到的概念 兄弟…

python-opencv在图片中绘制各种图形

python-opencv在图片中绘制各种图形 1.绘制直线 2.绘制矩形 3.绘制圆 4.绘制椭圆 5.绘制多边形 6.嵌入文字 实现代码都在下面了&#xff0c;代码中参数做了简单注释 import copy import math import matplotlib.pyplot as plt import matplotlib as mpl import numpy a…

OpenStack云计算平台-启动一个实例

目录 一、创建虚拟网络 ​二、创建m1.nano规格的主机 三、生成一个键值对 四、增加安全组规则 ​五、启动一个实例 1、确定实例选项 2、创建实例 3、使用虚拟控制台访问实例 4、验证能否远程访问实例 一、创建虚拟网络 下面的说明和框图使用示例IP 地址范围。你必须依…

单个视频生成视频二维码,手把手图文教程

单个视频生成视频二维码帮助教程&#xff08;图文教程&#xff09;&#xff0c;手把手教程如下&#xff1a; STEP1 注册帐号 使用视频二维码&#xff0c;您需要注册酷播云用户帐号&#xff08;免费5G空间&#xff0c;普通用户够用&#xff09;。 参考如图1-1&#xff0c;按照…

关于ElectronVue3中集成讯飞星火AI

前言&#xff1a;我的最终目的是为了在QQ上集成一个AI机器人&#xff0c;因此在这里先实现一个简单的集成 先上效果图 总体还是很简单的&#xff0c;我在调用websock获取回复内容的基础上另外集成了一个事件总线&#xff0c;让我们在调用获取消息的时候能够更加方便快捷 工具代…

前端学习--React(3)

一、Redux 集中状态管理工具&#xff0c;不需要react即可使用&#xff0c;每个store的数据都是独立于组件之外的 vue小链接&#xff1a;vuex/pinia 基本使用 Redux将数据修改流程分成三个概念&#xff0c;state、action和reducer state - 一个对象 存放我们管理的数据状态 a…

OpenStack云计算平台-镜像服务

目录 一、镜像服务概览 二、安装和配置 1、先决条件 2、安全并配置组件 3、完成安装 三、验证操作 一、镜像服务概览 OpenStack镜像服务是IaaS的核心服务&#xff0c;如同 :ref:get_started_conceptual_architecture所示。它接受磁盘镜像或服务器镜像API请求&#xff0c;…

2023服务端测试开发必备技能:Mock测试

什么是mock测试 Mock 测试就是在测试活动中&#xff0c;对于某些不容易构造或者不容易获取的数据/场景&#xff0c;用一个Mock对象来创建以便测试的测试方法。 Mock测试常见场景 无法控制第三方系统接口的返回&#xff0c;返回的数据不满足要求依赖的接口还未开发完成&#…
最新文章