码迷,mamicode.com
首页 > 其他好文 > 详细

Lab1: Booting a PC

时间:2020-02-17 19:53:53      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:ibm   目录   boost   启动   切换   偏移地址   了解   enc   完成   

Lab1:

简介

本实验分为三个部分。 第一部分着重于熟悉x86汇编语言,QEMU x86仿真器和PC的开机引导程序。 第二部分检查了6.828内核的引导加载程序,该加载程序位于实验室树的引导目录中。 最后,第三部分深入研究了6.828内核本身的初始模板,名为JOS,它位于内核目录中。


源码下载

git clone https://pdos.csail.mit.edu/6.828/2018/jos.git lab


1. Part1: PC Booststrap

用于介绍x86 汇编语言 和 PC bootstrap 进程,以及初步使用 QEMU/GDB debugging

  • 编译XV6

    将目录切换至 git 下来的 lab 目录下,使用 make 进行编译:
    技术图片
    遇到了如下错误:
    技术图片
    askubuntu 找到了一种解决方法:
    使用 apt-get install gcc-4.8-multilib 安装 gcc-4.8-multilib 得到了解决,编译成功
    技术图片
    在 qemu 上运行
    技术图片

  • 使用 QEMU 和 GDB 进行调试

    新建两个终端,一个启动 make qemu-nox-gdb 另外一个启动 make gdb 对操作系统进行debug
    技术图片
    我们看向右侧终端窗口的这条指令 [f000:fff0] 0xffff0: ljmp $0xf000,$0xe05b

    1. QEMU第一条执行的指令在内存中的地址(物理地址)为 0xffff0(段地址和偏移地址为 CS=0xf000 IP=0xfff0
    2. 第一条被执行的指令是 ljmp,该指令跳转的段地址和偏移地址分别为 CS=0xf000 IP=0xe05b

    这是因为英特尔设计IBM在其原始PC中使用的8088处理器,PC中的BIOS采用硬连接方式,对应到物理地址 0x000f0000-0x000fffff,而QEMU的第一条执行的指令位于 0xffff0 到BIOS结束的地址 0x000fffff 只有16B的存储空间,能执行的工作必然很有限,故第一条指令执行了跳转,跳转至较前的位置,以便工作的完成。

Lab1: Booting a PC

标签:ibm   目录   boost   启动   切换   偏移地址   了解   enc   完成   

原文地址:https://www.cnblogs.com/joe-w/p/12323071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!