6.828学习笔记2 - QEMU和x86汇编语言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6.828学习笔记2 - QEMU和x86汇编语言相关的知识,希望对你有一定的参考价值。

 

    6.828的工具都装好了,在正式开始实验之前,要先熟悉每个工具的使用。对于我这种小白用户,需要熟悉的更多。

   1、x86汇编语言

    果然,课程首先让我熟悉汇编语言,并提供了两份参考文献。虽然我对汇编语言离熟悉还差十万八千里,不过好歹是用过的。我感到如果想要保持学习的兴趣,目前采取“如无必要,绝不深究”的态度非常重要。所以对汇编语言就先这样。我把参考文献下载到本地,然后跳到下一步。

    2、模拟x86

    课程给出了QEMU的作用、特性和辅助调试工具(GDB),不过这些细节我现在还统统不感兴趣。程序能跑起来才是我目前最关心的。

    结果悲剧了。课程中使用的编译环境和我自己搭建的不一样,里面的操作基本用不了。既然easy way走不通,只好开启hard模式了。直接看QEMU的文档吧。

    (1)QEMU文档的部分内容

    a. QEMU是什么

    QMEU是处理器的模拟器,它最大的特色就是快。也许这就是课程选择它作为目标机模拟器的原因吧。

    QMEU有两种操作模式:全系统模拟和用户模式模拟。

    b. QEMU可以模拟什么

    从给出的列表来看,可模拟的设备相当多。因为我对计算机系统的硬件了解有限,这些设备还只是名字而已。

    c. 启动系统镜像

    重点来了,文档里对系统镜像的启动只有三行。

    第一行:下载并解压linux镜像(linux.img);

    第二行:执行qemu-system-i386 linux.img;

    第三行:linux将启动,并给出提示符。

    看到这里,我的内心是崩溃的。如此简单,又如此困难。因为我既没找到下载linux镜像的方法,也不知道如何执行命令。

    自己不行,就百度吧。这样,我找到了fatsheep9146的博客。好神奇啊,他也自学了6.828。既然前人都已经探过路了,为什么一定要自己走呢?

    (2)fatsheep9146的方案

    读了他的博客文章,发现开发环境和我的不一样。他是用VMware运行ubuntu,将它作为编译环境。然后再ubuntu中下载了QEMU来使用。这和我想的不一样啊,原来可以在虚拟系统中运行虚拟系统!

    如果是这样,整个开发环境就好多了。下面按课程文档中给出的linux环境下载和安装QMEU的步骤

    a. 克隆仓库 git clone http://web.mit.edu/ccutler/www/qemu.git -b 6.828-2.3.0;

    b. 安装SDL开发库 sudo apt-get install libsdl1.2-dev

    c. 配置QEMU ./configure --disable-kvm --target-list="i386-softmmu x86_64-softmmu"

    里面只报了两个问题:

    c++ compliler:sudo apt-get install g++

    pixman:sudo apt-get install libpixman-1-dev

    d. 执行make编译,然后执行sudo make install安装。

    (3)运行实验中的镜像

    首先cd到工作文件夹,然后克隆源代码 

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

    上面的命令会得到一个lab文件夹,进入这个文件夹,执行make编译,就得到kernel.img了。

    要把内核镜像运行在QEMU上,需要继续在lab文件夹内执行make qemu。

    

    

    

    

 

以上是关于6.828学习笔记2 - QEMU和x86汇编语言的主要内容,如果未能解决你的问题,请参考以下文章

MIT 6.828 JOS学习笔记7. Lab 1 Part 2.2: The Boot Loader

MIT 6.828 JOS学习笔记5. Exercise 1.3

MIT 6.828 JOS学习笔记8. Exercise 1.4

MIT 6.828 JOS学习笔记16. Lab 2.2

MIT 6.828 JOS学习笔记4. Lab 1 Part 2.1: The Boot Loader

《MIT 6.828 Lab1: Booting a PC》实验报告