分类: LINUX
2009-02-20 00:19:00
boot/boot.S的代码比较简洁,比起当初看主引导扇区的反汇编代码好多了,结构清晰,大量地使用了宏(inc/mmu.h中定义的有关gdt的一些初始化操作),这段代码(boot.S)就干了不几件事:打开A20(使其可使用1MB以上的地址空间);初始化一个临时使用的gdt,然后跳转到保护模式;调用boot/main.c里的初始化函数bootmain。
在设置临时gdt的时候,把基地址设置为0,偏移地址为下一条指令的物理地址(实模式下地址0:7c32),跳转后,mmu在进行地址转换的使用段基地址0加上偏移7c32,也得到物理地址7c32;这样就可以接着执行下一条指令了。
可以根据obj/boot/boot.asm文件来跟踪或者找到要执行命令的物理地址