赞
踩
实验环境:Ubuntn 14.04、bin86-0.16.17、VirtualBox-4.3.34、Bochs-2.4.6
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:
movax, cs
movdx, ax
moves, ax
mov[msg+17], ah
movcx,#20
movdx,#0x1004
movbx,#0x000c
movbp,#msg
movax,#0x1301
int0x10
loop0:
jmploop0
msg:
.ascii"Loading system..."
.byte0x0d,0x0a,0x00
.org510
.word0xaa55
该程序的作用是在屏幕上用红色显示字符串“Loading system...”。源代码中没有分段,所有代码和数据存放在一个段中。entry指令用于指定程序的入口指令,这里不是必须的,只是为了消除链接器ld86报告错误信息。注意,不要用Emacs编辑源代码,否则as86可能会产生错误信息。
3. 编译主引导程序
点击(此处)折叠或打开
as86 -0 -o boot.o boot.s
-0选项:生成16位代码。
-o选项:输出的目标文件名。
4. 链接主引导程序
点击(此处)折叠或打开
ld86-0-d-s-o boot boot.o
-0选项:生成具有16位魔数的文件头。
-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
(2) 启动虚拟机
点击(此处)折叠或打开
bochs -f bochsrc
运行效果如下图所示:
8. 参考文献
[1]《Linux内核完全剖析——基于0.12内核》
[2]bochs安装一系列问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。