欢迎来到天天文库
浏览记录
ID:35231642
大小:497.89 KB
页数:14页
时间:2019-03-22
《清华大学操作系统实验lab1实验报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、练习1、理解通过make生成执行文件的过程。[练习1.1]操作系统镜像文件ucore.img是如何一步一步生成的?在proj1执行命令makeV=可以得到make指令执行的过程makeV=+ccboot/bootasm.Sgcc-Iboot/-fno-builtin-Wall-ggdb-m32-nostdinc-fno-stack-protector-Ilibs/-Os-nostdinc-cboot/bootasm.S-oobj/boot/bootasm.o+ccboot/bootmain.cgcc-Iboot/-fno-builtin-Wall-ggdb-m32-n
2、ostdinc-fno-stack-protector-Ilibs/-Os-nostdinc-cboot/bootmain.c-oobj/boot/bootmain.o+cctools/sign.cgcc-Itools/-g-Wall-O2-ctools/sign.c-oobj/sign/tools/sign.ogcc-g-Wall-O2obj/sign/tools/sign.o-obin/sign+ldbin/bootblockld-melf_i386-N-estart-Ttext0x7C00obj/boot/bootasm.oobj/boot/bootmain.o
3、-oobj/bootblock.o'obj/bootblock.out'size:440bytesbuild512bytesbootsector:'bin/bootblock'success!ddif=/dev/zeroof=bin/ucore.imgcount=10000记录了10000+0的读入记录了10000+0的写出5120000字节(5.1MB)已复制,0.0227439秒,225MB/秒ddif=bin/bootblockof=bin/ucore.imgconv=notrunc记录了1+0的读入记录了1+0的写出512字节(512B)已复制,0.00021
4、4966秒,2.4MB/秒从这几条指令中可以看出需要生成ucore.img首先需要生成bootblock,而生成bootblock需要先生成bootmain.o和bootasm.o还有sign,这三个文件又分别由bootmain.c、bootasm.S、sigh.c来生成。ld-melf_i386-N-estart-Ttext0x7C00obj/boot/bootasm.oobj/boot/bootmain.o–oobj/bootblock.o这句话用于生成bootblock,elf_i386表示生成elf头,0x7C00为程序的入口。'obj/bootblock.o
5、ut'size:440bytes这句话表示生成的bootblock的文件大小,因为大小不到512字节,所以需要给blootblock填充,填充的功能在sign.c中有所体现,最后两字节设置为了0x55,0xAAbuf[510]=0x55;buf[511]=0xAA;FILE*ofp=fopen(argv[2],"wb+");size=fwrite(buf,1,512,ofp);[练习1.2]一个被系统认为是符合规范的硬盘主引导扇区的特征是什么?前面已经提到过:引导扇区的大小为512字节,最后两个字节为标志性结束字节0x55,0xAA,做完这样的检查才能认为是符合规范的
6、磁盘主引导扇区。Sign.c文件中有作检查:if(size!=512){fprintf(stderr,"write'%s'error,sizeis%d.",argv[2],size);return-1;}练习2:使用qemu执行并调试lab1中的软件。[练习2.1]从CPU加电后执行的第一条指令开始,单步跟踪BIOS的执行。[练习2.2]在初始化位置0x7c00设置实地址断点,测试断点正常。[练习2.3]在调用qemu时增加-din_asm-Dq.log参数,便可以将运行的汇编指令保存在q.log中。将执行的汇编代码与bootasm.S和bootblock.asm
7、进行比较,看看二者是否一致。实验是基于老lab1/proj1做的,练习开始时是打算用命令行一句一句执行得到结果的,后来发现直接修改makefile和gdbinit可以大大提高调试效率。于是在makefile中增加以下代码fileobj/bootblock.otargetremote:1234setarchitecturei8086b*0x7c00continuex/10i$pclab1-mon:$(UCOREIMG)$(V)$(TERMINAL)-e"$(QEMU)-S-s-din_asm-D$(BINDIR)/q.log-monitorstdio-
此文档下载收益归作者所有