SimpleScalar的安装与配置

来源:互联网 发布:北京seo排名 编辑:程序博客网 时间:2024/05/17 06:01

1. SimpleScalar的安装

以Ubuntu 9.04系统下为例:

(1)首先准备需要的安装文件,如果没有可到以下地址下载:

simpletools-2v0.tgz:http://www.simplescalar.com/tools.htmlsimplesim-3v0d-with-cheetah.tar.gz:http://www.ict.kth.se/courses/IS2202/softwaresimpleutils-990811.tar.gz:http://www.eecs.umich.edu/mirv/softwaregcc-2.7.2.3.ss.tar.gz:http://american.cs.ucdavis.edu/RAD/gcc-2.7.2.3.ss.tar.gz

(2)打开终端,设置环境变量为:

(安装目录)$ export IDIR=/home/student/simplescalar(主机)$ export HOST=i686-pc-linux(目标机)$ export TARGET=sslittle-na-sstrix

(3)在student主目录下创建目录simplescalar,并将4个安装包移动至该目录:

$ mkdir $IDIR$ mv simplesim-3v0d-with-cheetah.tar.gz $IDIR$ mv simpletools-2v0.tgz $IDIR$ mv simpleutils-990811.tar.gz $IDIR$ mv gcc-2.7.2.3.ss.tar.gz $IDIR

(4)使用命令更新Ubuntu下的软件包build-essential,flex,bison:

$ sudo apt-get install build-essential flex bison

(5)安装SimpleTools:
解压包文件,并移除旧的gcc文件夹:

$ cd $IDIR$ tar xvfz simpletools-2v0.tgz$ rm -rf gcc-2.6.3

(6)安装SimpleUtils:
首先解压包文件。

$ cd $IDIR$ tar xvfz simpleutils-990811.tar.gz$ cd simpleutils-990811

编译前需要修改一处代码错误:在目录simpleutils-990811/ld下找到文件ldlex.l并将所有的yy_current_buffer替换为YY_CURRENT_BUFFER.
接下来开始配置,编译:

$ ./configure --host=$HOST --target=$TARGET --with-gnu-as --with-gnu-ld --prefix=$IDIR$ make CFLAGS=-O$ make install

(7)安装模拟器:

$ cd $IDIR$ tar xvfz simplesim-3v0d-with-cheetah.tar.gz$ cd simplesim-3.0$ make config-pisa$ make

测试:

$ ./sim-safe tests/bin.little/test-math

(8)安装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$ chmod -R +w .

接下来,为使编译顺利进行,需要做以下修改:
修改Makefile的第130行, 行末添加-I/usr/include;

修改protoize.c的第60行,

将“#include <varargs.h>”替换为“#include <stdarg.h>”;

3.为了解决decl.c的一处错误信息, 名为“invalid lvalue in increment”, 做以下修改:
编辑obstack.h的第341行并将:

 *((void **)__o->next_free)++=((void *)datum);\

替换为:

*((void **)__o->next_free++)=((void *)datum);\

并运行以下命令:

$ 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/

接下来构建(build)编译器:

$ make LANGUAGES=c CFLAGS=-O CC="gcc -m32"

这个命令执行后会产生错误信息,可能还需要作如下修改:
追加 ‘\’到insn-output.c的675, 750和823行末尾;

2.再次执行“make LANGUAGES…”后,碰到错误”buffer overflow”,这是由于Ubuntu版本较新造成的。
下载以下文件,放在$IDIR/sslittle-na-sstrix/bin下:
- http://www.ict.kth.se/courses/IS2202/ar
- http://www.ict.kth.se/courses/IS2202/ranlib
然后,请修改ar及ranlib的权限为可执行,不然会提示“Permission denied”!
使用命令:

$ chmod +x ar ranlib

或在ar及ranlib的属性中修改。

3.再次执行“make LANGUAGES…”后,如果需要则删除cxxmain.c的2978-2979行。
现在,运行:

   $  make LANGUAGES=c CFLAGS=-O CC="gcc -m32"   $  make enquire   $  ../simplesim-3.0/sim-safe ./enquire -f > float.h-cross   $  make LANGUAGES=c CFLAGS=-O CC="gcc -m32" install

这样应该不会产生新的错误了。

在一独立的文件夹下,新建hello.c,内容为:

#include<stdio.h>main(){     printf("Hello World!\n");}

然后用如下命令编译:

$ $IDIR/bin/sslittle-na-sstrix-gcc -o hello hello.c

生成文件hello,可用如下方式运行:

$ $IDIR/simplesim-3.0/sim-safe hello

如果输出”Hello World!”,说明安装成功!

2.mp_simplesim的安装

(1) 移动到SimpleScalar安装目录:

$ cd simplescalar

(2) 将mp_simplesim.tar.gz解压至该目录:

$ tar xvzf mp_simplesim.tar.gz

(3) 进入mp_simplesim目录:

$ cd mp_simplesim

(4) 打开Makefile文件,将SS_BIN_PATH设置为交叉编译器的路径:

SS_BIN_PATH = /home/student/simplescalar/sslittle-na-sstrix/bin

(5) 编译:

$ make

遇到错误提示:
syscall.c:102:23: 错误: bsd/sgtty.h:没有该文件或目录

