Mac安装bochs指南¶
安装bochs¶
创建软盘¶
在安装bochs时,还会自动安装一些辅助工具,其中包括虚拟磁盘镜像创建工具bximage。
- 使用bximage命令直接创建磁盘镜像,选择1创建磁盘
- 输入fd,表示创建软盘
- 选择软盘的大小,默认的1.44M就可以了
- 输入镜像的名称,可以使用默认的镜像名a.img,也可以自定义名称boot.img,只要能跟配置文件中的名称对应即可
编写Boot引导程序¶
创建一个boot.asm文件,编写如下代码:
org 7c00h; 告诉编译器程序加载到7c00处
mov ax, cs
mov ds, ax
mov es, ax
call DispStr; 调用显示字符串例程
jmp $; 无限循环
DispStr:
mov ax, BootMessage
mov bp, ax; ES:BP = 字符串地址
mov cx, 10; CX = 字符串长度
mov ax, 1301h; AH = 13h, AL = 01h
mov bx, 0002h; BH = 00 页号为0, BL =02 黑底绿字,高亮
mov dl, 0
int 10h; 10h号中断
ret
BootMessage db "Hello, OS!"
times 510 - ($-$$) db 0; times是重复指令,该语句含义是重复执行db 0指令510-($-$$)次
dw 0xaa55; bootloader magic number
编译程序,写入软盘¶
首先,使用NASM编译器进行程序编译,生成“操作系统”的二进制代码。如果没有nasm,依然使用brew进行安装:
编译结束后,将生成的二进制程序boot.bin写入到boot.img中。使用系统自带的dd命令,把Boot程序强制写入到虚拟软盘的固定扇区中:
在这行命令中,if指定输入源文件名,of指定输出文件名,count=1指定传输的块大小为512B,conv=notrunc规定在写入数据后不截断输出文件的尺寸大小。
配置启动信息¶
配置BXSHARE环境变量¶
BXSHARE环境会用到启动的配置文件中,我们配置下:
从bochs的安装包中的示例文件bochsrc-sample.txt拷贝一份创建bochsrc.txt,做如下修改:
#图形模式设置,这两个一起开启
magic_break: enabled=1
display_library: sdl2
#bios 和 vga bios
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
#1.44=磁盘镜像位置 boot.img 跟刚才创建磁盘时的磁盘名字保持一致
floppya: 1_44=boot.img, status=inserted
#从软盘启动
boot: floppy
#输出日志
log: bochsout.txt
#置鼠标不可用
mouse: enabled=0
#键盘配置
keyboard: keymap=#$BXSHARE/keymaps/x11-pc-us.map
#内存容量
megs: 32
#注释掉下面这两个
#sound: driver=default, waveout=/dev/dsp. wavein=, midiout=
#ata0-master: type=disk, mode=flat, path="30M.sample"
启动bochs¶
然后选择以什么方式启动,这里默认就行,即选择模拟器:
在虚拟机刚启动,它只完成了硬件平台的初始化,还为执行引导程序。在出现
引导程序的运行效果如下所示:
注意boot.img需要放在当前目录下,要不然bochs找不到。
附1. Bochs调试命令¶
指令 | 说明 | 举例 |
---|---|---|
b address | 在某物理地址上设置断点 | b 0x7c00 |
C | 继续执行,直到遇到断点 | C |
S | 单步执行 | S |
info cpu | 查看寄存器信息 | info cpu |
r | 查看寄存器信息 | r |
sreg | 查看寄存器信息 | sreg |
creg | 查看寄存器信息 | creg |
Xp /nuf addr | 查看内存物理地址内容 | xp /10bx 0x100000 |
X /nuf addr | 查看线性地址内容 | X /40wd 0x90000 |
u start end | 反汇编一段内存 | u 0x100000 0x100010 |
注: - n代表显示单元个数; - u代表显示单元大小[b:Byte、 h: Word、 w: DWord、 g:Qwrod(四字节)]; - f代表显示格式(x:十六进制、d:十进制、七:二进制、c:字符)。
附2. 安装和启动qemu¶
安装qemu:¶
启动 img 镜像:¶
参数解释: - -L:设置 BIOS、VGA BIOS、keymaps 的目录。 - -m:设置客户机的内存。 - -rtc:设置时间。 - -vga:显示器相关。 - -hda:指定镜像的路径,最好是绝对路径,使用绝对路径麻烦相对少一些。
使用示例:
qemu-system-i386 -L /opt/homebrew/Cellar/bochs/2.7/share/bochs -m 32m -rtc base=localtime -vga std -hda /opt/homebrew/Cellar/bochs/2.7/bin/boot.img