64位操作系统设计与实现1——BootLoader引导启动程序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26822029/article/details/82752177

当你按下电源键之后,你的电脑做了哪些工作最后才启动你的操作系统的呢?

计算机上电启动之后,首先会经过BIOS上电自检,检测硬件设备是否存在问题。如果检测硬件没有问题的话,将根据BIOS的启动项配置选择引导设备,包括软盘、硬盘、U盘、网络启动。通常情况下会选择硬盘启动作为默认的启动项,但从简单和易用的角度来看,使用软盘启动最为简单。

本节参考书籍:

《一个64位操作系统的设计与实现》田宇 著

《操作系统 真象还原》郑钢 著

1.BIOS引导原理

当BIOS自检结束之后会根据启动选项的设置,去检测启动设备的0磁头0磁道1扇区(其实1扇区就是第一个扇区,命名规则和前面两个不同而已,在CHS方法中扇区的编号是从1开始的!)是否以数值0x55和0xaa两字节作为结尾。如果是,那么BOIOS就认为这个扇区是一个Boot Sector(引导扇区),然后把这个扇区的数据复制到物理内存地址0x7c00处,随后将处理器的执行权限交给这段程序(跳转到0x7c00处开始执行)。

那么在BIOS向引导程序移交执行权之前,BIOS对处理器做了什么呢?很简单,需要修改处理器的代码段寄存器CS和指令寄存器IP。因为当从BIOS跳转到引导程序时,CS和IP的值必须为0x0000和0x7c00。这样一来物理地址就是0x7c00了。

再者,因为一个1.44MB的软盘的一个扇区仅有512个字节,而其末端的0x55和0xaa已经占据了两个字节。因此引导程序的有效长度仅有510个字节。

2.写引导程序

引导程序采用Intel汇编语言格式编写,编译代码使用NASM编译器。

关于nasm编译器的安装教程看这里:NASM安装教程

首先简单的输入一个显示字符的引导程序试试水:

org	0x7c00

base_of_stack		equ	0x7c00

label_start:
	mov	ax,	cs
	mov	ds,	ax
	mov	es,	ax
	mov	ss,	ax
	mov	sp,	base_of_stack

;=====================clear screen
	mov	ax,	0600h
	mov	bx,	0700h
	mov	cx,	0
	mov	dx,	184fh
	int 10h

;=====================set focus
	mov	ax,	0200h
	mov	bx,	0000h
	mov	dx,	0000h
	int	10h

;=====================display on the screen
	mov	ax,	1301h
	mov	bx,	000fh
	mov	dx,	0000h
	mov	cx,	10
	push	ax,
	mov	ax,	ds
	mov	es,	ax
	pop	ax,
	mov	bp,	start_boot_message
	int 	10h

;=====================reset floppy
	xor	ah,	ah
	xor	dl,	dl
	int 	13h

	jmp	$

start_boot_message:	db	"Howard Wonanut"

;=====================fill zero until whole sector
	times	510 - ($- $$)	db	0
	dw	0xaa55

写好程序之后使用nasm工具编译,编译命令:nasm boot.asm -o boot.bin

3. 创建虚拟软盘镜像文件

在安装好的Bochs根目录下的bin文件夹内有一个bximage工具可以帮助我们创建虚拟软盘镜像文件。创建一个1.44M的软盘操作过程如下图:

注意:一定要使用sudo,要不然创建会失败,并提示错误“ERROR: flat file is not writable”

4. 将编译的内容写入到虚拟软盘镜像文件内。

这里使用的是dd命令:

dd if=boot.bin of=../../../Documents/bochs/boot.img bs=512 count=1 conv=notrunc

其中的if指定输入源文件名,of指定输出文件名。因此这条指令需要在编译好的引导程序文件夹执行。 

 5. 启动!

经过前面的一系列工作,现在我们的引导程序应该可以运行了。到bochs根目录输入下面的命令启动虚拟机:

bin/bochs -f ./bochsrc.disk

猜你喜欢

转载自blog.csdn.net/qq_26822029/article/details/82752177