MIT6.828 LAB1 PART2.1The Boot Loader

    技术2022-07-21  75

    实验内容

            PC机的软盘和硬盘被划分为固定的512字节的扇区(sector)。扇区是磁盘的最小传输粒度:每个读或写操作的大小必须是一个或多个扇区。第一个扇区称为the boot sector引导扇区,从引导扇区加载操作系统。当BIOS找到可以启动的软盘或硬盘之后,这个512个字节的启动扇区就会被加载到内存,地址为0x7c00~0x7dff区域。

          bootloader程序的大小必须是小于512个字节的。bootloader由一个汇编文件boot/boot.S以及一个C语言文件boot/main.c组成。bootloader要完成以下主要功能:

    1. bootloader要把处理器从实模式转换为保护模式,因为只要在保护模式下软件才可以访问超过1MB空间的内容。

    2. boot loader可以通过使用x86的特定的IO指令,直接访问IDE磁盘设备寄存器,从磁盘中读取内核。(这个功能还没搞懂,标记一下)

    Exercise 3

    启动gdb调试。设置断点在0x7c00处,执行c,可以看到QEMU终端显示Boot from hard disk.

    执行x/30i 0x7c00可以看到一段汇编语言。 这条gdb指令是把存放在0x7c00以及之后30字节的内存里面的指令反汇编出来。

    (gdb) b *0x7c00 Breakpoint 1 at 0x7c00 (gdb) c Continuing. The target architecture is assumed to be i8086 [ 0:7c00] => 0x7c00: cli Breakpoint 1, 0x00007c00 in ?? () (gdb) x/30i 0x7c00 => 0x7c00: cli 0x7c01: cld 0x7c02: xor %ax,%ax 0x7c04: mov %ax,%ds 0x7c06: mov %ax,%es 0x7c08: mov %ax,%ss 0x7c0a: in $0x64,%al 0x7c0c: test $0x2,%al 0x7c0e: jne 0x7c0a 0x7c10: mov $0xd1,%al 0x7c12: out %al,$0x64 0x7c14: in $0x64,%al 0x7c16: test $0x2,%al 0x7c18: jne 0x7c14 0x7c1a: mov $0xdf,%al 0x7c1c: out %al,$0x60 0x7c1e: lgdtw 0x7c64 0x7c23: mov %cr0,
    转载请注明原文地址:https://ipadbbs.8miu.com/read-30167.html
    最新回复(0)