来回答一下Lab1的问题
Ucore lab1 系列
操作系统实验Ucore:Bootasm启动(一)
操作系统实验Ucore:bootmain(二)
操作系统实验Ucore:kernel_init(三)
操作系统实验Ucore:Kernel_init(四)
操作系统Ucore:Lab1QA(五)
练习1:理解通过make生成执行文件的过程。
1.1操作系统镜像文件ucore.img是如何一步一步生成的?
ucore.img由kernel的bootblock组成,bootblock由bootasm和bootmain编译生成,最后由sign.c填充。kernel则由kern目录下的文件编译而成。
最后使用dd命令构造ucore.img
1.2一个被系统认为是符合规范的硬盘主引导扇区的特征是什么?
最后两个字节是0x55AA
练习2:使用qemu执行并调试lab1中的软件。
跳过
练习3:分析bootloader进入保护模式的过程。
3.1为何开启A20,以及如何开启A20
在8086中,虽然只有20位的总线,但是实际最大的CS:IP是FFFF:FFFF = 10 FFEF 已经超出了1MB的限制,所以如果地址超出了20位,就会发生回滚。也就是 FFFFF + 1 = 00000,在8086下,第20位地址线总是为0的,如果不使能A20,就只能访问奇数MB的内存。
如何开启A20?和特定的端口交互
3.2如何初始化GDT表
使用ldgt指令把内存里的GDT表装上,然后手动设置段寄存器,最后ljmp刷新CS寄存器
3.3如何使能和进入保护模式
使能CR0的PE位
练习4:分析bootloader加载ELF格式的OS的过程。
bootloader把ELF文件加载到内存的0x1_0000位置然后再将ELF的数据段和代码段加载到0x10_0000位置,最后跳转到此处,开始执行内核代码
练习5,6
在前面的文章里已经分析过了,略