ucore_lab1_练习一

(本示例中,如果输入行前面出现美元符号($),表示这是命令行提示符。紧接其后的是命令行,可以通过控制台输入命令)

理解通过make生成执行文件的过程

通过静态分析代码来了解:

  1. 操作系统镜像文件ucore.img是如何一步一步生成的?(需要比较详细地解释Makefile中每一条相关命令和命令参数的含义,以及说明命令导致的结果)
  2. 一个被系统认为是符合规范的硬盘主引导扇区的特征是什么?

注:前面为一些基础知识,看题目答案可直接到:二、make生成过程分析 中的 第2点第3点

一、预备知识

关于编译和链接:程序编译的过程

对于在没有汇编知识的时候有些不理解,所以写一下
类似于C、C++,有一个源文件,在Windows下也就是 .asm 文件。
编译过程首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link),也就是把==.obj== 文件进行链接。

关于gcc:

GCC 编译器是 Linux 下默认的 C/C++ 编译器,大部分 Linux 发行版中都是默认安装的。GCC 编译器通常以 Linux 命令的形式在终端(Shell)中使用,它有很多选项。
GCC 仅仅是一个编译器,没有界面,必须在命令行模式下使用。通过gcc命令就可以将源文件编译成可执行文件。
GCC 既可以一次性完成C语言源文件的编译,也可以分步骤完成。
(这里给出一些这次实验用到的gcc命令,更详细gcc教程参考:)

1. 在类 Unix 操作系统(Unix、Linux、Mac OS 等)中检测是否已经安装GCC编译器

$ gcc --version


如图“cc”也可以

2. gcc 命令
  1. gcc -c 命令:只编译不链接,仅生成目标文件
    -c选项表示编译、汇编指定的源文件(也就是编译源文件),但是不进行链接。使用-c选项可以将每一个源文件编译成对应的目标文件。
    目标文件是一种中间文件或者临时文件,如果不设置该选项,gcc 一般不会保留目标文件,可执行文件生成完成后就自动删除了。
    例如:

$ gcc -c bootmain.c

编译bootmain.c源文件

  1. gcc -o命令:指定输出文件
    它的用法为:

$ [infile] -o [outfile]

[infile] 表示输入文件(也即要处理的文件),它可以是源文件,也可以是汇编文件或者是目标文件;[outfile] 表示输出文件(也即处理的结果),它可以是预处理文件、目标文件、可执行文件等。

关于gdb

UNIX及UNIX-like下的调试工具。具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。
GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。

关于Makefile

所要完成的Makefile 文件描述了整个工程的编译、连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建哪些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。

二、make生成过程分析

1、执行Makefile文件的方法

进入 Makefile 文件所在位置执行 make 命令

$ cd [文件位置]


1是文件位置,用清华的系统应该都是这个位置,
进入文件后用命令

$ ls

看到有Makefile文件,执行make命令

$ make

如果已经执行过make文件则会显示nothing to be啥啥啥,用以下命令清除之前make的执行结果:

$ make clean


然后看到 + cc 我觉得就是在调用gcc 编译器编译 .c 文件,然后执行结果生成一个名为 obj 的文件夹

然后执行命令:

$ man make

可以看到应该是关于make命令的使用手册

2、Makefile文件干了什么,如何一步一步生成本次实验问的镜像文件ucore.img

1、用make V=命令查看make命令的详细执行过程

$ make V=


然后显示makefile文件详细执行过程
其中:
1、

+cc kern/init/init.c
表示编译了 kern/init 文件中的 init.c 文件

-ggdb : 生成可供gdb使用的调试信息
-m32 :生成适用于32位环境的代码
-gstabs :生成stabs格式的调试信息
-nostdinc :不在标准系统文件夹寻找头文件,只在-I等参数指定的文件夹中搜索头文件
-fno-stack-protector :不生成用于检测缓冲区溢出的代码
-Os 为减小代码大小而进行优化

标黑的一段表示将 init.c 文件编译为输出文件 init.o 并放入 obj 文件夹中
之后的类似的+cc开头的代码均执行了这样一个过程

2、

这里的 .S 文件是经过预编译的汇编语言源代码文件

3、

ld 命令目标文件转化成可执行程序,这里转化成 bootblock.out,可以理解成一个Bootloader的执行程序

4、

dd 命令把Bootloader放到一个虚拟的硬盘里去,这里生成一个虚拟硬盘叫 uCore.img ,这个虚拟硬盘就会基于里面的数据来执行相应的代码

5、

这里生成两个软件,第一个是Bootloader,第二个是kernel,kernel是uCore的组成部分

3、被系统认为是符合规范的硬盘主引导扇区的特征

这里需要看一下一个文件:

在tools文件夹中的sign.c文件,这个文件中完成了特征的标记
查看sign.c文件内容:

按照这个文件的描述,需要检查以下几点:

输入的主引导扇区的记录必须是510字节以内(446+64)
输出的主引导扇区的最后两个字节是55AA
bootblock就是需要用到的主引导扇区

