1. 安装软件
点击(此处)折叠或打开
- # 安装as86和ld86
- sudo apt-get install bin86
- # 安装VirtualBox
- sudo apt-get install virtualbox
- # 安装Bochs
- sudo apt-get install bochs
- # 安装Bochs-x,否则启动虚拟机时会产生下面错误信息:
- # Event type: PANIC Device: [ ] Message: dlopen failed for
- # module 'x': file not found
- sudo apt-get install bochs-x
- # 安装Bochs的另一种显示方案SDL,否则启动虚拟机时会产生下面错误信息:
- # bochs-biin: symbol lookup error:
- # /usr/lib/bochs/plugins/libbx_x.so: undefined symbol:
- # XpmCreatePixmapFromData
- # 使用SDL显示方案后,在虚拟机配置文件bochsrc中需要增加一行:
- # display_library: sdl
- sudo apt-get install bochs-sdl
2. 编写主引导程序源代码
点击(此处)折叠或打开
- BOOTSEG = 0x07c0
- entry start
- start:
- jmpi go, BOOTSEG
- go:
- mov ax, cs
- mov dx, ax
- mov es, ax
- mov [msg+17], ah
- mov cx, #20
- mov dx, #0x1004
- mov bx, #0x000c
- mov bp, #msg
- mov ax, #0x1301
- int 0x10
- loop0:
- jmp loop0
- msg:
- .ascii "Loading system..."
- .byte 0x0d, 0x0a, 0x00
- .org 510
- .word 0xaa55
3. 编译主引导程序
点击(此处)折叠或打开
- as86 -0 -o boot.o boot.s
-o选项:输出的目标文件名。
4. 链接主引导程序
点击(此处)折叠或打开
- ld86 -0 -d -s -o boot boot.o
-d选项:截去a.out格式32字节的文件头。
-s选项:移除所有符号。
-o选项:输出文件名。
5. 制作启动软盘镜像文件
点击(此处)折叠或打开
- # boot.img文件只包含主引导程序的一个扇区
- dd if=boot of=boot.img bs=512 count=1
- # 在boot.img文件第一个扇区之后追加2879个扇区,构成完整的1.44MB软盘镜像文件
- dd if=/dev/zero of=boot.img seek=1 bs=512 count=2879
6. 用VirtualBox运行主引导程序
(1) 新建一个虚拟机(2) 为虚拟机添加软盘:设置 > 存储 > 添加一个新的控制器到存储树的结尾 > 添加软盘控制器 > 添加虚拟软驱 > 选择磁盘 > 选定boot.img
(3) 设置启动顺序:单击系统 > 将软驱设置为第一个启动设备
(4) 单击”启动“按钮启动虚拟机。
7. 用Bochs运行主引导程序
(1) 编写虚拟机配置文件bochsrc点击(此处)折叠或打开
- megs: 4
- romimage: file=$BXSHARE/BIOS-bochs-latest
- vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
- floppya: 1_44=boot.img, status=inserted
- boot: floppy
- log: bochsout.txt
- mouse: enabled=0
- cpu: ips=15000000
- display_library: sdl
点击(此处)折叠或打开
- bochs -f bochsrc
8. 参考文献
[1] 《Linux内核完全剖析——基于0.12内核》[2] bochs安装一系列问题
[3] 自制操作系统:引导扇区的实现