练习1、理解通过m ake生成执行文件的过程。 [练习1.1] 操作系统镜像文件 u core.img 是如何一步一步生成的? 在 proj1 执行命令 make V=可以得到 make 指令执行的过程 从这几条指令中可以看出需要生成 ucore.img 首先需要生成 bootblock,而生成 bootblock 需要先生成 bootmain.o 和 bootasm.o 还有 sign,这三个文件又分别由 bootmain.c、bootasm.S、sigh.c 来生成。 ld -m elf_i386 -N -e start -Ttext 0x7C00 obj/boot/bootasm.o obj/boot/bootmain.o – o obj/bootblock.o 这句话用于生成 bootblock,elf_i386 表示生成 elf 头,0x7C00 为程序的入make V= + cc boot/bootasm.S gcc -Iboot/ -fno-builtin -Wall -ggdb -m32 -nostdinc -fno-stack-protector -Ilibs/ -Os -nostdinc -c boot/bootasm.S -o obj/boot/bootasm.o + cc boot/bootmain.c gcc -Iboot/ -fno-builtin -Wall -ggdb -m32 -nostdinc -fno-stack-protector -Ilibs/ -Os -nostdinc -c boot/bootmain.c -o obj/boot/bootmain.o + cc tools/sign.c gcc -Itools/ -g -Wall -O2 -c tools/sign.c -o obj/sign/tools/sign.o gcc -g -Wall -O2 obj/sign/tools/sign.o -o bin/sign + ld bin/bootblock ld -m elf_i386 -N -e start -Ttext 0x7C00 obj/boot/bootasm.o obj/boot/bootmain.o -o obj/bootblock.o 'obj/bootblock.out' size: 440 bytes build 512 bytes boot sector: 'bin/bootblock' success! dd if=/dev/zero of=bin/ucore.img count=10000 记录了 10000+0 的读入 记录了 10000+0 的写出 5120000 字节(5.1 MB)已复制,0.0227439 秒,225 MB/秒 dd if=bin/bootblock of=bin/ucore.img conv=notrunc 记录了 1+0 的读入 记录了 1+0 的写出 512 字节(512 B)已复制,0.000214966 秒,2.4 MB/秒 口。 'obj/bootblock.out' size: 440 bytes 这句话表示生成的bootblock的文件大小,因为大小不到512字节,所以需要给blootblock填充,填充的功能在sign.c中有所体现,最后两字节设置为了0x55,0xAA buf[510] = 0x55; buf[511] = 0xAA; FILE *ofp = fopen(argv[2], "wb+"); size = fwrite(buf, 1, 512, ofp); [练习1.2] 一个被系统认为是符合规范的硬盘主引导扇区的特征是什么? 前面已经提到...