Open source Bochs virtual machine installation and stepped pit

Because you want to write a simple operating system, you need to install the virtual machine to emulate the hardware, VMware does not fit this scenario, because it will use hardware-level virtualization, and bochs open source virtual machine, with all the hardware virtualization software so debugging can be done very fine particle size, such as cpu execute each command, we can pause, look at the state register, see memory status, which for the development and debugging of the operating system to help too much. Bochs so we use this virtual machine.

mac installation bochs

My current environment is the Mac version 10.15.3, recording under the installation and stepped pit.

step:

  • Install sdl library, subsequent compilation will be used
brew install sdl
  • Download and unzip the source code

Download: https://sourceforge.net/projects/bochs/files/latest/download

# 下载解压
tar -xvf bochs-2.6.tar.gz
# configure 所需要的参数

./configure --enable-ne2000 \
            --enable-all-optimizations \
            --enable-cpu-level=6 \
            --enable-x86-64 \
            --enable-vmx=2 \
            --enable-pci \
            --enable-usb \
            --enable-usb-ohci \
            --enable-e1000 \
            --enable-debugger \
            --enable-disasm \
            --disable-debugger-gui \
            --with-sdl \
            --prefix=$HOME/opt/bochs

Here the prefix parameter specifies the location of the installation, modification to the address you want.

Here appeared the first question:

Question 1

Report this error

cdrom_osx.cc:194:18: error: assigning to 'char ' from incompatible type 'const ch

So the Internet search a bit, given that there is a patch [ https://raw.githubusercontent.com/Homebrew/formula-patches/e9b520dd4c/bochs/xcode9.patch ], we find this file and modify the source code, in this file bochs-2.6/iodev/hdimage/cdrom_osx.cc, we open the modify line 193

if ((devname = strrchr(devpath, '/')) != NULL) {
改为:
if ((devname = (char *) strrchr(devpath, '/')) != NULL) {

The problem is solved, we then compile.

make && make install

Question two

This time the report was wrong

config.cc:3261:55: error: ordered comparison between pointer and zero ('char *' and 'int')
    if (SIM->get_param_string("model", base)->getptr()>0) {
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
1 error generated.

We open config.cc, find the line 3621, as modified

修改config.cc的3621行
if (SIM->get_param_string("model", base)->getptr()>0) {
为
if (SIM->get_param_string("model", base)->getptr()>(char *)0) {

It can be.

We then compiled again

make && make install

At this point you can normally compile successfully.

We can join bochs environment variables for use:

export BXSHARE="$HOME/workplace/os/bochs/share/bochs"
export PATH="$PATH:$HOME/workplace/os/bochs/bin"

Bochs use

bochs under the installation directory bochs/share/doc/bochs/bochsrc-sample.txtis a template configuration file. Write ourselves a simple configuration file to run:

# 设置虚拟机内存为32MB
megs: 32

# 设置BIOS镜像
romimage: file=$BXSHARE/BIOS-bochs-latest 

# 设置VGA BIOS镜像
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest

# 设置从硬盘启动
boot: disk

# 设置日志文件
log: bochsout.txt

# 关闭鼠标
mouse: enabled=0

# 打开键盘
keyboard: type=mf, serial_delay=250

# 设置硬盘
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14

# 添加gdb远程调试支持
gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0

Save as bochsrc. In this directory run command:

➜  my_src git:(master) ✗ bochs
========================================================================
                        Bochs x86 Emulator 2.6
            Built from SVN snapshot on September 2nd, 2012
                  Compiled on Feb 11 2020 at 14:52:19
========================================================================
00000000000i[     ] reading configuration from bochsrc
00000000000p[     ] >>PANIC<< bochsrc:26: Bochs is not compiled with gdbstub support
========================================================================
Bochs is exiting with the following message:
[     ] bochsrc:26: Bochs is not compiled with gdbstub support
========================================================================
00000000000i[CPU0 ] CPU is in real mode (active)
00000000000i[CPU0 ] CS.mode = 16 bit
00000000000i[CPU0 ] SS.mode = 16 bit
00000000000i[CPU0 ] EFER   = 0x00000000
00000000000i[CPU0 ] | EAX=00000000  EBX=00000000  ECX=00000000  EDX=00000000
00000000000i[CPU0 ] | ESP=00000000  EBP=00000000  ESI=00000000  EDI=00000000
00000000000i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df if tf sf ZF af PF cf
00000000000i[CPU0 ] | SEG sltr(index|ti|rpl)     base    limit G D
00000000000i[CPU0 ] |  CS:0000( 0000| 0|  0) 00000000 00000000 0 0
00000000000i[CPU0 ] |  DS:0000( 0000| 0|  0) 00000000 00000000 0 0
00000000000i[CPU0 ] |  SS:0000( 0000| 0|  0) 00000000 00000000 0 0
00000000000i[CPU0 ] |  ES:0000( 0000| 0|  0) 00000000 00000000 0 0
00000000000i[CPU0 ] |  FS:0000( 0000| 0|  0) 00000000 00000000 0 0
00000000000i[CPU0 ] |  GS:0000( 0000| 0|  0) 00000000 00000000 0 0
00000000000i[CPU0 ] | EIP=00000000 (00000000)
00000000000i[CPU0 ] | CR0=0x00000000 CR2=0x00000000
00000000000i[CPU0 ] | CR3=0x00000000 CR4=0x00000000
bx_dbg_read_linear: physical memory read error (phy=0x0000000000000000, lin=0x0000000000000000)
00000000000i[CTRL ] quit_sim called with exit code 1

At this point we have successfully run a virtual machine.

Analog hard disk

bochs provides a tool to create a virtual hard disk bximage, provides an interactive way to create a virtual hard disk, we do it:

➜  my_src git:(master) ✗ bximage
========================================================================
                                bximage
                  Disk Image Creation Tool for Bochs
          $Id: bximage.c 11315 2012-08-05 18:13:38Z vruppert $
========================================================================

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 8257535
[10] 10 // 10MB大小硬盘

I will create a 'flat' hard disk image with
  cyl=20
  heads=16
  sectors per track=63
  total sectors=20160
  total size=9.84 megabytes

What should I name the image?
[c.img] hd10m.img   // 名称

Writing: [] Done.

I wrote 10321920 bytes to hd10m.img.

The following line should appear in your bochsrc:
  ata0-master: type=disk, path="hd10m.img", mode=flat, cylinders=20, heads=16, spt=63
➜  my_src git:(master) ✗ ls
bochsrc   hd10m.img

Well, environment configuration is over, then we will start to learn how to write information.

Welcome to my blog and GitHub ( https://github.com/veeupup )!

Guess you like

Origin www.cnblogs.com/veeupup/p/12295589.html