将syscall.c第102行中替换为:

#include <sgtty.h>

并保存。

(6) 继续运行make,出现新的错误:
syscall.c:823: 错误: ‘TIOCGETP’未声明(在此函数内第一次使用)
syscall.c:823: 错误: (即使在一个函数内多次出现,每个未声明的标识符在其
syscall.c:823: 错误: 所在的函数内也只报告一次。)
syscall.c:826: 错误: ‘TIOCSETP’未声明(在此函数内第一次使用)

将syscall.c的823-831行由:

/* #if !defined(__CYGWIN32__) */    case SS_IOCTL_TIOCGETP:      local_req = TIOCGETP;      break;    case SS_IOCTL_TIOCSETP:      local_req = TIOCSETP;      break;    case SS_IOCTL_TCGETP:      local_req = TIOCGETP;      break;/* #endif */

替换为:

#ifdef TIOCGETP    case SS_IOCTL_TIOCGETP:      local_req = TIOCGETP;      break;#endif#ifdef TIOCSETP    case SS_IOCTL_TIOCSETP:      local_req = TIOCSETP;      break;#endif#ifdef TIOCGETP    case SS_IOCTL_TCGETP:      local_req = TIOCGETP;      break;#endif

并保存。

(7) 继续运行make,出现新的错误:

#-----------------------------------------------------## Linking objects to produce 'sim-mpfast' simulator##-----------------------------------------------------gcc -o sim-mpfast `./sysprobe -flags` -DDEBUG -DGRAPHICS -O3   sim-mpfast.o \        main.o syscall.o memory.o regs.o loader.o ss.o endian.o symbol.o eval.o options.o stats.o range.o misc.o -lm -lX11 `./sysprobe -libs`/usr/bin/ld: cannot find –lx11collect2: ld 返回 1make: *** [sim-mpfast] 错误 1

解决方法:安装缺失的软件包libx11-dev:

$ sudo apt-get install libx11-dev

(8) 继续运行make,出现新的错误:

#-----------------------------------------------------## Linking objects to produce 'sim-mpfast' simulator##-----------------------------------------------------gcc -o sim-mpfast `./sysprobe -flags` -DDEBUG -DGRAPHICS -O3   sim-mpfast.o \        main.o syscall.o memory.o regs.o loader.o ss.o endian.o symbol.o eval.o options.o stats.o range.o misc.o -lm -lX11 `./sysprobe -libs`/usr/bin/ld: cannot find -lbsdcollect2: ld 返回 1make: *** [sim-mpfast] 错误 1

解决方法:安装缺失的软件包libbsd-dev:

$ sudo apt-get install libbsd-dev

(9) 继续运行make,出现新的错误:

#-----------------------------------------------------## Linking objects to produce 'sim-mpfast' simulator##-----------------------------------------------------gcc -o sim-mpfast `./sysprobe -flags` -DDEBUG -DGRAPHICS -O3   sim-mpfast.o \        main.o syscall.o memory.o regs.o loader.o ss.o endian.o symbol.o eval.o options.o stats.o range.o misc.o -lm -lX11 `./sysprobe -libs`/usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference in eval.o/lib/libc.so.6: could not read symbols: Bad valuecollect2: ld 返回 1make: *** [sim-mpfast] 错误 1

打开文件eval.c,64-66行内容为:

#if defined(__CYGWIN32__)#include <errno.h>#endif

删除或注释掉64及66行, 保留:

#include <errno.h>

并保存。

(10) 继续运行make,出现新的错误:

#-----------------------------------------------------## Linking objects to produce 'sim-mpfast' simulator##-----------------------------------------------------gcc -o sim-mpfast `./sysprobe -flags` -DDEBUG -DGRAPHICS -O3   sim-mpfast.o \        main.o syscall.o memory.o regs.o loader.o ss.o endian.o symbol.o eval.o options.o stats.o range.o misc.o -lm -lX11 `./sysprobe -libs`/usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference in range.o/lib/libc.so.6: could not read symbols: Bad valuecollect2: ld 返回 1make: *** [sim-mpfast] 错误 1

打开文件range.c,64-66行内容为:

#if defined(__CYGWIN32__)#include <errno.h>#endif

删除或注释掉64及66行, 保留:

#include <errno.h>

并保存。

(11) 为了避免出现名为”binary endian does not match host endian”的错误,
将loader.c第474行的”endian_host_word_order”替换为
”endian_host_byte_order”,保存。

(12) 为了修正一处幂运算错误,将sim-mpcache.c第134行:

#define log2(x) ((int)(log(x)/log(2)))

替换为:

/* return log of a number to the base 2 */intlog2(int n){  int power = 0;  if (n <= 0 || (n & (n-1)) != 0)    panic("log2() only works for positive power of two values");  while (n >>= 1)    power++;  return power;}

并保存。

(13) 现在,执行:

$ make $ make sim-tests

将会生成包含debug、warning信息及statistics的输出结果,说明执行通过。

(14) 运行

$ ./sim-mpcache -graphics -speed 1 tests/dotbar.ss -p8 -n10000

如果执行成功,则能够看到图表化的cache命中情况

更详细的安装过程,可以参考:
链接:http://pan.baidu.com/s/1jG49drC 密码:jrml

0 0