之前做过MIT-6.828,但是主要是看别人的思路然后实现,做了又好像没做,这次做ucore lab,要靠自己了!
Lab1
练习一:
-
操作系统镜像文件ucore.img是如何一步一步生成的?
0. 执行 make"V=" 查看内核编译过程,过程如下 1. 编译链接kernel以及libs下的文件,生成bin/kernel 2. 编译链接boot下的文件,生成bootblock.o;编译tools下的文件生成sign.o;sign.o将bootblock.o变为bin/bootblock 3. 将bin/kernel以及bin/bootblock合并输出为bin/ucore.img
-
一个被系统认为是符合规范的硬盘主引导扇区的特征是什么?
硬盘主引导扇区指的就是bin/bootblock,由sign.o以bootblock.o作为输入得到,通过查看tools/sign.c,可以发现,其特征为: 大小为512字节,最后两个字节分别为0x55、0xAA
练习二:
-
使用qemu执行并调试lab1中的软件
0. 运行make debug 1. CPU上电后,CS=0xf000,EIP=0xfff0,CS:EIP=0xffff0指向BIOS代码的首地址,随后开始执行BIOS,BIOS干的事情主要有两点:初始化硬件和读取硬盘主引导扇区到内存,并转跳到对应内存中的位置执行bootloader 2. bootloader的首地址为0x7c00,bootloader主要干两件事情:将CPU从实模式转换到保护模式,将kernel从磁盘读取到内存 3. 分别设置断点b *0xffff0, b *0x7c00 4. si命令可执行一步指令 5. x /5i 0xffff0可查看某个地址附近的几条指令