Xv6相关编译调试环境配置6.828

6.828中使用的工具


      你将在这个课程中使用两套工具:一个x86模拟器,QEMU,用于运行你的内核; 和一个编译器工具链,包括汇编器,链接器,C编译器和调试器,用于编译和测试你的内核。此页面提供您需要下载并安装自己的副本的信息。这个课程假定你熟悉Unix命令。

      我们强烈建议使用Debathena机器,例如athena.dialup.mit.edu来实验室。如果您使用运行Linux的MIT Athena机器,那么您需要的所有软件工具都位于6.828更衣室中:只需输入'add -f 6.828'即可访问它们。

        如果您无法访问Debathena机器,我们建议您在Linux中使用虚拟机。如果你真的想,你可以在你自己的机器上构建和安装这些工具。我们有关于Unix和MacOS电脑的说明。

       在Cygwin的帮助下,应该可以让这个开发环境在windows下运行。安装cygwin,并确保安装flex和bison软件包(它们位于开发标题下)。

有关6.828中使用的工具中有用命令的概述,请参阅实验室工具指南。

编译器工具链


“编译器工具链”是一组程序,包括C编译器,汇编器和链接器,它们将代码转换为可执行的二进制文件。您需要一个编译器工具链,以ELF二进制格式为32位Intel体系结构(“x86”体系结构)生成代码。

测试你的编译器工具链


现代Linux和BSD UNIX发行版已经提供了适用于6.828的工具链。要测试您的分配,请尝试以下命令:

%objdump -i

第二行应该说elf32-i386。

%gcc -m32 -print-libgcc-file-name

该命令应打印出类似这样:/usr/lib/gcc/i486-linux-gnu/version/libgcc.a或/usr/lib/gcc/x86_64-linux-gnu/version/32/libgcc.a

如果这两个命令都成功了,那么你就全部设置好了,并且不需要编译你自己的工具链。

如果gcc命令失败,则可能需要安装开发环境。在Ubuntu Linux上,试试这个:

%sudo apt-get install -y build-essential gdb

在64位机器上,您可能需要安装32位支持库。症状是链接失败,并显示“__udivdi3未找到”和“__muldi3未找到”等错误消息。在Ubuntu Linux上,试试这个来解决这个问题:

%sudo apt-get install gcc-multilib

使用虚拟机


否则,获得兼容工具链的最简单方法是在您的计算机上安装现代Linux发行版。通过平台虚拟化,Linux可以与普通的计算环境共存。安装Linux虚拟机是一个两步过程。首先,你下载虚拟化平台。

    VirtualBox(Mac,Linux,Windows免费) - 下载页面
    VMware Player(免费用于Linux和Windows,需要注册)
    VMware Fusion(可从IS&T免费下载)。

VirtualBox速度较慢,灵活性较差,但免费!

一旦安装了虚拟化平台,请为您选择的Linux发行版下载启动磁盘映像。

    Ubuntu桌面是我们使用的。

这会下载一个名为ubuntu-10.04.1-desktop-i386.iso的文件。启动虚拟化平台并创建一个新的(32位)虚拟机。使用下载的Ubuntu映像作为启动盘;这个过程在不同的虚拟机之间有所不同,但非常简单如上所述输入objdump -i,以验证您的工具链是否已设置好。你会在虚拟机内完成你的工作。

构建您自己的编译工具链


这将需要更长的时间来设置,但性能要比虚拟机略好,并且可以让您在自己熟悉的环境(Unix / MacOS)中工作。 (我们相信这些说明也适用于MacOS,但最近还没有确认,如果有效,让我们知道。)

您可以通过将以下行添加到conf / env.mk来使用自己的工具链:

GCCPREFIX =

我们假设您正在将工具链安装到/ usr / local中。您将需要相当数量的磁盘空间来编译工具(大约1GB)。如果您没有足够的空间,请在安装make步骤后删除每个目录。

下载下列软件包:

    ftp://ftp.gmplib.org/pub/gmp-5.0.2/gmp-5.0.2.tar.bz2
    http://www.mpfr.org/mpfr-current/mpfr-3.1.2.tar.bz2
    http://www.multiprecision.org/mpC/download/mpc-0.9.tar.gz
    http://ftpmirror.gnu.org/binutils/binutils-2.21.1.tar.bz2
    http://ftpmirror.gnu.org/gcc/gcc-4.6.1/gcc-core-4.6.1.tar.bz2
    http://ftpmirror.gnu.org/gdb/gdb-7.3.1.tar.bz2

(您也可以使用这些软件包的较新版本。)解包并构建软件包。绿色粗体文本显示如何安装到/ usr / local,这是我们推荐的。要安装到不同的目录中,请点击这里。如果您遇到问题,请参阅下文。

tar xjf gmp-5.0.2.tar.bz2
cd gmp-5.0.2
./configure --prefix=/usr/local
make
make install             # This step may require privilege (sudo make install)
cd ..

tar xjf mpfr-3.0.1.tar.bz2
cd mpfr-3.0.1
./configure --prefix=/usr/local
make
make install             # This step may require privilege (sudo make install)
cd ..

tar xzf mpc-0.9.tar.gz
cd mpc-0.9
./configure --prefix=/usr/local
make
make install             # This step may require privilege (sudo make install)
cd ..


tar xjf binutils-2.21.1.tar.bz2
cd binutils-2.21.1
./configure --prefix=/usr/local --target=i386-jos-elf --disable-werror
make
make install             # This step may require privilege (sudo make install)
cd ..

i386-jos-elf-objdump -i
# Should produce output like:
# BFD header file version (GNU Binutils) 2.21.1
# elf32-i386
#  (header little endian, data little endian)
#   i386...


