用bochs调试自己写的系统引导代码

操作系统学习6 使用Bochs调试自己的引导程序 一、Bochs简介 Bochs是一个x86 的软件模拟器,用来模拟x86CPU、一些硬件和BIOS等,可以用来运行Windows、Linux等软件。 由于它是纯软件模板,所以运行速度比起VmWare,VirtualBox可能会慢一点。 二、启动镜像的操作过程 1. 下载地址 https://sourceforge.net/projects/bochs/files/bochs/2.6.11/ 安装后启动。 2. 启动一个虚拟机 点Start,启动一个Linux虚拟机。 Power按钮可以关闭虚拟机。 3. 阅读详情

https://blog.csdn.net/u011006622/article/details/55504657

1 安装和配置bochs

  首先从bochs.sourceforge.net里面把BOCHS给download下来,鉴于Windows的普及,仅仅谈BOCHS在win下的使用方法,其实在其它的OS中方法差不多,不过我仅仅在Window和Linux下安装使用过。

  在bochs.sourceforge.net里面把Bochs-2.6.1.exe给download下来,双击就开始安装。这软件不大,安装完才4兆多,当然,这是标准安装,如果你选择的是完全安装,则比标准安装多个DLX linux demo这个OS,如果你是第一次使用BOCHS,建议你用完全安装,装完 ,现不用着急学会BOCHS的一大堆配置,可以先用用它自带的这个OS,感受下BOCHS。

       在BOCHS的目录里面有个dlxlinux子目录,进去,双击bochsrc,就进入下图:

这dlx linux是系统自带的,如果自己想用别的操作系统该怎么办呢?嘿嘿,别着急,BOCHS的开发者们已经为我们考虑好了,bochs.sourceforge.net里面,你能找到很多img文件,这些都是开发者们做好的镜像文件了,嗯,说白了,就等于是机子的硬盘了,咱们仅仅需要的就是配置好,能运行就可以。

  通常我喜欢的方法是改配置文件,这方法似乎也是BOCHS的使用者们通常喜欢采用的吧,我详细介绍这方法。

  比方说,咱们想用msdos这个操作系统,从网上找个msdos的启动盘的镜像文件,如果找不到的话,可以自己做个,方法:首先做个启动盘镜像文件,取名boot.img这就做好了,方法可以参考我以前写的”用vmware运行简单的引导代码“或者也可以用dos下的hd-copy这个工具做出来。然后单独建立个目录(随意地方)msdos,然后把bochs安装目录里面的bochsrc-sample.txt这个文件复制到msdos这个目录里面,并改名,注意,后缀最好是bxrc,这个后缀是bochs可以识别的。bochsrc-sample.txt这个文件是配置文件模板,我们就是在这个模板的基础上修改参数成为我们的操作系统所使用的配置文件。

  第一个参数:floppya这是A驱动器的参数,当然,自然也是模拟的。通常所用的软驱是1.44MB的,因此后面跟的参数是1_44=/dev/fd0 注意,这个/dev/fd0必须是你的软驱的镜像,比方说咱们的msdos就是boot.img,你把/dev/fd0改成1_44=boot.img就可以。当然,也可以模拟其它的软驱,如2.88M,720K,360K的,这非常的有用!后面的参数status标明软驱的状态,只能有两个inserted(软盘插入软驱),ejected(软盘未插入软驱)。

      第二个参数:boot,这是启动的驱动器,它的频率也比较高。它可以带的参数有floppy(软驱启动),disk(磁盘启动),cdrom(光驱启动)。

      这两个参数是最最常用的,几乎是必用吧。

      第三个参数:ata0,ata1,ata2,ata3,这应该算是四个参数吧,没事别改它,反正我是没改过它,还常常吧后面的ata1,ata2,ata3给注释掉,仅仅留ata0。

      第四个参数:ATA[0-3]-MASTER,ATA[0-3]-SLAVE,这就有用了,指定硬盘或光盘的参数,并指明它是主盘还是从盘。标准的参数是ata0-master: type=disk, mode=flat, path="30M.sample", cylinders=615, heads=6, spt=17,type参数只能是两者,disk(硬盘),cdrom(光盘),mode这个参数镜像类型,它仅仅是针对磁盘才有效,有几种,flat(一个文件的布局)concat(多个文件的布局)external(开发者指定的,通过C++的类BOCHS就是C++开发的)dll(开发者指定的,通过dll文件)vmware3(wmware3使用的硬盘镜像)。还有几个其它的不介绍;path是指定硬盘或是光盘镜像的文件。Cylinders,Heads,Spt这几个参数通过这名字就能知道了。

      知道这3个参数(除了第三个),基本上就能应付大多数的了。

      下面安装模板中的参数的位置,一个一个参数介绍,由于不常用,仅仅介绍下,不会象前面纳几个参数那样详细介绍,除非我觉得特别有用,或是使用过程中用过了。

      config_interface:关于配置文件的接口,嗯,其实就是在BOCHS运行过程中改变配置的界面。

      display_library:图形库。

      Romimage:ROM BIOS

      Megs:内存

      optromimage [1-4]:ROM镜像的选项

      vgaromimage:VGA ROM BIOS

      floppya:软驱A

      floppyb:软驱B

      ata[0-3]:硬盘或光驱的ata控制器

      ATA[0-3]-MASTER, ATA[0-3]-SLAVE:ata设备的类型

      Boot:启动驱动器

      Ips:模拟的频率,有些时候特别有用,比如我装minix1.5的时候,在login的时候,如果机子高档的话,输入passwd的时间特别短,这时候就需要调整频率了。当然,听说软件如果对实时控制特别研的时候,也必须改它。

      Clock:时钟

      floppy_bootsig_check:是否检查软盘引导时候的引导的标记0xaa55

      log:调试用的日志

      logprefix:日志记录的格式

      panic:Bochs这个软件本身错误的信息,如配置文件出错或是模拟错误如不支持图形模式。

      Error:Bochs遇到不能模拟的情况,如出现非法指令。

      Info:一些不常出现的情况。

      Debug:主要用来开发Bochs这个软件时报告情况用的。

      以上四个参数(panic,error,info,debug)是Bochs运行时遇到的不同等级的情况。

      debugger_log:调试器输出错误的文件。

      com1:串行端口。

      parport1:并行端口。

      sb16:声卡。

      vga_update_interval:VGA卡刷新率。

      ne2k:网卡。

