Loader设计与实现

Loader设计与实现

1.设计

loader最主要的功能就是检测计算机硬件信息,然后加载操作系统到指定的物理内存0x200000。

因为KePOS操作系统还没有文件系统功能,因此将应用程序简单的保存到了物理内存地址0xd0000000。要将应用程序最终保存到物理内存上,就需要程序实现从软盘FAT12文件系统读取应用程序bin文件(mymain.bin),然后将其保存到物理地址0xd0000000。

2.功能

1.检测计算机SVGA信息,设置SVGA。

2.在软盘上找到kernel.bin,并将其加载到物理地址0x200000。

3.在软盘上找到mymain.bin,并将其加载到物理地址0xd0000000。

4.设置段表,页表,进入64位长模式。

5.跳转到kernel代码处执行。

3.部分代码

1.地址:
;kernel.bin被加载到的内存地址
BaseOfKernelFile	equ	0x00
OffsetOfKernelFile	equ	0x200000	
;mymain.bin被加载到的内存地址
OffsetofuserFile    equ 0xd0000000
2.段表:
[SECTION gdt64]

LABEL_GDT64:		dq	0x0000000000000000
LABEL_DESC_CODE64:	dq	0x0020980000000000
LABEL_DESC_DATA64:	dq	0x0000920000000000

GdtLen64	equ	$ - LABEL_GDT64
;保存到GDTR寄存器的值
GdtPtr64	dw	GdtLen64 - 1
		dd	LABEL_GDT64
3.页表:
;每条页表项占8B
	;PML4页表,基址是90000H
	mov	dword	[0x90000],	0x91007
	mov	dword	[0x90004],	0x00000

	mov	dword	[0x90800],	0x91007
	mov	dword	[0x90804],	0x00000

	;PDPT页表
	mov	dword	[0x91000],	0x92007
	mov	dword	[0x91004],	0x00000

	;PDT页表,最终的页表。
	;本次的页大小的2M,不是4k
	mov	dword	[0x92000],	0x000083
	mov	dword	[0x92004],	0x000000

	mov	dword	[0x92008],	0x200083
	mov	dword	[0x9200c],	0x000000

	mov	dword	[0x92010],	0x400083
	mov	dword	[0x92014],	0x000000

	mov	dword	[0x92018],	0x600083
	mov	dword	[0x9201c],	0x000000

	mov	dword	[0x92020],	0x800083
	mov	dword	[0x92024],	0x000000

	mov	dword	[0x92028],	0xa00083
	mov	dword	[0x9202c],	0x000000

4.建议

推荐阅读:一个64位操作系统的设计与实现----->(第 3 章 BootLoader引导启动程序)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值