文章目录
ELF文件格式
Windows:32位PE文件结构
kernel.bin是一个ELF格式的文件,需要在kernel loader中实现一个ELF加载器将其加载到内存并进行初始化。
载入内核
加载
首先需要确定此时低端1M的物理内存中有哪些部分是可用的(打勾部分)。
在0x7E00~0x9FBFF
中选取合适位置(如0x70000
)作为读入缓冲区始址。kernel loader中代码如下
; ------------------------- 加载kernel ----------------------
mov eax, KERNEL_START_SECTOR ; kernel.bin所在的扇区号
mov ebx, KERNEL_BIN_BASE_ADDR ; 从磁盘读出后,写入到ebx指定的地址
mov ecx, 200 ; 读入的扇区数(一劳永逸)
call rd_disk_m_32
; 创建页目录及页表并初始化页内存位图
call setup_page
boot.inc
; 读入的缓冲区始址
KERNEL_BIN_BASE_ADDR equ 0x70000
; kernel.bin在硬盘上的扇区
KERNEL_START_SECTOR equ 0x9
; 内核入口点(虚拟地址)
KERNEL_ENTRY_POINT equ 0xc0001500