硬盘启动盘,加载操作系统
模拟硬盘加载操作系统
环境:
VMware16
Ubuntu16.04
qemu
bochs 2.7
参考:
启动,BIOS,MBR
硬盘控制器主要端口寄存器
《操作系统真相还原》
1.系统开机流程
暂不构建中断向量表,直接加载MBR
2.BIOS 内存分布
MBR的位置在0x7c00,可用区域仅仅512B。如果在实模式下,要使内核大小超过512B,则需要使用0x500区域。该区域大小约为30KB。
因此使用MBR引导加载SETUP,使得内核大小超过512B。如下图所示:
- mbr.asm,是boot loader,用于将真正的OS内核,即setup.asm中的程序,读入内存
- setup.asm,是OS内核,存放要执行的代码
SETUP_MAIN_ADDR equ 0x500 ; setup地址
boot:
mov edi, SETUP_MAIN_ADDR
; 假设mbr在第一个扇区,setup在第二个扇区
mov ecx, 1 ; 第一个扇区
mov bl, 2 ; 读两个扇区
call read_hd ; 读硬盘,加载操作系统内核
jmp SETUP_MAIN_ADDR ; 跳转到setup
3.硬盘读取方式
常见的硬盘寻找方式有CHS和LBA逻辑块地址
本文使用LBA48寻址。