MIT 6.828 JOS学习笔记1. Lab 1 Part 1: PC Bootstrap
Lab 1: Booting a PC
Part 1: PC Bootstrap
介绍这一部分知识的目的就是让你能够更加熟悉x86汇编语言,以及PC启动的整个过程,而且也会首次学习使用QEMU软件来仿真xv6操作系统,并且配合GDB对操作系统的运行进行调试。
开始学习X86汇编语言
由于x86汇编语言在我们这节实验中扮演了非常重要的角色,所以MIT官方为我们提供了一个关于汇编语言的参考资料"004. pcasm-book"(资料文件名,在resources目录下),里面基本介绍了汇编语言的方方面面,你可以把这本书作为一个备查,遇到没看过的命令就上里面查,或者直接上网查。如果没有任何汇编基础,建议还是看一看书,把一些基础的指令看懂。或者通过网上的教程。但是这本书有一个不好的地方,就是这本书的汇编语言语法是参照NASM汇编器的Intel语法来编写的,但是本课程中所有的汇编程序都是基于GNU汇编器的AT&T语法的。这两种语法只是在一些细节上有所不同,这里MIT也为我们提供了一份资料用来描述这二者的不同"005. Inline Assembly with DJGPP"。
Exercise 1:
练习1并没有什么实质性内容,就是MIT建议我们要对汇编语言有个大致的了解,这样才能让后面的学习更加方便一点。
仿真X86计算机
这门课采用软件模拟的方式来调试整个操作系统,也就是说让xv6操作系统运行在一个用软件仿真出来的x86计算机上。这个仿真软件就是QEMU,这个仿真器有一个非常好的优点,就是它能和调试器GDB共同配合使用,这样的话我们就可以一条指令一条指令的调试运行在QEMU里面的xv6操作系统了。所以在这部分我们将学习如何搭建这个调试的环境。
1. 第一步自然是要安装QEMU到机器中了。
首先说一下我采取的是采用虚拟机vmware来运行一个ubuntu12.01系统,然后在这个系统上搭建整个环境的。
这个链接:https://en.wikibooks.org/wiki/QEMU/Linux 介绍了如何在ubuntu下安装Qemu的过程,其实就是下面这张图片中展示的这几个过程

你可以完全按照上面写的步骤来,打开一个terminal,然后随便到一个目录下,输入命令 git clone git://git.qemu-project.org/qemu.git这样就把QEMU的源文件都下载到本地了,此时目录下面多了一文件夹,叫qemu。
然后你就可以依次执行最下面的4个步骤。先cd到qemu目录下;然后输入./configure命令,这是运行一个配置文件;然后输入make,编译整个文件;最后安装,别忘了前面要输入sudo,这样就大工告成了~
听着很简单对不对~很轻松对不对~但是其实我告诉你...
..
..
根!本!没!有!这!么!容!易!
童!话!里!都!是!骗!人!的!
我在我的机器上执行./configure这一步骤时,报出了各种稀奇古怪的错误!并且解决了一个错误,又出现一个错误!最后安装这个QEMU就折腾了我一晚上! (╯‵□′)╯︵┻━┻
..
..
不过大家放心,我已经把解决方案都列出来了,你可以按照你出的错误类型来查找并且解决~我是雷锋
其实所有的错误都是因为你的系统中缺少某个软件所造成的,比如,它会在屏幕上显示下面这句话:
- Error: zlib check failed
- Make sure to have the zlib libs and headers installed.
这句话的含义就是你缺少软件'zlib',所以你要做的就是安装这个软件就好啦~
下面就是我遇到的所有缺少的软件(':'前面),以及对应的解决方案(':'后面),解决方案就是一系列的命令,你在terminal中输入即可自动安装(为什么我会遇到这么多问题T^T):
c++ compiler: sudo apt-get install g++
libtool : sudo apt-get install libtool
glib: sudo apt-get install libglib2.0-dev
pixman: sudo apt-get install libpixman-1-dev
zlib: sudo apt-get intall zlib1g-dev
dtc:
这样直到你的./configure文件运行后不会出现错误信息,只是出现一些配置信息的话,./configure这一步就完成了!
..
但是,你以为这就完了么~还有make呢,还有install呢~想想就蛋疼...
输入make后,就开始自动编译,如果你的电脑配置一般的话,在编译之前我给你个非常中肯的建议!那就是
..
..
睡!一!觉!
我的电脑整整编译了快一个小时!(╯‵□′)╯︵┻━┻
即便是实验室的台式机也编译了快30分钟! (╯‵□′)╯︵┻━┻ (╯‵□′)╯︵┻━┻
我还以为我电脑死机了有木有!
所以如果你的电脑寿命已超过3年,并且平时开机需要1分钟以上的话,准备好枕头吧..
..
make编译完成后,就可以输入sudo make install进行安装了,这一步不吓唬大家了,还是很快滴~。
这样我们就完成了Qemu的安装!
2. 利用QEMU来运行xv6操作系统
安装好QEMU之后,我们就可以用它来运行我们的操作系统啦~
当然第一步就是把操作系统的源代码拷贝下来啦,具体的方法我在 "0.写在前面的话" 这篇博文中的资料获取那一部分已经介绍啦,大家可以去那里看。
如果你懒到不想翻的话,那我就再大发慈悲告诉你一下~
首先打开一个terminal,然后任意cd到一个目录下,比如我都是在~/Documents这个目录下工作的。
然后输入 git clone https://github.com/fatsheepzzq/6.828mit.git 即可
这样你就会在你的当前目录下面看到一个文件夹6.828mit,这个文件夹下面有一个子文件夹lab,这里面存放的就是所有操作系统源码啦!
然后我们就要先编译这个操作系统源码,来生成能够运行在Qemu上的操作系统映像文件,我们只需要在lab目录下输入命令
make
这样计算机会为我们自动编译整个xv6操作系统,如果你的屏幕上显示下列信息,代表你已经编译成功啦

