經過兩天的安裝,終於把simplescalar安裝成功,安裝過程中在網上找了很多資料,但是很多都是關於低版本ubuntu安裝的過程,而且按照這些教程也沒有安裝成功,來記錄一下安裝中出現的問題及解決方案。
一、安裝參考文章
http://godblesstangkk.blogspot.com/2013/01/install-simplescalar-30-on-ubuntu-1204.html
二、安裝環境信息
安裝的電腦系統是ubuntu14.10 64位操作系統,如下圖:
三、安裝過程
1、下載安裝文件,可以到此下載: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時用到。
2、設置環境變量
1> 編譯用戶目錄下的.bashrc文件,在次文件最后加上下面的語句:
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版本太高了,具體的錯誤在后面會提到。
3、解壓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文件夾。
4、安裝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文件夾)
5、安裝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
...
6、安裝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行注釋掉,然后在重新編譯。
到這時應該就沒有錯誤了。
7、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。
然后就編譯完了。
然后執行下面的命令來安裝交叉編譯器:
8、測試
可以寫一個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"來運行,如果還是失敗,可能是環境變量混亂的問題,關閉並重啟終端,然后再試)
如果看到了下面的信息:
