栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

BootLoader引导启动程序

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

BootLoader引导启动程序

BootLoader引导启动程序

Boot引导程序

BIOS引导原理写一个Boot引导程序创建虚拟机软盘镜像在Bochs上运行Boot程序
BootLoader引导启动程序原本由Boot引导程序和Loader引导加载程序两部分构成。Boot引导程序主要负责开机启动和加载Loader程序;Loader引导加载程序则用于完成配置和硬件工作环境、引导加载内核等任务。

Boot引导程序

计算机上电后,首先经过BIOS上电自检,这个过程会检测硬件设备是否有问题。如果检测没有问题的话,将根据BIOS的启动项配置选择引导设备,目前支持从硬盘,软盘,U盘,网络启动,通常情况下会选择硬盘作为默认启动项。

BIOS引导原理

选择了启动设备后,会检测相应启动设备的第0磁头第0磁道第一个扇区是否以数值0x55和0xaa两个字节作为结尾。如果是,BIOS就认为这个扇区是一个引导扇区,会把此扇区的数据复制到物理内存0x7c00处,然后将处理器的执行权移交给这段程序。

由于磁盘的一个扇区只有512B所以是无法容纳一个操作系统的,所以Boot引导程序将功能更强大的引导加载程序Loader装载内存中,一旦Loader引导加载程序开始执行,一切都会交给我们编写的软件来控制,可以看作是硬件设备向软件移交控制权。

写一个Boot引导程序

寄存器初始化部分。

org	0x7c00;org指令将程序的起始地址设置为0x7c00,因为BIOS会加载引导程序至此处
baseOfStack	equ	0x7c00
Label_Start:

	mov	ax,	cs
	mov	ds,	ax
	mov	es,	ax
	mov	ss,	ax
	mov	sp,	baseOfStack;初始化代码段,数据段,扩展段,堆栈段以及栈指针

通过BIOS中断服务程序INT 10h实现屏幕信息显示相关操作。

;=======	clear screen

	mov	ax,	0600h;int 10h,ah=06h,al=0实现清屏功能
	mov	bx,	0700h;al=0,bx的值不生效
	mov	cx,	0;al=0,cx的值不生效
	mov	dx,	0184fh;al=0,dx的值不生效
	int	10h

;=======	set focus

	mov	ax,	0200h;int 10h,ah=02h,设置屏幕光标位置
	mov	bx,	0000h;页码
	mov	dx,	0000h;将光标设置到屏幕左上角(0,0)处
	int	10h

;=======	display on screen : Start Booting......

	mov	ax,	1301h;int 10h,ah=13h,al=01h,显示字符串,光标移动至字符串尾端位置
	mov	bx,	000fh;设置字符显示属性,白字,黑底,高亮,不闪烁
	mov	dx,	0000h;从(0,0)处开始显示
	mov	cx,	10;要显示的字符串的长度
	push	ax;保存ax寄存器
	mov	ax,	ds
	mov	es,	ax;设置要显示的字符串的段基址
	pop	ax
	mov	bp,	StartBootMessage;设置要显示的字符串的偏移地址
	int	10h

定义一个字符串和引导程序的结束标识数据。

StartBootMessage:	db	"Start Boot"
;=======	fill zero until whole sector

	times	510 - ($ - $$)	db	0
	dw	0xaa55;引导扇区标识
创建虚拟机软盘镜像

安装好Bochs虚拟机源码后,会生成磁盘镜像创建工具bximage。可以使用bximage命令创建虚拟软盘镜像文件。使用bximage根据提示创建一个名为boot.img,大小为1.44MB的软盘。

在Bochs上运行Boot程序

使用nasm命令将boot.asm源文件编译成二进制文件。

nasm boot.asm -o boot.bin

将编译好的二进制文件写入虚拟软盘镜像文件内。使用dd命令将引导程序强制写入虚拟软盘的固定扇区,这种方式可以绕过文件系统的管理和控制,直接操作磁盘扇区。

# 书上原本没有第1条命令,如果没有第一条命令后面会因为磁盘空间不足而复制loder程序失败
dd if=/dev/zero of=./bochs-2.6.8/boot.img count=204
dd if=boot.bin of=./bochs-2.6.8/boot.img count=1 bs=512 conv=notrunc

使用bochs -f ./bochsrc启动Bochs虚拟机,执行选项6。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/729466.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号