我们可以看一下它生成的最后一个信息 mk obj/kern/kernel.img,这个kernel.img就是内核映像文件,另外obj目录在make之前是没有的,它是make指令生成的,它里面将会有许多的文件我们之后会重点观察。
编译完内核源码,我们就可以把它运行在QEMU上啦!
首先还要是在lab目录下面,输入 make qemu,此时qemu就开始自动加载我们的操作系统内核映像文件了,如果你的屏幕上打印如下信息,就代表你终于运(tuo)行(li)成(ku)功(hai)了!

从6828 decimal.. 那句话开始之后的信息都是由xv6操作系统内核显示出来的~
到目前为止,你已经完成了在ubuntu上仿真x86计算机,并且运行xv6操作系统内核了!!
其实这一个part还有一部分内容没说,但是考虑到这里篇幅已经很长了,再加上我是那么追(lan)求(duo)简(cheng)约(xing)的人,所以我决定把part 1的下一部分再单开一篇博文来说(写第一篇博文就把自己打脸了有木有)~
最后还是欢迎大家的指正和提问,我的邮箱
zzqwf12345@163.com
称呼我时,叫我的艺名fatsheep就行~
MIT 6.828 JOS学习笔记1. Lab 1 Part 1: PC Bootstrap的更多相关文章
- MIT 6.828 JOS学习笔记2. Lab 1 Part 1.2: PC bootstrap
Lab 1 Part 1: PC bootstrap 我们继续~ PC机的物理地址空间 这一节我们将深入的探究到底PC是如何启动的.首先我们看一下通常一个PC的物理地址空间是如何布局的: ...
- MIT 6.828 JOS学习笔记7. Lab 1 Part 2.2: The Boot Loader
Lab 1 Part 2 The Boot Loader Loading the Kernel 我们现在可以进一步的讨论一下boot loader中的C语言的部分,即boot/main.c.但是在我们 ...
- MIT 6.828 JOS学习笔记18. Lab 3.2 Part B: Page Faults, Breakpoints Exceptions, and System Calls
现在你的操作系统内核已经具备一定的异常处理能力了,在这部分实验中,我们将会进一步完善它,使它能够处理不同类型的中断/异常. Handling Page Fault 缺页中断是一个非常重要的中断,因为我 ...
- MIT 6.828 JOS学习笔记17. Lab 3.1 Part A User Environments
Introduction 在这个实验中,我们将实现操作系统的一些基本功能,来实现用户环境下的进程的正常运行.你将会加强JOS内核的功能,为它增添一些重要的数据结构,用来记录用户进程环境的一些信息:创建 ...
- MIT 6.828 JOS学习笔记16. Lab 2.2
Part 3 Kernel Address Space JOS把32位线性地址虚拟空间划分成两个部分.其中用户环境(进程运行环境)通常占据低地址的那部分,叫用户地址空间.而操作系统内核总是占据高地址的 ...
- MIT 6.828 JOS学习笔记15. Lab 2.1
Lab 2: Memory Management lab2中多出来的几个文件: inc/memlayout.h kern/pmap.c kern/pmap.h kern/kclock.h kern/k ...
- MIT 6.828 JOS学习笔记10. Lab 1 Part 3: The kernel
Lab 1 Part 3: The kernel 现在我们将开始具体讨论一下JOS内核了.就像boot loader一样,内核开始的时候也是一些汇编语句,用于设置一些东西,来保证C语言的程序能够正确的 ...
- MIT 6.828 JOS学习笔记4. Lab 1 Part 2.1: The Boot Loader
Part 2: The Boot Loader 对于PC来说,软盘,硬盘都可以被划分为一个个大小为512字节的区域,叫做扇区.一个扇区是一次磁盘操作的最小粒度.每一次读取或者写入操作都必须是一个或多个 ...
- MIT 6.828 JOS学习笔记0. 写在前面的话
0. 简介 操作系统是计算机科学中十分重要的一门基础学科,是一名计算机专业毕业生必须要具备的基础知识.但是在学习这门课时,如果仅仅把目光停留在课本上一些关于操作系统概念上的叙述,并不能对操作系统有着深 ...
随机推荐
- Python: 程序print到文件中
Python 3.x 将输出内容写入到一个文件,需要两个命令.open指明Python用什么文件名,w 意味着我们要写入该文件, encoding=”utf-8″指明Python如何把中文写入该文件. ...
- 修改EsayUi 中 tree 的原有样式,变为according 之类的样式 ,且子菜单显示在右侧
easyUi 中 tree 框架的属性有: 修改原有展开样式代码如下: onExpand:function(node,param){ $(this).children("li"). ...
- 【mongo】pymongo通过_id删除数据
来源:http://www.educity.cn/wenda/361741.html pymongo 根据 objectId _id 来删除数据想要删除数据,根据_id ,是最靠谱的,具体方法因为 _ ...
- WIN7 64位系统下,右下角的声音和电源图标不见的解决办法
近日,电脑突然出现任务栏右下角的声音和电源图标消失不见的问题,重启仍旧没有修复,后来找到了解决办法 解决办法: 1.Ctrl+Shift+Esc键调出windows资源管理器. 2.找到进程中的exp ...
- 3ds max的动画输出
转自:http://zhidao.baidu.com/link?url=qc3vV2A9-ydb-YiVKoF7z_bIIRlmLSkyl8DcuWNYn8FaBxa2BDVLwuGPX_jYWxbw ...
- Eclipse CDT launch failed.Binary not found in Linux/Ubuntu
转自:http://blog.csdn.net/abcjennifer/article/details/7573916 Linux下出现launch failed.Binary not found的解 ...
- mysql my.cnf配置文件详解
本配置文件针对Dell R710,双至强E5620.16G内存的硬件配置.CentOS 5.6 64位系统,MySQL 5.5.x 稳定版.适用于日IP 50-100w,PV 100-300w的站点, ...
- java 小数点处理
public class Test { public static void main(String[] args) { double i = 3.856; // 舍掉小数取整 System.out. ...
- 设计模式之构建者模式(Builder):初步理解
构建者(Builder)设计模式(又叫生成器设计模式): 当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如Config.VO.PO.Entity...),要创建的话可能就需要了解这个类的 ...
- JAVA数据库基本操作 (转)
JAVA数据库基本操作指南 Java数据库操作基本流程:取得数据库连接 - 执行sql语句 - 处理执行结果 - 释放数据库连接. 一.取得数据库连接 1.用DriverManager取数据库连接 ...