0%

MIT6.828课程之环境搭建

前言

6.828:Operating System Engineering
操作系统课程实验环境配置教程
课程地址:https://pdos.csail.mit.edu/6.828/2018/schedule.html
按照labs->tools中教程进行配置即可,不过用到的很多文件及依赖已经被淘汰了,可能会有一些报错,可参考本文中的解决方法。
实验环境选用VMware即可,博主用的腾讯云轻量应用服务器
操作系统:Ubuntu Server 20.04 LTS 64bit

Compiler Toolchain

Test Toolchain

1
$ objdump -i    //  second line says elf32-i386

测试gcc

1
$ gcc -m32 -print-libgcc-file-name 	

成功则显示

腾讯云搭载了部分基础的应用及依赖,虚拟机新系统可能没有,可运行以下指令安装。

1
2
$sudo apt-get install -y build-essential gdb git vim
$sudo apt-get install gcc-multilib

Build Toolchain

Download Package

官方网站的gmp下载链接可能无法访问,按以下链接下载即可。

Unpack and Build

Install gmp-5.0.2
1
2
3
4
5
6
$tar xjf gmp-5.0.2.tar.bz2
$cd gmp-5.0.2
$./configure --prefix=/usr/local
$make
$sudo make install
$cd ..

若第三条指令显示No usable m4 in $PATH or /usr/5bin是缺失库文件,执行以下指令再重新执行第三条指令。

1
$sudo apt install m4
Install mpfr-3.1.2
1
2
3
4
5
6
$tar xjf mpfr-3.1.2.tar.bz2
$cd mpfr-3.1.2
$./configure --prefix=/usr/local
$make
$sudo make install
$cd ..
Install mpc-0.9
1
2
3
4
5
6
$tar xzf mpc-0.9.tar.gz
$cd mpc-0.9
$./configure --prefix=/usr/local
$make
$sudo make install
$cd ..
Install binutils-2.21.1
1
2
3
4
5
6
$tar xjf binutils-2.21.1.tar.bz2
$cd binutils-2.21.1
$./configure --prefix=/usr/local --target=i386-jos-elf --disable-werror
$make
$sudo make install
$cd ..

测试结果

1
$i386-jos-elf-objdump -i

安装成功则输出以下信息

Install gcc-core-4.6.4

gcc需要单独的目录否则编译不成功

1
2
3
4
5
6
7
8
9
10
11
12
13
$tar xjf gcc-core-4.6.4.tar.bz2
$cd gcc-4.6.4
$mkdir build
$cd build
$../configure --prefix=/usr/local \
--target=i386-jos-elf --disable-werror \
--disable-libssp --disable-libmudflap --with-newlib \
--without-headers --enable-languages=c MAKEINFO=missing
$make all-gcc
$sudo make install-gcc
$make all-target-libgcc
$sudo make install-target-libgcc
$cd ../..

若第八条指令报错configure-target-libgcc

则执行以下命令后重新执行第八条指令

1
$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 

测试安装结果

1
$i386-jos-elf-gcc -v

成功后输出以下信息

Install gdb-7.3.1
1
2
3
4
5
6
7
$tar xjf gdb-7.3.1.tar.bz2
$cd gdb-7.3.1
$./configure --prefix=/usr/local --target=i386-jos-elf --program-prefix=i386-jos-elf- \
--disable-werror
$make all
$sudo make install
$cd ..

若第四条指令报错no termcap library found,缺少库文件,执行以下指令安装termcap后重新执行。

1
2
3
4
5
6
$wget http://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz
$tar -zxv -f termcap-1.3.1.tar.gz
$cd termcap-1.3.1
$ ./configure
$make
$sudo make install

QEMU

QEMU是一种现代且快速的 PC 模拟器,828课程要求该课程定制的QEMU版本。
直接用官方教程中的指令可能会报错,可以尝试更换python版本。

Install Tools

1
2
$sudo apt install libsdl1.2-dev libtool-bin libglib2.0-dev  libz-dev  libpixman-1-dev
$sudo apt install python2

若执行第一条指令后发现apt,git等指令无法正常使用,报错undefined symbol: __gmpz_limbs_write,则执行以下指令:

1
2
$cd /usr/local/lib
$sudo rm libgmp*

Install QEMU

1
2
3
4
$git clone https://github.com/mit-pdos/6.828-qemu.git qemu
$./configure --disable-kvm --disable-werror --prefix=/usr/local --target-list="i386-softmmu x86_64-softmmu" --python=python2
$make
$sudo make install

遇到报错如下:

解决方法:在 qga/commands-posix.c文件中的 #include <sys/types.h> 下面增加#include <sys/sysmacros.h>

Test QEMU

下载实验源码进行测试

1
2
3
4
$git clone https://pdos.csail.mit.edu/6.828/2018/jos.git lab
$cd lab
$make
$make qemu-nox

测试成功界面