通過兩天的安裝,終於把simplescalar安裝成功,安裝過程當中在網上找了不少資料,可是不少都是關於低版本ubuntu安裝的過程,並且按照這些教程也沒有安裝成功,來記錄一下安裝中出現的問題及解決方案。html
1、安裝參考文章linux
http://godblesstangkk.blogspot.com/2013/01/install-simplescalar-30-on-ubuntu-1204.htmlc++
2、安裝環境信息ubuntu
安裝的電腦系統是ubuntu14.10 64位操做系統,以下圖:bash
3、安裝過程less
一、下載安裝文件,能夠到此下載:http://pan.baidu.com/s/1gduH9sf 測試
下載的包中包含了4個安裝須要的tar包(simplesim-3v0e.tgaz, simpletools-2v0.tgz,simpleutils-990811.tar.gz,gcc-2.7.2.3.ss.tar.gz)和一個文件夾(install needed),install needed文件夾中包含了兩個文件ar 和 ranlib,這兩個文件會在後面安裝gcc-2.7.2.3時用到。flex
二、設置環境變量ui
1> 編譯用戶目錄下的.bashrc文件,在次文件最後加上下面的語句:spa
export IDIR=/any/directory/you/choose/(你本身要安裝的目錄)
export HOST=i686-pc-linux
export TARGET=sslittle-na-sstrix
而後記得執行一下命令「source .bashrc」讓設置的環境變量生效!
注:IDIR是軟件安裝的目錄,選擇本身的安裝目錄; HOST中的i686指定了模擬器目標CPU的體系結構,其餘可能的值是「arm", "mips", "i386"等等,pc指定了公司,linux指定了你的操做系統,其餘可能的值是」solaris「, 」gnu「等等;TARGET部分指定系統是用大尾端存儲仍是小尾段存儲。
2> 建立要安裝的文件夾,能夠經過使用」mkdir $IDIR"來建立,而後把全部安裝要用到的tar包都移動這個目錄中。
3> 更新本身電腦中的軟件,使用sudo apt-get update 來更新。
而後安裝下面的軟件包(可使用指令sudo apt-get install <package name>來安裝):
build-essential
flex
bison
gcc-multilib(先不要安裝)
g++-multilib(先不要安裝)
注:此時先安裝上面的三個軟件包(build-essential、flex、bison),gcc-multilib和g++-multilib先不要安裝,由於我在安裝的時候就直接安裝了這兩個包,致使在安裝gcc-2.7.2.3時出現了一些錯誤,錯誤的緣由是安裝gcc-multilib和g++-multilib時會直接安裝更新本身系統的gcc,由於沒有安裝這兩個包以前個人gcc是4.9版本,安裝以後gcc變成5.2.1了;因此猜想出錯的緣由是gcc版本過高了,具體的錯誤在後面會提到。
三、解壓Simpletools-2v0
執行下面的指令:
cd $IDIR
tar xvfz simpletools-2v0.tgz
rm -rf gcc-2.6.3 (刪除這個文件夾,由於會安裝新的版本的gcc,就是gcc-2.7.2.3)
完成這寫指令後,在$IDIR目錄下會獲得ssbig-na-sstrix和sslittle-na-sstrix文件夾,它們中都包含了一個include文件夾和一個lib文件夾。
四、安裝SimpleUtils-990811
執行下面的指令:
cd $IDIR
tar xvfz simpleutils-990811.tar.gz
cd simpleutils-990811
而後修改ld目錄下的ldlex.l文件,把此文件中的「yy_current_buffer"替換成YY_CURRENT_BUFFER".
而後回到simpleutils-990811目錄,執行下面的命令:
./confing --host=$HOST --target=$TARGET --with-gnu-as --with-gnu-ld --prefix=$IDIR
make
make install
執行完這些命令後,在$IDIR目錄下會有bin、lib、include、man、share等文件夾(其實還有f2c-1994.09.27和glibc-1.09兩個文件夾),另外,在sslittle-na-sstrix文件夾下多了一個bin文件夾)
五、安裝simplesim-3v03
首先,解壓文件simplesim-3v0e.tgz,執行下面的命令:
cd $IDIR
tar xvfz simplesim-3v0e.tgz
cd simplesim-3.0
make config-pisa
make
注:其中make config-pisa指令要根據本身的須要來選取,若是你須要alpha結果,要改變target配置,而且須要make clean 而後在make config-alpha.
若是這些命令都成功執行後,會看到」my work is done here ..."的消息.
而後能夠運行一下模擬器試試,運行下面的命令:
./sim-safe tests/bin.little/test-math
而後你會看到像下面的信息:
sim: ** starting functional simulation **
pow(12.0, 2.0) == 144.000000
pow(10.0, 3.0) == 1000.000000
pow(10.0, -3.0) == 0.001000
...
六、安裝gcc交叉編譯器(這部分是最容易出錯的地方)
首先解壓文件,運行下面的命令:
cd $IDIR
tar xvfz gcc-2.7.2.3.ss.tar.gz
cd gcc-2.7.2.3
./configure --host=$HOST --target=$TARGET --with-gnu-as --with-gnu-ld --prefix=$IDIR
此時,咱們還不能編譯,由於因爲各類不兼容性會致使很是多的錯誤,咱們先來修改一下源程序。
1> 使咱們對當前的目錄有寫的權限,執行下面的命令
chmod -R +w . (不要忘記了後面的那個小點 」 . ")
2> 修改Makefile文件,在130行的行末添加「-I/usr/include"
3> 修改protoize.c文件,把60行處的<varargs.h>改成<stdarg.h>
4> 修改obstack.h文件,在341行處,把*((void **)__o->next_free)++ 改成 *((void **)__o->next_free++)
5> 運行下面的命令(注意如今仍是處於$IDIR/gcc-2.7.2.3目錄下)
cp ./patched/sys/cdefs.h ../sslittle-na-sstrix/include/sys/cdefs.h
cp ../sslittle-na-sstrix/lib/libc.a ../lib/
cp ../sslittle-na-sstrix/lib/crt0.o ../lib/
而後開始編譯:
make LANGUAGES="c c++" CFLAGS="-O" CC="gcc"
此時會出現一個錯誤,錯誤的地方是insn-output.c文件,編輯這個文件,在第675 、750、823行末加上一個反斜槓」\"。(注:若是你make clean 後,而後有從新make,須要再次修改這個文件,由於這個文件是編譯過程當中產生的)
注:若是你在剛開始時安裝了gcc-multilib和g++-multilib,若此時你的gcc變爲5.0版本了那麼此時編譯會出現一個「recipe for target '../cc1plus' failed」這樣的錯誤,在我make clean之後,而後gcc版本換成4.9後就沒有這個錯誤了,因此這個錯誤多是gcc版本引發的。
而後再次make:
make LANGUAGES="c c++" CFLAGS="-O" CC="gcc"
此時會在出現一個錯誤,相似有下面的信息:
"*** buffer overflow detected ***: /home/tangkk/simplescalar/sslittle-na-sstrix/bin/ar terminated"
修復這個錯誤就用到了,安裝包裏的install needed文件中的兩個文件了,把這兩個文件(ar和ranlib)放到$IDIR/sslittle-na-sstrix/bin目錄下。而後修改它們的權限,使其變爲可執行文件,使用下面指令:
cd $IDIR/sslittle-na-sstrix/bin/
chmod +x ar ranlib
而後回到gcc.2.7.2.3目錄,再一次編譯:
make LANGUAGES="c c++" CFLAGS="-O" CC="gcc"
而後若是出現「recipe for target 'libgcc1.null' failed」這樣的錯誤,此時再裝gcc-multilib而後在從新編譯就不會有這個錯誤了。
而後在執行編譯命令:
此時若出現文件關於cxxmain.c的錯誤,能夠經過修改cxxmain.c文件,把裏面第2978和2979行註釋掉,而後在從新編譯。
到這時應該就沒有錯誤了。
七、Make enquire
一樣在$IDIR/simplescalar/gcc-2.7.2.3目錄下,執行下面的指令:
make enquire
若出現「undefined reference to `__isoc99_sscanf」這樣的錯誤,須要修改Makefile文件,在第995行「$(ENQUIRE_CFLAGS)"後面加上」-D_GNU_SOURCE「,而後在從新編譯。
執行make enquire
若是出現」/bin/sh: 1: cc: not found「這樣的錯誤,那就須要修改Makefile,在第60行,修改 CC=cc 爲 CC=gcc,而後在執行make enquire。
而後就編譯完了。
而後執行下面的命令來安裝交叉編譯器:
八、測試
能夠寫一個hello world程序來進行測試。
寫一個hello.c的文件內容以下:
#include<stdio.h>
main(){
printf("Hello World!\n");
}
而後使用交叉編譯器來編譯它。命令以下:
$IDIR/bin/sslittle-na-sstrix-gcc –o hello hello.c
(若是這樣運行失敗了,能夠試着進入上面的bin文件夾,假設hello.c文件在$IDIR目錄下,使用命令"./sslittle-na-sstrix-gcc -o ../hello ../hello.c"來運行,若是仍是失敗,多是環境變量混亂的問題,關閉並重啓終端,而後再試)
若是看到了下面的信息: