zoukankan      html  css  js  c++  java
  • (转)如何在Linux上使用Bochs

    作者:王聪

    http://wangcong.org/articles/bochs.html

    引言

        最近在做操作系统方面的研究,不得不去下一个虚拟机 来用。由于我不使用Windows,所以选择很少了。因为在Linux上,差不多就只有两款好的 虚拟机——Bochs和Qemu。这两个之中,Bochs是用C++编写,能在很多平台上使用,而且不论什么平台, 它都不倚赖主机的指令系统,总是模拟x86。所以我选择了Bochs。但是,我惊讶地发现 关于如何在Linux上使用Bochs的资料很少。Bochs自带的文档中讲得也不很明确,而且还 是英文的。所以我写了这篇文章。

    安装

        到Bochs的主页: http://bochs.sourceforge.net 上下载最新的Bochs RPM安装包。(写这篇文章时,最新的版本是2.2.1。)以root的身份安装:

    #rpm -ivh bochs-2.2.1-1.i586.rpm
    其实RPM安装包给你装上了四个新程序:bochs,bochs-dlx,bximage,bxcommit, 以及相关文档。安装完毕后,你可以先试试bochs-dlx,它是DLX Linux的一个demo。
    $ bochs-dlx
    ---------------------------------------------------------------
                DLX Linux Demo, for Bochs x86 Emulator
    ---------------------------------------------------------------
    Checking for bochs binary...ok
    Checking for DLX linux directory...ok
    Checking for /usr/bin/gzip...ok
    Checking for /home/wangcong/.bochsdlx directory...ok
    Entering /home/wangcong/.bochsdlx
    Running bochs
    00000000000i[APIC?] local apic in initializing
    ========================================================================
                            Bochs x86 Emulator 2.2.1
                    Build from CVS snapshot on July 8, 2005
    ========================================================================
    00000000000i[ ] LTDL_LIBRARY_PATH not set. using compile time default '/usr/lib/bochs/plugins'
    00000000000i[ ] BXSHARE not set. using compile time default '/usr/share/bochs'
    00000000000i[ ] reading configuration from bochsrc.txt
    00000000000i[ ] lt_dlhandle is 0x8bac490
    00000000000i[PLGIN] loaded plugin libbx_x.la
    00000000000i[ ] installing x module as the Bochs GUI
    00000000000i[ ] using log file bochsout.txt
    马上,你就会看到一个X11窗口。

    显示的是VGA BIOS信息,然后是加载Linux的信息。以root身份登录,试试DLX Linux。安装成功。

    使用

        下面是一些重要的文件:

    /usr/bin/bochs
    Bochs启动程序

    /usr/bin/bximage
    Bochs带的制作磁盘镜像文件的工具

    /usr/bin/bxcommit
    把redolog放进flat磁盘镜像文件中去的交互工具

    /usr/share/doc/bochs/bochsrc-sample.txt
    Bochs配置文件的例子

    /usr/share/bochs/BIOS-bochs-*
    ROM BIOS镜像文件

    /usr/share/bochs/VGABIOS-*
    与VGA BIOS镜像文件相关的文件

    /usr/bin/bochs-dlx
    启动Bochs中DLX linux的程序

    /usr/share/bochs/dlxlinux/
    DLX Linux的目录,包含它的磁盘镜像文件和配置文件

    /usr/share/bochs/keymaps/*.map
    X11和SDL的keymap列表

        命令bohcs可以接受4个参数:-q 加载配置文件后跳过开始菜单;-f configfile 识别指定的配制文件;-n 不加载配置文件;-h 打印帮助信息;-qf configfile 相当于同时使用-q和-f两个选项。使用Bochs,你必须有一个配置文件,或者你通 过-f参数指定,或者让Bochs自己搜索。配置文件的作用是告诉Bochs到哪里寻找镜像 文件,模拟层如何工作等。Bochs搜索配置文件的顺序是:

    1. .bochsrc 在当前目录中</TT CLASS="FILENAME">

    2. bochsrc 在当前目录中

    3. bochsrc.txt 在当前目录中</TT CLASS="FILENAME">

    4. .bochsrc 在用户的主目录中

    5. bochsrc/etc 目录中

    6. 以dlx-linux的配置文件为例,讲一下如何定制你需要的配置文件。dlx-linux的 配置文件是/usr/share/doc/bochs目录中的bochsrc-sample.txt。它的内容 如下:
      ###############################################################
      # bochsrc.txt file for DLX Linux disk image.
      ###############################################################
      # how much memory the emulated machine will have
      megs: 32
      # filename of ROM images
      romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000
      vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
      # what disk images will be used
      floppya: 1_44=floppya.img, status=inserted
      floppyb: 1_44=floppyb.img, status=inserted
      # hard disk
      ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
      ata0-master: type=disk, path="hd10meg.img", cylinders=306, heads=4, spt=17
      # choose the boot disk.
      boot: c
      # default config interface is textconfig.
      #config_interface: textconfig
      #config_interface: wx
      #display_library: x
      # other choices: win32 sdl wx carbon amigaos beos macintosh nogui rfb term svga
      # where do we send log messages?
      log: bochsout.txt
      # disable the mouse, since DLX is text only
      mouse: enabled=0
      # enable key mapping, using US layout as default.
      #
      # NOTE: In Bochs 1.4, keyboard mapping is only 100% implemented on X windows.
      # However, the key mapping tables are used in the paste function, so
      # in the DLX Linux example I'm enabling keyboard_mapping so that paste
      # will work. Cut&Paste is currently implemented on win32 and X windows only.
      keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-us.map
      #keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-fr.map
      #keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-de.map
      #keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-es.map

      以#开头的每一行都是注释。注释写得很明白。

      megs: 32
      指明想要模拟32M的内存。注意:后面的数字最大为2048,但是因为主机系统的限制,在 大多数系统上,Bochs甚至不能支持1024M。
      romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000
      指明ROM的镜像文件在哪,开机时ROM BIOS被加载到哪里。$BXSHARE是环境变量,指明 Bochs的share目录,在Linux上为/usr/share/bochs。这一般不用改动。下面的vgaromimage 指明VGA ROM的镜像文件位置。
      floppya: 1_44=floppya.img, status=inserted
      floppyb: 1_44=floppyb.img, status=inserted
      floppya是第一软驱,floppyb是第二软驱。后面标明的是软驱镜像文件的位置,软盘 是否插入。可以根据你的需要做适当的修改。
      ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
      ata0-master: type=disk, path="hd10meg.img", cylinders=306, heads=4, spt=17
      打开ata0通道,另外还有ata1,ata2,ata3。对于每一个通道,都必须指明两个IO地址和IRQ。 ata0是默认被打开的,它的ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14。ata0-master 是主ata0通道,后面指明它附带的设备是硬盘,硬盘镜像文件路径,硬盘柱面数,磁头数等参数。
      boot: c
      指明启动次序,可以是cdrom,floppy,disk。不过由于历史的原因a和c也能被接受。 也可以这样来写:
      boot: cdrom, floppy, disk
      mouse: enabled=0
      指明鼠标是否可见。
      keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-us.map
      打开对虚拟US键盘的重映射,keymap必须被指明。
          更多的配置文件选项说明见/usr/share/doc/bochs/user/bochsrc.html。 如何编写键盘的keymap列表见/usr/share/doc/bochs/user/keymap.html。

      制作磁盘镜像

          bximage是Bochs自带的制作磁盘镜像的工具,具有 良好的交互性,使用很方便。运行bximage,你会看到:

      ========================================================================
                                      bximage
                        Disk Image Creation Tool for Bochs
            $Id: bximage.c,v 1.25.2.1 2005/07/06 20:40:00 vruppert Exp $
      ========================================================================
      Do you want to create a floppy disk image or a hard disk image?
      Please type hd or fd. [hd]
      询问我们是建立一个软盘镜像还是硬盘镜像,默认的是硬盘。我们直接按回车,选择硬盘 镜像。
      What kind of image should I create?
      Please type flat, sparse or growing. [flat]
      我们想建立一个简单的镜像,选择默认的flat。回车。
      Enter the hard disk size in megabytes, between 1 and 32255
      [10]
      想要多少Mbyte的大小?键入你想要的大小。
      I will create a 'flat' hard disk image with
        cyl=2
        heads=16
        sectors per track=63
        total sectors=2016
        total size=0.98 megabytes
      What should I name the image?
      [c.img]
      在上一步中输入“1”后,显示相关的硬盘信息。询问想要什么镜像文件名字?默认的是 c.img。输入hd.img回车。
      Writing: [] Done.
      I wrote 1032192 bytes to hd.img.
      The following line should appear in your bochsrc:
        ata0-master: type=disk, path="hd.img", mode=flat, cylinders=2, heads=16, spt=63
      建立完毕。然后你就可以使用这个镜像,用Bochs做实验了。

          另外Bochs还有强大的调试功能,详细请参阅用户 手册第8章。Bochs主页上还有一些做好的系统镜像,比如:OpenBSD,FreeDOS等。 不妨下载一个来试试。 Bochs的确是一款优秀的工具,我推荐给每一位做操作系统研究的朋友。

  • 相关阅读:
    bug的生命周期
    性能测试的流程
    通过画因果图来写测试用例的步骤为___、___、___、___及把因果图转换为状态图共五个步骤。&#160;利用因果图生成测试用例的基本步骤是:
    集成测试中自顶向下集成和自底向上集成两个策略的理解,要谈出它们各自的优缺点和主要适应于哪种类型测试;
    Spring中的八大设计模式
    ssh
    window实用快捷键-win篇
    解决Chrome浏览器“崩溃啦”的问题!
    C语言-格式输出
    AIDA64+RemotePanel 组副屏电脑状态监视器 旧手机废物利用 wifi/数据线 adb驱动
  • 原文地址:https://www.cnblogs.com/kuainiao/p/2825981.html
Copyright © 2011-2022 走看看