Frdmu's Space


Welcome to frdmu's space!


Ucore

之前做过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可查看某个地址附近的几条指令