zoukankan      html  css  js  c++  java
  • bochs使用指南

    Bochs是用C++开发的一个模拟器,模拟整个PC。它完全是靠软件模拟来实现的。从启动到重启,包括PC的外设键盘,鼠标,VGA卡,磁盘,网卡等,全部都是有软件来模拟的,因此它非常的适合开发操作系统。

    Bochs安装:

    双击安装文件,点下一步完成软件安装。

    Bochs的配置

           bochs的安装目录下为我们提供了一个配置文件的模版bochsrc-sample.txt。在配置文件中”#”为注释符号。只需复制该文件,修改相关变量即可。常用变量如下:

    #megs: 内存,以MB为单位,你可以根据自己的机器来调整

    megs: 16

    # 下面两句一般是不可以改的,表示rom镜像和vga镜像。

    romimage: file=../BIOS-bochs-latest, address=0xf0000

    vgaromimage: file=../VGABIOS-lgpl-latest

    #floppy:软盘镜像文件

    floppya: 2_88=镜像路径(如C:\test.img), status=inserted

    #floppyb: 1_44=镜像路径(如C:\test.img), status=inserted

    # 下面是硬盘,很简单,还有就是BOCHS也是可以支持多个硬盘的。那么,硬盘文件是怎么生成的呢?我们可以发现硬盘是 img格式的。你注意没有在BOCHS文件夹里有一个工具叫 bximage.exe,他就是用来生成这个硬盘 文件的工具。

    ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14

    ata0-master: type=disk, path="dos.img", cylinders=306, heads=4, spt=17

    # 下面这个就是光驱,如果你想使用物理光驱,只要让path=E:(我们假设E盘是光驱)

    ata0-slave: type=cdrom, path="dos.iso", status=inserted

    # boot:这个是启动设备,可以使用cdrom(光驱)、c(硬盘)或floppy(软驱)。

    #boot: cdrom  (表示从光驱启动)

    boot: c         (表示从C盘启动)

    #boot: floppy  (表示从软盘启动)

    # 这一句可以不要,他只是指定用来保存日志的文件。如果不指定的话他就会输出到命令控制台上。

    log: bochsout.txt

    # 这一句是设置在开机时是否激活鼠标,BOCHS对于鼠标的控制不是# 很好。建议如果不是特别需要的话不要激活他。在运行期间也可以点窗口右上角的鼠标图标来激活他。

    mouse: enabled=0

    启动BOCHS

    配置好配置文件后,将文件后缀改为.bxrc。双击即可启动软件了。

    调试功能

    双击安装目录下的bochsdbg.exe,点击加载按钮,选择配置文件,即可进行调试。

    常用调试命令如下:

    help:显示帮助文档。

    c:继续,前面我们已经用过了。

    s:单步执行。他还有一个扩展用法。

    s n :执行n步。

    b 0x7c00:在内存0x7c00处设置一个断点.当程序执行到0x7c00处就自动进入到调试状态.后面的这个数指的是内存的线性地址。

    x /20 0x7c00: 以16进制的形式从内存的0x7c00开始显示20个字的数据

    dump_cpu:显示现在的寄存器的状态

    u /20 0x7c00 :反汇编内存0x7c00处,反汇编的长度是20

     

    以上是在网上很容易就能找到的使用指南,但是我在使用的过程中遇到了一些小问题,在此记下这些小问题,以备忘

     1、romimage: file=../BIOS-bochs-latest, address=0xf0000  首先是这条,在运行bochs是跳出一个窗口提示mem0在什么#0ffff什么什么结束的,后来在网上查到说是因为在2.2.5以前的版本,Bochs的BIOS大小为64K,需要指定起始地址为0xf0000。之后的版本可支持512K的BIOS镜像。现在默认用的BIOS-bochs-latest的好像是128K(官方说法),我看了一下是132K。反正不需要指定起始地址了。而我装的是2.6版本,果断吧0xf0000删了,运行成功。

     2、在调试的时候输入dump_cpu提示出错,好吧,继续上网找问题,原因如下:

      bochs 2.3.5 以上的版本好像就没有dump_cpu了,你可以试试 下面的命令 组合他们

    代码:
    r
    fp
    mmx
    sse
    dreg
    sreg
    creg

    附一个我电脑上运行成功的bochsrc.bxrc

    ###############################################################
    # bochsrc.bxrc file for Tinix.
    ###############################################################
    
    # how much memory the emulated machine will have
    megs: 32
    
    # filename of ROM images
    romimage: file=$BXSHARE/BIOS-bochs-latest
    vgaromimage: file=$BXSHARE/VGABIOS-elpin-2.40
    
    # what disk images will be used 
    floppya: 1_44=Tinix.vfd, status=inserted
    
    # choose the boot disk.
    boot: a
    
    # where do we send log messages?
    log: bochsout.txt
    
    # disable the mouse, since Tinix is text only
    mouse: enabled=0
    
    # enable key mapping, using US layout as default.
    keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-us.map
     
  • 相关阅读:
    转发和重定向的区别
    描述Session跟Cookie的区别(重要)
    JSP的4大域对象
    描述JSP的9大内置对象(不重要)
    描述JSP和Servlet的区别
    Pytest系列(16)- 分布式测试插件之pytest-xdist的详细使用
    Pytest系列(15)- 多重校验插件之pytest-assume的详细使用
    Pytest系列(14)- 配置文件pytest.ini的详细使用
    Pytest系列(13)- 重复执行用例插件之pytest-repeat的详细使用
    Pytest系列(12)- 测试结果生成HTML报告插件之pytest-html的详细使用
  • 原文地址:https://www.cnblogs.com/starlitnext/p/2975509.html
Copyright © 2011-2022 走看看