boot.s

本文深入解析了GRUB Boot Protocol中各个关键组件的作用,包括类型、大小、地址偏移等,详细解读了如何通过这些组件实现启动过程。重点讨论了如何在不同设备上正确配置启动参数,确保系统的稳定性和兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述1

类型

大小

地址偏移

 

jmp LOCAL(after_BPB) 

 

2

 

 

nop

 

1

 

 

_start + GRUB_BOOT_MACHINE_BPB_START 

占位

1

 

 

_start + 4 

下节开始于4

 

0x7c04

 

 

 

 

0x7c04

 

Mode

Byte

1

0x7c04

保存磁盘读模式

disk_address_packet: 

 

0

0x7c05

 

sectors:

Long

4

0x7c05

 

Heads

Long

4

0x7c09

 

Cylinders:

Word

2

0x7c0d

 

Sector_start

Byte

1

0x7c10

 

Head_start

Byte

1

0x7c11

 

Cylinder_start

Word

2

0x7c12

 

 

 

0x7c14

 

 _start + GRUB_BOOT_MACHINE_BPB_END

占位

0

0x7c5a

 

kernel_address

Word

2

0x7c5a

0x8000

_start + GRUB_BOOT_MACHINE_KERNEL_SECTOR 

占位

 

0x7c5c

 

kernel_sector

Long*2

8

0x7c5c

5c-63

_start + GRUB_BOOT_MACHINE_BOOT_DRIVE 

占位

0

0x7c64

 

boot_drive

Byte

1

0x7c64

 

LOCAL(after_BPB): 

 

0

0x7c65

0x7C00处的跳转到达这里 

cli     

 

1

0x7c65

 

_start + GRUB_BOOT_MACHINE_DRIVE_CHECK

占位

0

0x7c66

检查到引是否偏移66

boot_drive_check

标号

0

0x7c66

检查dl中驱动器号

 

 

 

 

 

 


Struct DAP{

BYTE sizeOfDap;         //1

BYTE reserved;        //1;  =0

WORD nrSectionToRead; //2  需要读的扇区数

LONG offset;          //4   segment:offset指向内存缓冲区,读到的东西放到这里

LONGLONG startSectionNr;//8 起始扇区编号

}disk_address_packet



| 硬盘 | 内存 内存地址

|                              |

| |          |                            |

|                               |          |压缩的内核 |

|continue kernel, if exists |          | |

| kernel.img                           | |startup.s               |0x8200

| diskboot.s                            | |diskboot.img        |0x8000

|___MBR,boot.s________ |          |_boot.s_______ |0x7c00


startup.s  检验内核 解压内核 初始化内核变量  跳转到内核(内核是grub内核,不是linux内核)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值