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)。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章