ucore - LAB1实验报告
LAB1实验报告
实验目的:
操作系统是一个软件,也需要通过某种机制加载并运行它。在这里我们将通过另外一个更加简单的软件-bootloader来完成这些工作。为此,我们需要完成一个能够切换到x86的保护模式并显示字符的bootloader,为启动操作系统ucore做准备。lab1提供了一个非常小的bootloader和ucore OS,整个bootloader执行代码小于512个字节,这样才能放到硬盘的主引导扇区中。通过分析和实现这个bootloader和ucore OS,通过分析和实现这个bootloader和ucore OS,我们可以了解到: ? 基于分段机制的存储管理 ? 设备管理的基本概念
? PC启动bootloader的过程 ? bootloader的文件组成
? 编译运行bootloader的过程 ? 调试bootloader的方法 ? ucore OS的启动过程
? 在汇编级了解栈的结构和处理过程 ? 中断处理机制
? 通过串口/并口/CGA输出字符的方法 实验内容: 一.练习
练习1:理解通过make生成执行文件的过程。
1. ucore.img是如何一步一步生成的?(需要比较详细地解释Makefile中每一条相关命令和命令参数的含义,以及说明命令导致的结果)
答:Makefile按照如下步骤生成ucore.img(lab1/bin下的ucore.img):
①为每一个源文件(.c和.S文件)产生一个描述其依赖关系的makefile文件,以.d为后缀。即对于一个源文件“NAME.c”,对应的这个makefile文件为“NAME.d”。包括分别生成sign.c、bootmain.c、bootasm.S的makefile依赖文件sign.d、bootmain.d、bootasm.d,具体执行的命令如下: mkdir -p obj/sign/tools gcc -Itools/ -g -Wall -O2 -MM tools/sign.c -MT \obj/sign/tools/sign.d mkdir -p obj/boot gcc -Iboot/ -fno-builtin -Wall -ggdb -m32 -nostdinc -fno-stack-protector -Ilibs/ -Os -nostdinc -MM boot/bootmain.c -MT \ gcc -Iboot/ -fno-builtin -Wall -ggdb -m32 -nostdinc -fno-stack-protector -Ilibs/ -Os -nostdinc -MM boot/bootasm.S -MT \gcc重要的编译参数: -I
-nostdinc 只为头文件寻找-I选项指定的目录
-fno-builtin 除非利用\进行引用,否则不识别所有内建函数 -fno-stack-protector 不检测缓存溢出
②编译源文件,只生成目标文件但不链接。包括由bootasm.S、bootmain.c、sign.c分别生成bootasm.o、bootmain.o、sign.o。具体执行的命令如下: gcc -Iboot/ -fno-builtin -Wall -ggdb -m32 -nostdinc -fno-stack-protector -Ilibs/ -Os -nostdinc -c boot/bootasm.S -o obj/boot/bootasm.o gcc -Iboot/ -fno-builtin -Wall -ggdb -m32 -nostdinc -fno-stack-protector -Ilibs/ -Os -nostdinc -c boot/bootmain.c -o obj/boot/bootmain.o gcc -Itools/ -g -Wall -O2 -c tools/sign.c -o obj/sign/tools/sign.o gcc重要的编译参数: -c 完成编译或汇编工作,但是不链接,以目标文件(.o)形式输出
③由目标文件sign.o生成可执行文件sign,生成sign工具(生成引导区内容) mkdir -p bin gcc -g -Wall -O2 obj/sign/tools/sign.o -o bin/sign
④链接bootasm.o、bootmain.o生成bootblock.o,设定程序入口为start,地址为0x7C00。具体执行的命令如下: ld -m elf_i386 -N -e start -Ttext 0x7C00 obj/boot/bootasm.o obj/boot/bootmain.o -o obj/bootblock.o ld链接参数: -e 设置程序入口位置 -Ttext 设置函数地址
-m elf_i386 设定为i386平台ELF执行文件格式
⑤将bootblock.o内容进行反汇编,写入文件bootblock.asm。具体执行的命令如下: objdump -S obj/bootblock.o > obj/bootblock.asm 命令参数含义:
-S 源代码中混合有反汇编
⑥将目标文件bootblock.out全部内容拷贝到bootblock.o中,并转换为raw二进制(raw binary)格式。具体执行的命令如下: objcopy -S -O binary obj/bootblock.o obj/bootblock.out 命令参数含义: -S 去除掉源文件的符号信息和重分配信息 -O binary 生成二进制(binary)格式的输出文件
⑦使用sign工具生成引导区内容装载bootblock.out,生成bin目录下的bootblock。具体执行的命令如下: bin/sign obj/bootblock.out bin/bootblock
⑧生成ucore.img。分两步:先使用空白字符(/dev/zero)初始化ucore.img,再以bootblock为输入,输出最终硬盘镜像ucore.img。具体执行的命令如下: dd if=/dev/zero of=bin/ucore.img count=10000 dd if=bin/bootblock of=bin/ucore.img conv=notrunc 命令参数含义: if=file 输入文件名,缺省为标准输入 of=file 输出文件名,缺省为标准输出
count=blocks 仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数
conv=conversion[,conversion...] 用指定的参数转换文件 conv=notrunc 不截短输出文件
2.一个被系统认为是符合规范的硬盘主引导扇区的特征是什么? 答:根据代码sign.c中的内容,一个被系统认为是符合规范的硬盘主引导扇区具有如下特征: (1)硬盘主引导扇区共512(200h)字节;
(2)硬盘主引导程序大小不超过510字节,且位于主引导扇区第0-509(0-1FDh)字节,若程序大小不足510字节,剩余空间补零;
(3)引导扇区有有效标志,位于第510-511(1FEh-1FFh)字节处,值为AA55h,即1FEh字节存0x55,1FFh字节存0xAA。
练习2:使用qemu执行并调试lab1中的软件。
1. 从CPU加电后执行的第一条指令开始,单步跟踪BIOS的执行。 答:通过改写Makefile文件 () debug: $(UCOREIMG) $(V)$(TERMINAL) -e \-serial null\ //qemu模拟 $(V)sleep 2 //停止2ms $(V)$(TERMINAL) -e \ //gdb调试
在调用qemu时增加-d in_asm -D q.log参数,便可以将运行的汇编指令保存在q.log中。 为防止qemu在gdb连接后立即开始执行,删除了tools/gdbinit中的\行。
2.在初始化位置 0x7c00设置实地址断点,测试断点正常。 答:将tools/gdbinit改为: file obj/bootblock.o target remote :1234 set architecture i8086 //设置为8086模式 b *0x7c00 //设置断点为0x7c00 continue x /2i $pc //反汇编形式输出两条指令 运行\便可得到
说明断点调试成功。
3.在调用qemu 时增加-d in_asm -D q.log 参数,便可以将运行的汇编指令保存在q.log 中。将执行的汇编代码与bootasm.S和bootblock.asm进行比较,看看两者是否一致。 答:在q.log中进入BIOS之后的跳转地址与实际应跳转地址不相符,汇编代码也 与bootasm.S 和 bootblock.asm不相同。 如图
q.log与bootasm.S 和 bootblock.asm并不相同,甚至完全不一样。
这是由于在gdb之中调试的原因,可以直接输入make debug,在生成的qemu虚拟 机之中进行调试可以看到在虚拟机中运行的汇编代码,之后再与bootasm.S 和 bootblock.asm 进行比较。
这样得出的前20条指令与bootasm.S 和 bootblock.asm中的指令完全一致。
练习3:分析bootloader 进入保护模式的过程。 答:如下: (1) .globl start start: .code16 # Assemble for 16-bit mode cli # Disable interru …… 此处隐藏:2884字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [高等教育]公司协助某村精准扶贫工作总结.doc
- [高等教育]高二生物知识点总结(全)
- [高等教育]苏教版数学三年级下册《解决问题的策略
- [高等教育]仪器分析课程学习心得
- [高等教育]2017年五邑大学数学与计算科学学院333
- [高等教育]人教版七年级下册语文第四单元测试题(
- [高等教育]2018年秋七年级英语上册Unit7Howmuchar
- [高等教育]2017年八年级下数学教学工作小结
- [高等教育]湖南省怀化市2019届高三统一模拟考试(
- [高等教育]四年级下册科学_基础训练及答案教材
- [高等教育]城郊煤矿西风井管路伸缩器更换施工安全
- [高等教育]昆八中20182019学年度上学期期末考试
- [高等教育]项目部各类人员任命书
- [高等教育]上市公司经营水务产业的模式
- [高等教育]人教版高二化学第一学期第三章水溶液中
- [高等教育]【中考物理第一轮复习资料】四.压强与
- [高等教育]金坑水电站报废改建工程机电设备更新改
- [高等教育]高中生物教学工作计划简易版
- [高等教育]2017年西华大学攀枝花学院(联合办学)44
- [高等教育]最新整理超短爆笑英文小笑话大全
- 优秀教师继续教育学习心得体会
- 阳历到阴历的转换
- 留守儿童教育案例分析
- 华师17春秋学期《玩教具制作与环境布置
- 测速传感器新型安装装置的现场应用
- 人教版小学数学三年级下册第四单元
- 创业个人意向书
- 山东省潍坊市2012年高考仿真试题(三)
- [恒心][好卷速递]四川省成都外国语学校
- 多少人错把好转反应当成了病情加重处理
- 中外广播电视史复习资料整理
- 江苏省扬州市江都区宜陵镇中学2014-201
- 工程造价专业毕业实习报告
- 广西师范学院心理与教育统计
- aympkrq基于 - asp的博客网站设计与开
- 建筑业外出经营相关流程操作(营改增后
- 人治 德治 法治
- [精华篇]常识判断专项训练题库
- 中国共产党为什么要实行民主集中
- 小学数学第三册第一单元试卷(A、B、C




