在Mac中安装bochs以及遇到的问题

1. 安装bochs和sdl

在Mac上,使用brew安装Bochs虚拟机,以及Bochs虚拟机需要使用到的展示平台sdl

brew install bochs
brew install sdl
复制代码

2. 创建软盘

在安装bochs时,还会自动安装一些辅助工具,其中包括虚拟磁盘镜像创建工具bximage

  • 使用bximage命令直接创建磁盘镜像,选择1创建磁盘
  • 输入fd,表示创建软盘
  • 选择软盘的大小,默认的1.44M就可以了
  • 输入镜像的名称,可以使用默认的镜像名a.img,也可以自定义名称boot.img,只要能跟配置文件中的名称对应即可

Screen Shot 2022-03-17 at 8.04.35 PM.png

3. 编写Boot引导程序

创建一个boot.asm文件,编写如下代码

    org 07c00h                   ; 告诉编译器程序加载到7c00处
    mov ax,cs                      
    mov ds,ax
    mov es,ax
    call DispStr                 ; 调用显示字符串例程
    jmp $
DispStr:
    mov ax,BootMessage
    mov bp,ax                    ; es:bp = 串地址
    mov cx,16                    ; cx = 串长度
    mov ax,01301h                ; ah = 13,al = 01h
    mov bx,000ch                 ; 页号为0(bh=0) 黑底红字(b1=0ch,高亮)
    mov dl,0
    int 10h                      ; 10h号中断
    ret
BootMessage:  db  "Hello,OS world!"
times 510-($-$$)  db  0      ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55                    ; 结束标志
复制代码

4. 编译程序,写入软盘

首先,使用NASM编译器进行程序编译,生成“操作系统”的二进制代码。如果没有nasm,依然使用brew进行安装

brew install nasm

nasm boot.asm -o boot.bin
复制代码

编译结束后,将生成的二进制程序boot.bin写入到boot.img

使用系统自带的dd命令,把Boot程序强制写入到虚拟软盘的固定扇区中

dd if=boot.bin of=boot.img bs=512 count=1 conv=notrunc
复制代码

在这行命令中,if指定输入源文件名,of指定输出文件名,count=1指定传输的块大小为512Bconv=notrunc规定在写入数据后不截断输出文件的尺寸大小。以下为该命令的执行日志信息:
image.png

5. 配置启动信息

创建bochsrc文件,写入如下配置。在启动Bochs时,出现问题,一般都是配置的原因

# configuration file generated by Bochs
plugin_ctrl: unmapped=1, biosdev=1, speaker=1, extfpuirq=1, parallel=1, serial=1, iodebug=1
config_interface: textconfig
display_library: sdl2
memory: host=2048, guest=2048
romimage: file="/usr/local/share/bochs/BIOS-bochs-latest"
vgaromimage: file="/usr/local/share/bochs/VGABIOS-lgpl-latest"
boot: floppy
floppy_bootsig_check: disabled=0
floppya: type=1_44, 1_44="a.img", status=inserted, write_protected=0
# no floppyb
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=none
ata0-slave: type=none
ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata1-master: type=none
ata1-slave: type=none
ata2: enabled=0
ata3: enabled=0
pci: enabled=1, chipset=i440fx
vga: extension=vbe, update_freq=5

cpuid: x86_64=1,level=6, mmx=1, sep=1, simd=avx512, aes=1, movbe=1, xsave=1,apic=x2apic,sha=1,movbe=1,adx=1,xsaveopt=1,avx_f16c=1,avx_fma=1,bmi=bmi2,1g_pages=1,pcid=1,fsgsbase=1,smep=1,smap=1,mwait=1,vmx=1
cpuid: family=6, model=0x1a, stepping=5, vendor_string="GenuineIntel", brand_string="Intel(R) Core(TM) i7-3770 CPU (Haswell)"

print_timestamps: enabled=0
debugger_log: -
magic_break: enabled=0
port_e9_hack: enabled=0
private_colormap: enabled=0
clock: sync=none, time0=local, rtc_sync=0
# no cmosimage
# no loader
log: -
logprefix: %t%e%d
debug: action=ignore
info: action=report
error: action=report
panic: action=ask
keyboard: type=mf, serial_delay=250, paste_delay=100000, user_shortcut=none
mouse: type=ps2, enabled=0, toggle=ctrl+mbutton
speaker: enabled=1, mode=system
parport1: enabled=1, file=none
parport2: enabled=0
com1: enabled=1, mode=null
com2: enabled=0
com3: enabled=0
com4: enabled=0

megs: 148
复制代码

6. 启动Bochs

输入启动命令

bochs -f bochsrc
复制代码

如果运行顺利,当Bochs虚拟机启动后,将会在终端中显示一下7个文字选项,默认回车选择6
image.png
现在虚拟机刚启动,它只完成了硬件平台的初始化,还为执行引导程序。在出现<bochs:1>后输入字符串c或者cont或者continue,即可使虚拟机运行。

引导程序的运行效果如下所示:

image.png

整体项目结构为:

- bochs
    - boot.img
    - bochsrc
    - boot.asm
    - boot.bin
复制代码

常见问题

  1. [HD    ] ata0-0: could not open hard drive image file '30M.sample'
    这是配置问题,如果使用了从bochsrc-sample.txt拷贝过来的配置,其中有一项默认配置ata0-master,将该配置注释掉,换成ata0-master: type=none

image.png

  1. sound或者speaker配置有误,将这两个的配置注释掉

image.png

image.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享