当前位置:   article > 正文

linux主引导程序代码,用as86编写主引导程序

event type: panic device: [ ] message: dlopen failed for module 'x' (libbx_x

实验环境: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

d9d0a569a9b1954d03fe4c031d9f4ac3.png

(3) 设置启动顺序:单击系统 > 将软驱设置为第一个启动设备

f490f376e89572adffaa3b6518212032.png

(4) 单击”启动“按钮启动虚拟机。

f0ee04fbe4795031640f669e41a32860.png

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

运行效果如下图所示:

287b9e3df7dc6143a8098e4e859b4d8d.png

8. 参考文献

[1]《Linux内核完全剖析——基于0.12内核》

[2]bochs安装一系列问题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/346619
推荐阅读
相关标签
  

闽ICP备14008679号