tar xjf gcc-core-4.6.1.tar.bz2
cd gcc-4.6.1
mkdir build              # GCC will not compile correctly unless you build in a separate directory
cd build
../configure --prefix=/usr/local \
    --target=i386-jos-elf --disable-werror \
    --disable-libssp --disable-libmudflap --with-newlib \
    --without-headers --enable-languages=c

cd gmp-5.0.2
./configure --prefix=/usr/local
make
make install             # This step may require privilege (sudo make install)
cd ..

tar xjf mpfr-3.0.1.tar.bz2
cd mpfr-3.0.1
./configure --prefix=/usr/local
make
make install             # This step may require privilege (sudo make install)
cd ..

tar xzf mpc-0.9.tar.gz
cd mpc-0.9
./configure --prefix=/usr/local
make
make install             # This step may require privilege (sudo make install)
cd ..


tar xjf binutils-2.21.1.tar.bz2
cd binutils-2.21.1
./configure --prefix=/usr/local --target=i386-jos-elf --disable-werror
make
make install             # This step may require privilege (sudo make install)
cd ..

i386-jos-elf-objdump -i
# Should produce output like:
# BFD header file version (GNU Binutils) 2.21.1
# elf32-i386
#  (header little endian, data little endian)
#   i386...


tar xjf gcc-core-4.6.1.tar.bz2
cd gcc-4.6.1
mkdir build              # GCC will not compile correctly unless you build in a separate directory
cd build
../configure --prefix=/usr/local \
    --target=i386-jos-elf --disable-werror \
    --disable-libssp --disable-libmudflap --with-newlib \
    --without-headers --enable-languages=c

MAC OS X 10.7 "LION" NOTE: The default clang compiler on Mac OS X 10.7cannot build a working version of GCC. Use the following configureline to work around the problem (this has reported to work with OS X 10.9.4 withXCode 5.1.1 and its Command Line Tools package (for gcc):../configure --prefix=/usr/local \ --target=i386-jos-elf --disable-werror \ --disable-libssp --disable-libmudflap --with-newlib \ --without-headers --enable-languages=c \ CC=/usr/bin/gcc-4.2 \make all-gccmake install-gcc # This step may require privilege (sudo make install-gcc)make all-target-libgccmake install-target-libgcc # This step may require privilege (sudo make install-target-libgcc)cd ../..i386-jos-elf-gcc -v# Should produce output like:# Using built-in specs.# COLLECT_GCC=i386-jos-elf-gcc# COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i386-jos-elf/4.6.1/lto-wrapper# Target: i386-jos-elftar xjf gdb-7.3.1.tar.bz2cd gdb-7.3.1./configure --prefix=/usr/local --target=i386-jos-elf --program-prefix=i386-jos-elf- \ --disable-werrormake allmake install # This step may require privilege (sudo make install)cd ..

故障排除

问:我无法运行make install,因为我在这台机器上没有root权限。

答:我们的指示假定您正在安装到/ usr / local目录中。但是,您的环境中可能不允许这样做。如果您只能将代码安装到您的主目录中,那没关系。在上面的说明中,用--prefix = $ HOME替换--prefix = / usr / local(点击这里更新指令)。您还需要更改PATH和LD_LIBRARY_PATH(Linux)或DYLD_LIBRARY_PATH(Mac OS X)环境变量,以通知您的shell在何处找到工具。例如:
export PATH = $ HOME / bin:$ PATH
导出LD_LIBRARY_PATH = $ HOME / lib:$ LD_LIBRARY_PATH

在〜/ .bashrc文件中输入这些行,以便在您每次登录时不需要输入它们。

问:我的构建失败,并提供了有关“未找到库”的难以理解的消息。

A.您需要设置您的LD_LIBRARY_PATH(Linux)或DYLD_LIBRARY_PATH(Mac OS X)环境变量以包含您构建的库;往上看。环境变量必须包含PREFIX / lib目录(例如/ usr / local / lib)。

QEMU模拟器

QEMU是一款现代且快速的PC模拟器。 QEMU 2.3.0版本针对6.828更衣室中x86机器的Athena设置(添加-f 6.828)

不幸的是,QEMU的调试工具虽然功能强大,但有些不成熟,所以我们强烈建议您使用我们的QEMU补丁版本,而不是可能随您的发行版提供的版本。 Athena上安装的版本已经修补。要构建您自己的补丁版本的QEMU:
 
1、克隆IAP 6.828 QEMU git存储库git clone http://web.mit.edu/ccutler/www/qemu.git -b 6.828-2.3.0
2、在Linux上,您可能需要安装多个库。安装以下软件包后,我们已成功在Debian / Ubuntu 16.04上构建了6.828 QEMU:libsdl1.2-dev,libtool-bin,libglib2.0-dev,libz-dev和libpixman-1-dev。
3、配置源代码(可选参数显示在方括号中;将PFX替换为您选择的路径)

Linux:./configure --disable-kvm [--prefix = PFX] [--target-list =“i386-softmmu x86_64-softmmu”](方括号不用输进去,亲测成功的命令为./configure --target-list=x86_64-softmmu --disable-kvm --enable-debug)

OS X:./configure --disable-kvm --disable-sdl [--prefix = PFX] [--target-list =“i386-softmmu x86_64-softmmu”]前缀参数指定安装QEMU的位置;没有它,默认情况下,QEMU将安装到/ usr / local。目标列表参数只是简化了QEMU将支持的架构。

4、运行make && make install(如果提示没有权限前面加上sudo)。

猜你喜欢

转载自blog.csdn.net/qq_36116842/article/details/79855103
今日推荐