【操作系统】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程序怎么编写的,可以查看之前写过的文章:【操作系统】计算机硬件软件知识汇总
相关文章:
【操作系统】Bochs安装和配置
Bochs是使用C编写的高度可移植开源IA-32(X86)PC模拟器,能在大多数流行的平台上运行。它包括模拟Intel x86 CPU、常见I/O设备和自定义BIOS。Bochs可以被编译以模拟许多不同的x86 CPU,从386早期到最新的x86-64英特尔和AMD处理器甚至…...
【Vue】Node.js的下载安装与配置
目录 一.下载安装 官网: 二.环境变量的配置 三.设置全局路径和缓存路径 四.配置淘宝镜像 五.查看配置 六.使用npm安装cnpm 一.下载安装 官网: https://nodejs.org/en/download 下载完之后,安装的时候一直点next即可,…...
C语言从入门到实战——数组和指针的强化练习题
数组和指针的强化练习题 前言1. sizeof和strlen的对比1.1 sizeof1.2 strlen1.3 sizeof和strlen的对⽐ 2. 数组和指针笔试题解析2.1 一维数组2.2 字符数组2.3 二维数组 3. 指针运算笔试题解析3.1 题目1:3.2 题目23.3 题目33.4 题目43.5 题目53.6 题目63.7 题目7 前言…...
经典滑动窗口试题(一)
📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、将x减到0的最小操作数1、题目讲解2、讲解算法原理3、代码实现 二、无重复的最长子串1、题…...
【paddlepaddle】
安装paddlepaddle 报错 ImportError: /home/ubuntu/miniconda3/envs/paddle_gan/bin/../lib/libstdc.so.6: version GLIBCXX_3.4.30 not found (required by /home/ubuntu/miniconda3/envs/paddle_gan/lib/python3.8/site-packages/paddle/fluid/libpaddle.so) 替换 /home/ubu…...
String 、StringBuffer 和 StringBuilder 的区别?
String 使用 String 声明一个字符串的时候,该字符串会存放在堆中的字符串常量池中。因为在java中所有的String 都是以常量表示,且由 final 修饰,因此在线程池中它的线程是安全的 且 不可变的 。每个 String 在被创建后就不再发生任何变化。 …...
【DevOps】Git 图文详解(六):Git 利器 - 分支
Git 利器 - 分支 1.分支 Branch2.分支指令 🔥3.分支的切换 checkout4.合并 merge & 冲突4.1 🔸 快速合并(Fast forward)4.2 🔸 普通合并4.3 处理冲突 <<<<<<< HEAD 5.变基 rebase 分支是从主…...
万界星空科技QMS质量管理系统介绍
QMS(Quality Management System)质量管理系统是五大基础系统之一,在工业企业中被广泛的应用,在质量策划、生产过程质量监督、体系审核和文档管理等业务上发挥着不可替代的作用。 一般制造业工厂现状:质量成本高&#x…...
C练习题_14
一、单项选择题(本大题共 20小题,每小题 2分,共 40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 以下叙述不正确的是() A.一个C源程序可…...
解决方案 | 政策与技术加持,法大大电子劳动合同让人事管理更省心
政策加持, 助力劳动合同电子化推广 近年来,国家人社部多次发文,明确电子劳动合同法律效力,鼓励推广电子劳动合同全面应用,积极引导、支持企业和劳动者依法规范订立电子劳动合同,优化人力资源社会保障公共服…...
Linux基础命令5
su——切换用户命令 例如,切换到stu用户底下 而切换到管理员的命令就是下图 切换完的区别就是 stu——root $——# 退出——exit 关机与重启命令 如果在右上角直接点x号,就相当于把电源拔断了,这样做的次数多了,有可能系统就…...
springboot(ssm中医学习服务管理系统 医学生在线学习平台Java(codeLW)
springboot(ssm中医学习服务管理系统 医学生在线学习平台Java(code&LW) 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或…...
springboot宠物领养系统-计算机毕设 附源码 44261
springboot宠物领养系统 摘 要 网络发布信息有其突出的优点,即信息量大,资源丰富,更新速度快等,很符合人们希望以捷、便利的方式获得最多最有效信息的要求。本系统就是一个网上宠物领养系统,为宠物爱好者提供一个信息…...
性能测试必备知识-使用MySQL存储过程构造大量数据:实例解析
在软件开发过程中,测试是一个不可或缺的环节。通过测试,我们可以发现并修复软件中的各种问题,提高软件的质量和稳定性。然而,手动编写大量的测试用例是一项耗时且容易出错的任务。为了解决这个问题,我们需要学会使用批…...
最新绿豆APP源码苹果CMS影视插件版本/原生JAVA源码+反编译开源+免授权
源码简介: 最新绿豆APP源码苹果CMS影视插件版本,它是原生JAVA源码反编译开源免授权,绿豆影视对接苹果CMS,它可以支持多功能自定义DIY页面布局。 1、新版绿豆视频APP视频6.1插件版反编译指南及教程 2、后端插件开源,可…...
SPSS多元对应分析
前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…...
Rust语言特性探秘:宏的魔力
大家好!我是lincyang。 今天我们继续深入探讨Rust语言中的一个有趣而强大的特性——宏(Macros)。 宏在Rust中扮演着特殊的角色,不仅提高了代码的灵活性,还增强了代码的可重用性。接下来,我们会通过具体的…...
2023最全的Web自动化测试介绍
做测试的同学们都了解,做Web自动化,我们主要用Selenium或者是QTP。 有的人可能就会说,我没这个Java基础,没有Selenium基础,能行吗?测试虽然属于计算机行业,但其实并不需要太深入的编程知识&…...
Unity 控制物体透明度变化
1.需求 给物体绑定一个脚本,这个脚本实现物体的透明度渐变变化,并且可以重置回原来的颜色。物体为Unity自带的材质Shader为Standard。 2.代码 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Transpare…...
django及DRF流程源码分析
Django执行流程: 1.nginx作为接入层,通过反向代理,监听80端口获取请求连接 2.将请求交给wsgi server 3.wsgi server调用django的wsgi.py 处理请求 4.WSGIHandler的__call__函数就是整个逻辑处理流程 5.WSGIHandler __init__中的加载中间件,对request对象…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
