【操作系统】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.hqwc.cn/news/211461.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】一题带你出师链表!

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 题目链接 138. 随机链表的复制https://leetcode.cn/problems/copy-list-with-random-pointer/ 题目描述 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机…

YAML 深入解析:从语法到最佳实践

什么是YAML YAML(YAML Ain’t Markup Language)是一种人类可读的数据序列化语言。它的设计目标是使数据在不同编程语言之间交换和共享变得简单。YAML采用了一种简洁、直观的语法,以易于阅读和编写的方式表示数据结构。 YAML广泛应用于配置文…

Linux加强篇001-部署Linux系统

目录 一、前言 1.1准备工具 1.2安装配置VM虚拟机 1.3安装软件 1.4系统初始化进程 1.5重置root密码 二、巩固练习 1.为什么建议读者在下载系统文件后先进行校验而不是直接安装呢? 2.使用虚拟机安装Linux系统时,为什么要先…

管理类联考——英语二——备考 100 句涵盖所有词汇

全中 在海里的这个地区,熊猫们喜欢就着苏打碗豆喝茶。而大洋州的民兵则喜欢经过半岛,带着编剧本的公式上餐厅去。附件的电影院里有额外的歌剧和香蕉,这一时代的斑马们被外面的天线所吸引。实验室里的蟹想用它的肋骨去戳四肢象灯炮的小羊。但…

完美解决:Nginx访问PHP出现File not found.

目录 解决方法一: 解决方法二: 遇到 File not found. 出现的问题解决: 解决方法一: 修改nginx的主配置文件。 vi /etc/nginx/nginx.conf location ~ \.php$ { root html; fastcgi_pass …

C语言——从键盘输人三角形的三个边长 a、b、c,求出三角形的面积。

从键盘输人三角形的三个边长 a、b、c,求出三角形的面积。求三角形的面积用公式areasqrt(s*(s-a)*(s-b)*(s-c)),其中 s1/2(a十bc)。注:要求对输人三角形的三个边长做出有效性判断。 #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> #include<math.h> int main…

5.1 PBR基础 BRDF介绍

基于物理的渲染&#xff08;Physically Based Rendering&#xff0c;PBR&#xff09;是指使用基于物理原理和微平面理论建模的着色/光照模型&#xff0c;以及使用从现实中测量的表面参数来准确表示真实世界材质的渲染理念。 一、反射率方程 理论基础放在参考链接里。 直接开始…

Rust开发——数据对象的内存布局

枚举与Sized 数据 一般数据类型的布局是其大小&#xff08;size&#xff09;、对齐方式&#xff08;align&#xff09;及其字段的相对偏移量。 1. 枚举&#xff08;Enum&#xff09;的布局&#xff1a; 枚举类型在内存中的布局通常是由编译器来确定的。不同的编译器可能有不…

香港科技大学广州|先进材料学域博士招生宣讲会—华中科技大学大学专场!!!(暨全额奖学金政策)

“跨学科融合创新&#xff0c;引领新兴与未来行业的突破与发展——先进材料学域” 世界一流的新型可持续材料创新研究 夯实的先进材料领域国际学术影响力 教授亲临现场&#xff0c;面对面答疑解惑助攻申请&#xff01; 一经录取&#xff0c;享全额奖学金1.5万/月&#xff01; …

深入了解接口测试:方法、工具和关键考虑因素(一)

接口测试是软件测试中的一项重要工作&#xff0c;它涉及到系统与系统之间的交互点。接口可以是外部接口&#xff0c;也可以是内部接口&#xff0c;包括上层服务与下层服务接口以及同级接口。在接口测试中&#xff0c;我们需要确保接口能够按照预期的方式进行通信和交互&#xf…

C百题--6.输出C

1.问题描述 输出“C”样式的字符 2.解决思路 1.用printf(&#xff09;逐行输出&#xff1b; 2用循环一部分一部分输出 3.代码实现 #include<stdio.h> int main(){for(int i0;i<5;i){printf("*"); }printf("\n");for(int i0;i<2;i){printf…