MIT-6.828-lab1.1

6.828 Fall 2007 Lab 1: Booting a PC

1.简介

这个实验被分为三个部分。

第一部分精要地包括了以下三个部分:

1、  x86汇编语言

2、  x86仿真器-Bochs

3、  PC机加电开机启动流程

第二部分主要讲述了针对于6.828内核的bootloader部分。这部分的代码是放在lab1目录树的boot目录中。

第三部分则深入研究了JOS初始化设置。这个部分的代码是放在kernel目录中。

2.环境搭建

首先需要下载bochs。这里所用的版本是:bochs-2.2.6.tar.gz。如果觉得可能版本不对,或者觉得使用不便(最好使用同一版本)。可以到CSDN

http://download.csdn.net/source/3482301

略为有所不便的是,需要帐号及密码。实际上以上链接中包含了所需课程资源。

下载之后,便是需要安装bochs。

同时以下网址也提供了一份安装方法:

http://pdos.csail.mit.edu/6.828/2007/tools.html

下面按照网上所提供的方法进行编译与安装:

$ tar zxvf bochs-2.2.6.tar.gz

$cd bochs-2.2.6

$./configure --prefix=/usr  --enable-cdrom \

                 --enable-disasm \

            --enable-smp \

            --enable-debugger \

            --enable-new-pit \

            --enable-all-optimizations \

            --enable-4meg-pages \

            --enable-global-pages \

            --enable-pae \

            --disable-reset-on-triple-fault \

            --with-all-libs \

            --with-x \

            --with-x11 \

            --with-nogui

在编译的过程中如果出错。可能与CPU的类型也有关系。

下面解释一下编译中各个参数的含义:

如果出现如下界面:

MIT-6.828-lab1.1_第1张图片

表示配置成功。否则可能是出错的。

接下只要

$ make

$ make install

则可安装成功。

2.1 配置参数

现将各配置参数含义罗列如下:

--enable-cdrom: 支持CDROM

--enable-disasm: 使得Bochs可以反汇编机器指令,disasm是disassemble的缩写。

--enable-smp: 支持SMP配置。

--enable-debugger: 使得用户可以使用bochs自带的调试器进行调试。

--enable-new-pit: 使用新的更加完善的pit模块。

--enable-all-optimizations: 打开所有的速度优化选项。

--enable-4meg-pages: 支持4M页面扩展。

--enable-global-pages: 支持全局页面特性。避免经常使用的页面从TLB中移出。

--enable-pae: 支持特理地址扩展。

--disable-reset-on-triple-fault: 关闭三次错误之后自动重启。

--with-all-libs: 使用所有的库。

--with-x: 使用Xwindows.

--with-x11: 使用x11桌面系统。

--with-nogui: 不使用幼稚的GUI。

其他参数可以通过使用:

$ ./configure --help

2.2 初试Lab1

下载lab1.tar.gz。然后:

$ tar zxvf lab1.tar.gz

$ cd lab1

$ make

$ bochs

运行之后,在终端中输入c:

则可以看到OS起来之后的情况。

MIT-6.828-lab1.1_第2张图片

3. 第一部分PC启动

3.1开始接触x86汇编语言

如果你对x86汇编语言不熟悉,那么在这一节课里面你需要快速地了解汇编语言。通过《PC Assembly Languadge Book》是比较好的用于着书的书。这本包含了一些新旧材料。

但是这本是用NASM语言来编写的。但是在我们的项目中,我们会用GNU汇编器。NASM用的是Intel语法。但是GNU汇编器用的是AT&T语法。尽管功能等价,但是从语法上看来,两者的差距还明显的。两者的转换也是比较容易的,在Brennan的《Guide to Inline Assembly》也进行了介绍,同时具体讲述了内联函数。

Exercise 1. Read or at least carefully scan the entire PC Assembly Language book, except that you should skip all sections after 1.3.5 in chapter 1, which talk about features of the NASM assembler that do not apply directly to the GNU assembler. You may also skip chapters 5 and 6, and all sections under 7.2, which deal with processor and language features we won't use in 6.828. Also read the section "The Syntax" in Brennan's Guide to Inline Assembly to familiarize yourself with the most important features of GNU assembler syntax.

练习1:仔细阅读《PC Assembly Language book》,当然你可以跳掉第一章1.3.5之后的部分。这一部分主要是讲NASM的语法特性,这些特性在后面的实验中是用不到的。第5章与第6章也可以跳掉,7.2之后的部分也可以跳掉。这些部分主要是处理CPU和语言特性,这些东西我们都不可能用到。另外需要读取内联汇编的语法,因为在后面的内核中会经常用到。

当然x86汇编语言编程权威的参考是Intel指令集。现在可以找到两种版本:

1、  HTML版本:http://pdos.csail.mit.edu/6.828/2007/readings/i386/toc.htm这个是比较简短的版本,并且介绍了x86的所有特性。

2、  Intel-32架构软件开发者手册。

http://developer.intel.com/products/processor/manuals/index.htm

   这个版本包含了CPU经常使用的所有特性,尽管有些特性我们用不到,但是也可能感兴趣。另外一个等价的指令集是可以从AMD(http://developer.amd.com/Pages/default.aspx) 处拿到。这个版本包含了64位AMD,Intel的CPU的特性。

 

你除了读以上推荐的章节以外。最好把Intel/AMD的手册也保存下,因为可能后面会用到一些定义或者处理器的特性。


关于汇编的学习。放在本博客的汇编语言-gas类别中。


你可能感兴趣的:(汇编,assembly,扩展,语言,features,X86)