清华操作系统实验课程实验一:系统软件启动过程相关推荐

  1. 计算机组成原理节拍发生器实验报告,计算机组成原理微程序控制器组成实验课程实验报告书研讨.doc...

    文档介绍: 学生课程实验报告书 13级计算机与信息科学系软件工程专业 130 3班学号 3138907308 姓名王明渊 2014 --2015 学年第2学期实验项目: 微程序控制器组成实验实验时间: ...

  2. 计算机组成原理时序发生器qd,计算机组成原理微程序控制器组成实验课程实验报告书...

    学生课程实验报告书 13 级 计算机与信息科学 系 软件工程 专业 1303 班 学号 3138907308 姓名 王明渊 2014 --2015 学年 第 2 学期 另外它还产生节拍信号W1-W3的 ...

  3. 操作系统(一) BIOS/MBR 启动过程

    无论是什么计算机或操作系统,标准("IBM 兼容")台式 PC 和笔记本电脑都使用以下两种方式之一开机和启动:传统的 BIOS-MBR 方法和较新的 UEFI-GPT 方法.本文总 ...

  4. linux系统shell讲解实验报告,《操作系统》课程实验报告 SHELL编程.doc

    华南理工大学 <操作系统 SHELL编程 姓名: 余柳红 学号: 201330571011 班级: 13信息安全班 合作者: 无 指导教师: 贺小箭 实验概述[实验目的及要求] 实验目的: 熟悉 ...

  5. Linux内核分析实验3——分析linux内核启动过程

    本文大量内容引用自孟宁老师在<LINUX操作系统分析>课程中的内容 <Linux内核分析>MOOC课程 http://www.xuetangx.com/courses/cour ...

  6. 杨月江计算机导论答案,计算机导论课程实验教学大纲-计算机学院-华北科技学院.doc...

    计算机导论课程实验教学大纲-计算机学院-华北科技学院.doc 华 北 科 技 学 院 2010级 实验教学大纲 网络工程系 目 录 TOC \o "1-1" \h \z \u HY ...

  7. 大学计算机实验五实验六实验报告表,北京理工大学计算机实验六

    北京理工大学计算机实验六Tag内容描述: 1.实验四实验报告表 实验名称 一条指令的执行过程 学号姓名 班级 实验时间 年月日 实验报告表 4 1 一条指令执行过程记录表 步骤 1 用户指定两个加数 ...

  8. 哈工大操作系统课程实验记录

    哈工大操作系统课程实验记录 0-课程准备 课程视频地址: https://www.bilibili.com/video/BV1d4411v7u7 实验楼地址: https://www.shiyanlo ...

  9. 课程linux实验报告,Linux操作系统课程实验报告.doc

    Linux操作系统课程实验报告.doc Linux操作系统课程实验报告班级姓名学号指导老师田丽华完成时间2014年7月目录一.实验目的1二.实验要求1三.实验内容1[第一题]1[第二题]2[第三题]4 ...

最新文章

  1. 转 使用 HttpClient 4 进行文件上传
  2. c语言 文件截断,c – 是否有一种正统的方法来避免编译器警告C4309 – “二进制文件输出的”常数值的截断“?...
  3. 前端学习(3062):vue+element今日头条管理-总页码处理
  4. pmp知识点详解-项目大牛整理_PMP核心知识点—第四章:项目整合管理(一)
  5. 一个简单51c语言程序,求一个 89C51 简易计算器的c语言程序 只要加减乘除就行!...
  6. Q91:真实地模拟透明材质(Realistic Transparency)(2)——Triangle Meshes
  7. java date 最小值_Java_Math/Date
  8. M3U8文件简介及在线播放器
  9. 谈谈Java的学习方法
  10. Intel系列CPU架构的发展史
  11. linux安装tomcat
  12. Markdwon语法讲解
  13. 解决Teamviewer密码总是在变的问题
  14. 安卓手机”应用未安装“解决办法
  15. 2020职高计算机录取分数线,四川邮电职校2020单招录取分数线
  16. Protege Tutorial
  17. 找回sonarqube管理员密码
  18. 英语思维导图绘制方法,内附图例
  19. Selective Search for Object Recognition论文翻译
  20. 神奇的Grails:自关联的树状Domain一行代码获取所有子节点

热门文章

  1. The Wiley Handbook of Human Computer Interaction翻译
  2. (附源码)计算机毕业设计SSM基于Java的小型电子病历系统
  3. Linux常用文本比对命令——diff
  4. 零基础Vlog教程!
  5. conda安装python3.5_解决 Raspbian Miniconda 无法安装最新 Python3.6
  6. 2021年广东省安全员A证(主要负责人)考试内容及广东省安全员A证(主要负责人)证考试
  7. 使用vite的社区模板来创建对应的项目(比如React17,vue+electron)
  8. Qt开发技术:Q3D图表开发笔记(三):Q3DSurface三维曲面图介绍、Demo以及代码详解
  9. frp实现内网穿透(花生壳也可以)
  10. 再见!Minagawa先生