2 用bochs运行引导代码

  通过前面参数的介绍,我们来配置和运行自己写的系统引导代码,并且通过前面的介绍我们已经建立了一个叫msdos的文件夹,里面包含配置文件和软盘镜像文件。

  首先是设置floppya参数指向自己制作的包含引导代码的软盘镜像boot.img,具体配置如下:

floppya: 1_44=boot.img, status=inserted

  然后是boot参数的设置,我们直接用软盘引导,具体配置如下:

boot: floppy

  其它参数都用默认就好,然后直接双击bochsrc-sample.bxrc文件就可以运行了,如下图所示:

  可以看出引导代码的输出语句”load root directory“,表明运行成功!!!

3 用bochs调试代码

直接在bochs的安装目录中双击bochsdbg文件,然后选择加装前面我们的配置文件bochsrc-sample.bxrc,点开始就进入调试模式了,如下图所示:

  此时是暂停在BIOS中。而我们的代码是从0x7C00位置开始的,所以先要在那里设一个断点,然后继续运行到断点:

  接下来可以用命令help来查看调试系统的各种基本命令,这里给出了一些常用的命令

3.1 执行控制指令

c/cont/continue
连续执行

s/step/stepi [count]
执行count条指令,默认为1条,会跟进到函数和中断调用的内部

p/n/next [count]
执行count条指令,默认为1条,但跳过函数和中断调用

Ctrl+C
停止执行,并回到命令行提示符下

q/quit/exit
退出调试和执行

3.2 断点设置命令

vb/vbreak seg:offset
在虚拟地址上设置指令断点,其中seg和offset可以是以0x开始的十六进制数,或十进制,或者是以0开头的八进制数

lb/lbreak addr
在线性地址上设置断点,addr同上面的seg和offset

b/break/pb/pbreak addr
在物理地址上设置断点

info break
显示当前所有断点的信息

d/del/delete n
删除一个断点

3.3 内存操作指令

x /nuf addr
检查位于线性地址addr处的内存内容

xp /nuf addr
检查位于物理地址addr处的内存内容

其中参数n、u、f分别表示:

n为要显示内存单元的计数值,默认为1

u表示单元大小,默认值为w

   b(bytes)		1字节
   h(halfwords)	2字节
   w(words)		4字节
   g(giantwords)	8字节

f为显示格式,默认为x
   x(hex)         显示为十六进制数
   d(decimal)	  显示为十进制数
   u(unsigned)    显示为无符号十进制数
   o(octal)	   显示为八进制数
   t(binary)	   显示为二进制数
   c(char)  	   显示为对应的字符

3.4 信息显示和CPU寄存器操作命令

r/reg/regs/registers
列表显示CPU寄存器及其内容

set $reg=val
修改某寄存器的内容。除段寄存器和标志寄存器以外的寄存器都可以修改,如set $eax=0x01234567

creg
列出所有的CR0-CR4寄存器

sreg
列出CPU全部状态信息,包括各个段选择子(cs,ds等)以及ldtr和gdtr等。

print-stack
打印堆栈情况。

info tab
显示页表

3.5 反汇编命令

  u/disasm/disassemble start end,反汇编给定线性地址范围的指令。也可以是u /10 反汇编从当前地址开始的10条指令。如下图

  总结:bochs的调试感觉和gdb对汇编的调试很类似,所以用起来挺方便的,而且对于开发操作系统的人来说,bochs的调试功能无疑是很强大的,可以直接看到cup的执行情况,以及各个寄存器和内存单元的内容,这对于调试程序、掌握程序的运行情况是很有帮助的。

  参考:https://cms.hit.edu.cn/mod/wiki/view.php?pageid=22
http://blog.csdn.net/yxin1322/article/details/664077

VxWorks在Bochs虚拟硬盘引导失败:原理分析与调试实战 在嵌入式系统开发中,实时操作系统(RTOS)的引导与调试是核心环节。VxWorks作为经典的RTOS,其引导程序(Bootrom)通常直接与硬件交互,依赖精确的时序和状态机逻辑。当这类底层驱动在模拟器环境中运行时,常因硬件行为差异导致兼容性问题。Bochs作为指令级x86模拟器,提供了高精度的硬件模拟,是嵌入式开发中宝贵的调试工具。本文聚焦于VxWorks在Bochs虚拟ATA硬盘上引导失败的典型场景,深入剖析Bootrom驱动与模拟器在时序、状态机及初始化流程上的差异。通过结合Bochs的详细调试日志与V 阅读详情

相关推荐

使用Bochs模拟器深入理解操作系统引导过程

Bochs的配置文件功能强大,允许用户根据需要自定义模拟硬件的详细参数。例如,用户可以通过配置项指定显卡的类型,包括VGA、S3等,或者添加并配置网络接口卡(NIC)。下面是一个简单的配置示例,展示如何添加并配置一个网络适配器:# 模拟的网卡类型可以是ne2000或pcnet# 自定义的网卡配置通过这种方式,可以模拟不同的硬件设备,提高模拟环境的灵活性和可用性。调试器是一种强大的工具,它允许开发者在程序执行的每个步骤中进行控制和检查。

weixin_32306683的博客 1087

Bochs虚拟机 & 编写主引导扇区程序并执行

bochs虚拟机是一个带调试器的虚拟机 现实中专业的调试器又很多,但是它们只能调试那些符合操作系统要求的程序,而不能调试只包含处理器指令的程序 bin文件操作系统不能执行,但是处理器可以直接执行 bin文件包含的都是机器指令 ...

hxxjxw的博客 2240

GPU微架构演进分析--从SIMT到Scalar-Vector-Tensor计算的混合配比与调度

GPU架构经历了从专用计算模块到统一可编程处理器的演进。传统GPU面临专用电路配比难题,Nvidia Tesla架构通过引入可编程多线程处理器实现图形与计算的统一。Fermi架构进一步向计算倾斜,随后的架构陆续加入Tensor Core等专用单元。AI时代促成了从图形处理主导向AI计算的转变,形成了Scalar+Vector+Tensor的混合计算范式。SIMT调度重要性降低,CUDA面临新挑战,RISC-V等架构可能带来新机遇。

ChipCamp的博客---https://chipcamp.blog.csdn.net/ 910

在Linux下安装配置bochs,并成功跑一个简单的boot引导(超详细)

在Linux下安装配置bochs,并成功跑一个简单的boot引导(超详细)

weixin_42492218的博客 7711

S参数反演法

等效介质理论模型— 利用S参数反演法提取超材料结构的等效参数 等效介质理论模型—利用S参数反演法提取超材料结构的等效参数 S参数反演法,即利用等效模型的传输矩阵和S参数求解超材料结构的等效折射率n和等效阻抗Z的过程。本文对等效介质理论模型进行了详细介绍,并提供对应代码。 超材料的传输矩阵 超材料结构的传输矩阵函数为: 其中,d 为等效光学活性材料的厚度,n 为折射率,Z 表示阻抗。 S参数和传输矩阵T 超材料结构的S参数和传输矩阵T满足下列方程: 利用以上两式,可以得到等效折射率n和相对阻抗的表达式

weixin_43962864的博客 1万+

STM32项目实战_基于STM32F103的智能药箱设计与实现(硬件详解+软件逻辑+调试要点)

本文详细介绍了基于STM32F103的智能药箱设计与实现,涵盖硬件设计、软件逻辑和调试要点。项目核心功能包括精准提醒、药品管理和远程监控,采用STM32单片机作为主控,结合光电开关、蓝牙模块等实现智能化管理。文章还分享了电路图设计、程序优化及常见问题解决方案,为嵌入式开发爱好者提供实用参考。

weixin_28717683的博客 297

bochs使用手册

对于每一个尝试自己写计算机开机引导甚至是一个操作系统的人来说bochs是一个很好用的工具,强大的调试功能以及自带的制作虚拟盘的工具都是亮点。 和大多数人一样,初次接触这个工具难免会比较生疏,所以要把很常用的命令记录下来,以便查看。 本手册不定期更新。1、如何运行自己的扇区引导1)、自己写好的扇区引导用nasm编译成.bin为后缀的纯二进制文件。(nasm是一个很强大的编译工具,他可以直接把汇编源

sium__的专栏 3280

oVirt 4.4.10超详细安装指南:从零搭建企业级虚拟化环境(附常见错误排查)

本文提供了oVirt 4.4.10企业级虚拟化平台的超详细安装指南,涵盖环境规划、系统准备、Engine安装配置、计算节点部署、存储系统集成及高级运维技巧。通过实战操作手册和常见错误排查方法,帮助用户从零搭建稳定高效的虚拟化环境,特别适合企业IT管理员参考实施。

wasm7browser的博客 346

Bochs的初步使用

Bochs是一个x86硬件平台的开源模拟器。它可以模拟各种硬件的配置。Bochs模拟的是整个PC平台,包括I/O设备、内存和BIOS。 通过改变配置,可以指定使用的CPU(386、486或者586),以及内存大小等。一句话,Bochs是电脑里的“PC”。根据需要,Bochs还可以模拟多台PC。它还有自己的电源按钮。 bochs的典型应用是提供x86 PC的完整仿真,包括x86处理器、硬件设备、...

bcbobo21cn的专栏 1465

Python 爬虫实战:arXiv 学术论文 PDF 批量下载(含反爬策略与文件命名规范)

arXiv 是全球最大的免费开放预印本论文平台之一,涵盖物理学、数学、计算机科学等多个学科领域。研究人员、学生和工程师常常需要批量下载论文 PDF 进行文献综述、构建机器学习数据集或进行文本挖掘研究。然而,手动逐篇下载论文效率低下,因此开发一个自动化批量下载工具显得尤为重要。

yansideyucsdn的博客 1815

博途PLC模糊PID控制(量化因子和比例因子)

参数"量化因子和比例因子",都是为了对清晰值进行比例变换而设置的,其作用是使变量按一定比例进行放大或缩小,以便和我们的模糊论域相匹配完成一一映射。这种变换对整个系统的工作性能也是有影响的。(其实相当于额外引入了比例作用,所以说模糊PID的调节是个系统工程)。限于本人能力,文中难免出现错误和不足,欢迎大家批评和指正。博途PLC的模糊PID控制完整算法可以参看下面这篇文章博途PLC模糊PID控制详解(SCL完整源代码+参数)_RXXW_Dor的博客-CSDN博客。......

RXXW_Dor的博客 5258

使用bochs和grub建立可引导硬盘镜像

bochs,发音同box,是我非常喜欢的虚拟机,灵活易用方便配置,功能极强,用来调试Linux内核是非常合适的。这篇博文主要讲解如何建立硬盘镜像,并且将grub安装上去,最后的结果就是bochs启动后能进入到grub引导界面。下一篇博客再讲解如何在镜像上安装Linux内核。 硬盘基础知识 硬盘的专业术语中有:柱面,磁头,扇区,每磁道扇区数这几个概念。 每个盘片有两个磁头,分别位于

Linux Kernel Developer 3468

腾讯微搭低代码开发实战电子书:医疗挂号小程序

本书通过一个完整的“医疗挂号小程序”项目,深度讲解腾讯微搭(WeDa)低代码平台在复杂业务场景下的实战应用。从登录体系搭建、用户注册,到就诊人管理、科室排班与预约下单,全程遵循“配置+逻辑+实战”的思路,带领读者从零实现具备商业级可用性的医疗挂号小程序,掌握低代码开发的核心技巧与业务落地能力。

低代码布道师的博客 947

bochs调试方法与指令详解

https://blog.csdn.net/acmilanvanbasten/article/details/38852173 bochs调试FAQ: 一 基本调试命令 1.Q:如何从引导扇区开始设置断点? A: BIOS被载入内存中运行,其引导扇区的地址一般都是在0x7c00,因为在实模式下,逻辑地址和物理地址是一一对应的,所以我们可以在启动bochs调试的命令行下输入 ...

guozuofeng的博客 9851

自注意力机制(SelfAttention Mechanism)原理与代码实战案例讲解

自注意力机制(Self-Attention Mechanism)原理与代码实战案例讲解 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming 1. 背景介绍

AI天才研究院 1275

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

bochs调试操作系统,以及可引导img的制作

bochs操作系统调试,img可启动引导文件制作

m47838704的专栏 2406

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Bochs简易教程

同步更新于雪梨教育 Bochs是个啥? 简单来说bochs是一个模拟器,能够完整的模拟一台计算机。详细来讲bochs是X86硬件平台的开源模拟器,完全可以通过软件来给我们提供各种所需的硬件资源。 和bochs类似的虚拟机软件还有我们常用的VMware、Virtuabox,但区别也是明显的。bochs是完全依靠软件来模拟整个环境的:从启动到重启包括PC的外设键盘、鼠标、磁盘以及网卡等,全部都是由软件...

码匠联盟 9845

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

linux中使用bochs调试helloword引导程序

1.环境工具 ubuntu 18.04.1 nasm bochs 2.nasm安装:sudo apt-get install nasm 编译bochs依赖包的安装库:sudo apt-get install vgabios xorg-dev bochs-sdl bochs bochs-x bochsbios bochs-doc libgtk2.0-dev 下载bochs源码,http:...

weixin_30566063的博客 257

自己动手写简易操作系统之bochs的配置

Bochs(发音:box)是一个以LGPL 许可证发放的开放源代码的 x86、x86-64IBM PC 兼容机模拟器和调试工具。它支持处理器(包括保护模式)、内存、硬盘、显示器、以太网、BIOS、IBM PC 兼容机的常见硬件外设的仿真。许多客户操作系统能通过该仿真器运行,包括 DOS、Microsoft Windows 的一些版本、AmigaOS 4、SD、Linux、MorohOS、Xenix 和 Rhapsody(Mac OSX的前身)。

m0_63686543的博客 1722

在bochs上运行grub引导盘镜像文件

1、安装和配置bochs(版本号:2.3)bochs的源代码可以从其官方网站http://bochs.sourceforge.net免费下载,该网站有详尽的文档,下载的压缩包解压后也包含相同的文档。解压后进入bochs-2.3目录,里面有一个configure文件,用于配置bochs的安装。基于调试操作系统的考虑,我选择调试和反汇编选项:cd ~/bochs-2.3./configure --en

hbrqlpf的专栏 7352

bochs调试指令

bochs调试FAQ: 1.       Q:如何从引导扇区开始设置断点? A: BIOS被载入内存中运行,其引导扇区的地址一般都是在0x7c00,因为在实模式下,逻辑地址和物理地址是一一对应的,所以我们可以在启动bochs调试的命令行下输入         pb 0x7c00或者 vb 0:0x7c00 就着输入         c bochs就会在0x7c00处停下   2.

ProgrammingRing的专栏 1843
上一篇: 在linux中使用Bochs调试
下一篇: Bochs常用调试命令
guozuofeng
博客等级 码龄9年 60粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值