【SimpleScalar】SimpleScalar安装报告

 SimpleScalar安装报告

Wisconsin.Madison大学发布的SimpleScalar模拟器是一个开源软件,具有良好的壳移植性和扩展性,能够支持不同层次层次设计人员的需求,因而得到了广泛的应用。是开发微处理器芯片前期进行体系架构验证的重要工具,本次主要讲述其在linux下的安装方法。

【注意】在安装过程中,一定要注意安装顺序不能颠倒,binutils-simplesim-gcc

1.  安装环境

VMware7.1虚拟机Centos 4.4, GCC-3.4.6 (该操作系统自带)。本安装过程在以上环境中测试通过,如果所在机器GCC版本不是3.4.3,可能安装过程会有所不同,但总体的思路一致。

主机的编译环境可以通过运行gcc –v得到

2.  软件下载

首先到http://www.simplescalar.com上下载以下三个tar包。

simplesim-3v0e.tgz   http://www.simplescalar.com/gatedftp.php3?simplesim-3v0e.tgz

simpletools-2v0.tgz   http://www.simplescalar.com/downloads/simpletools-2v0.tgz

simpleutils-2v0.tgz   http://www.simplescalar.com/downloads/simpleutils-2v0.tgz

 

   整个安装过程只需这个三个软件包即可。

3.  安装过程

3.1 解压缩

        假设把这三个软件包放在目录/root下。我们新建一个simplescalar1目录,并将这三个包复制放入。然后解压缩,再将三个压缩包删除。命令如下,假设当前在/root下。

#mkdir simplescalar                            ;设置安装目录

#mkdir tmp                                   ;存放我们下载的源文件,将2中的源文件复制进来

#cd simplescalar/                              ;进入该文件夹

#tar –zxvf  ../tmp/simplesim-3v0d.tgz                      ;对tar包进行解压缩,由于该包        

#tar –zxvf  ../tmp/simpletools-2v0.tgz             ;有gzip压缩,故加上z选项,x

#tar –zxvf  ../tmp/simpleutils-2v0.tgz              ;是解压tar, v是列出文件,f指明

#rm –rf  ../tmp                                ;删除源文件

#ls

 

结果如下

   3.2 设置环境变量

        需设置三个环境变量,以方便后面的安装,不设置也行。

#export HOST=i386-redhat-linux        ;格式为 机器类型-公司-系统

#export TARGET=sslittle-na-sstrix       ;设置为小字端机器

#export IDIR=/root/simplescalar         ;将结果安装到/root/simplescalar

           

3.3 编译binutils2.5.2

    进入binutils2.5.2并配置一下,然后编译,安装。在这里将遇到许多问题,后面将会

一一举出。命令如下:

#cd binutils-2.5.2

#./configure –host=$HOST –target=$TARGET –with-gnu-as –with-gnu-ld –prefix=$IDIR

make

 

简单解释一下上述命令,configure是Linux世界的一个标准,它是一个shell文件。一般标准的程序都会提供一个configure脚本,以提供对程序的配置功能,然后根据该配置来生成最终的Makefile,以便编译。

注:configure命令的参数含义说明

-host:配置安装环境

-target:配置成little-endian模式(在首次的安装过程中因选用big-endian,程序无法编译,应考虑处理器的支持)

--with-gnu-as:加载汇编器

--with-gnu-ld:加载链接器

--prefix:设置安装目录

首先会碰到第一个编译错误:

   这表示make不过,没有显示失败的具体原因,故我们手工编译一个dummy.c文件。

#cd libiberty

#gcc –c –g –I. –I./../include ./dummy.c

 

       错误提示如下:

      

就是说该四个函数声明不对,参数不一致。打开functions.def查看一下有什么内容,

可以看到

DEF(strstr, char*, (), NOTHING)

DEF(vfprintf, int, (), NOTHING)

DEF(vprintf, int, (), NOTHING)

DEF(vsprintf, int, (), NOTHING)

 

然后在dummy.c中可以找到宏DEF的定义。实际上上面就是对四个函数进行声明,第二个参数,为返回值,第三个参数就是该函数的函数声明,最后一个是参数列表。这是一种老式的声明格式如下

char* strstr( s1, s2)

char* s1, char* s2

{

}

 

因为旧版本的C规定声明的函数原型与函数定久的地方参数可以不一致,或者声明时可不写参数。所以原文件在旧版的GCC下可以编译通过,但是在我们的机器上一般都是编不过的。所以需将上面三个函数的声明改正确。结果如下:

DEF(strstr, char*, (s1, s2),  char *s1 AND char *s2)

DEF(vfprintf, int, (format, ap), CONST char *format AND va_list ap)

DEF(vprintf, int, (format, ap), CONST char *format AND va_list ap)

DEF(vsprintf, int, (format, ap), CONST char *format AND va_list ap)

 

又因为使用了va_list,需在dummy.c里加上一个 #include<stdarg.h>, 然后再回来 binutils-2.5.2目录下,再make一次。这回dummy.c就不会有错误(值得一说的是,经过观察dummy.c并没有做什么实际工作,只是用来检测一些编译功能的,这个问题的另一个解决办法就是将dummy.c变成空文件,不包含functions.def,这样也可以编译通过)。

       再make之后又会碰到第二个问题:

       问题是说strerror.c 468行的sys_errlist声明与库函数声明不一致。我们首先打strerror.c,找到468行。这里有个编译选项NEED_sys_errlist,看注释可以知道,这个是用来控制主机上的stdio.h里是否有了sys_errlist声明,默认是没有(也即NEED_sys_errlist有定义)。而现在一般机器上都有sys_errlist的声明,所以该宏的定义需去掉。解决方法在文件的顶部(因为中间有许多用到NEED_sys_errlist的地方,故加在头部), 加入一条 #undef NEED_sys_errlist

然后再回到binutils-2.5.2下,重新make.接着碰到第三个问题:

这是因为GCC-3.4.3已经不用varargs.h,改用stdarg.h,所以修改 ld/ldmisc.c,将#include <varargs.h>改成 #include <stdarg.h>, 然后重新编译接着碰到第四个问题:

这是因为在stdarg.h里已经不再支持 va_dcl,所以编译无法通过。经过观察发现使用va_dcl的地方都是用来打印消息的(实际上varargs.h与stdarg.h都是为了用来支持可变参数函数的。如printf, 一般printf的声明可以为 printf( const char*fmt, …), 用“…”表示可变参数, 也可以使用 printf( const char* fmt, va_list ap)来表示,还有第三种就是 printf( va_list ) va_dcl。但是第三种方式在GCC-3.4.3里并不支持。)所以有两种方法来解决这个问题,一是将所以第三种声明改为第二种声明,这个方法比较慢。二是将第三种声明的函数以以下方式注释掉(因为它们只是打印一些信息,并不影响功能,所以可以不需要这些函数功能)。

将所在这些地方都改完之后,重新make一下,这回终于没有错误,再make install一下,也就将binutils-2.5.2安装成功。

   3.4 编译simplescalar

       这个步骤比较简单,编译过程中没有错误。

#cd simplescalar3-3.0

#make config-pisa                     ;使它支持PISA,不然最后无法使用

#make

      

   3.5 编译gcc-2.6.3

       这个步骤可能会碰到较多问题。

#cd gcc-2.6.3

#./configure –host=$HOST – target =$TARGET –with-gnu-as –with-gnu-ld –prefix=$IDIR

#make

      

      

       首先碰到第一个问题如下:

       这个是因为sys_errlist定义不一致造成的,前面已经提到过。打开cccp.c,经过观察可以发现这里有个宏HAVE_STRERROR来控制到底使不使用sys_errlist,因为在GCC-3.4.3里是有sys_errlist的,所以我们必须先定义一个HAVE_STRERROR,故将 #define HAVE_STRERROR加在175行。

       然后重新make一下,碰到第二个问题:

       打开sdbout.c,找到如下一段代码

经过确认,在GCC-3.4.3之下存在gsyms.h而不存在syms.h,所以需改变这里的宏定义,解决方法是在这段代码之前加一个 #undef USG,这样就会将gsyms.h包含进去。

       然后重新make一下,碰到第三个问题如下:

       打开insn-output.c,定位到675行。找到如下代码:

       这里会出错的原因是因为,在C语言里面字符串如果分多行写的话必须以“\”结尾,表示连接上下两行。注意的是这里会产生这个错误的原因是Flex (Flex是Linux下词法分析,语法分析代码自动生成工具)版本的问题。这个insn-output.c是由Flex自动生成的,由于 Redhat-EL4上的Flex版本与该项目的版本不一致,故导致生成文件也有点不同。如果直接修改 insn-output.c文件中的所有这些问题,只是治标行为,如果clean过一次的话,再重新编译,又得再一次修改。治本的方法是,找一个能正确生成代码的Flex版本。本次安装采用“治标”的方法,为所有出现这个问题的地方添加一个”\”。

       再重新make一下,出现第四个问题如下:

这个问题与前面讲述的类似,就不再详述,解决办法是在gcc.c的168行添加一段 #define bsd4_4.

       再次make,出现第五个问题如下:

这个问题也与前面类似,就不再详述,解决办法是在cp/g++.c的86行添加一个#define bsd4_4。

       再次make, 终于大功告成。最后

#make LANGUAGS=c

#../simplesim-3.0/sim-safe ./enquire –f >! flaot.h-cross

#make install

 

4.  测试

(1)HelloWorld测试

走到这里时,已经将simplescalar以及它的交叉编译器都编译安装好。下面进行测试

假设现在 simplescalar目录下, 写一个hello.c文件内容如下:

#include <stdio.h>

int

main( int argc, char* argv[] )

{

printf(“Hello World\n”);

return 0;
}

 

以如下步骤编译:

#bin/sslittle-na-sstrix-gcc hello.c

#simplesim-3.0/sim-safe a.out

 

运行结果如下:

(2)运行系统自带测试用例

#cd $IDIR/simplesim-2.0

#sim-outorder tests/bin.little/test-math

The tool set should now be ready for use. To run a test:

  

This test should generate about a page of output, and will run very quickly.  (If you are running on a big-endian host, use the test programs in the "bin.big" directory).  You should now be able tocompile your benchmarks with the version of gcc in the ssbig-na-sstrixdirectory, and feed them into any of the simulators (sim-fast,sim-safe, sim-profile, sim-cache, sim-cheetah, and sim-outorder) asshown above.

5. 总结

在编译与安装simplescalar的过程中碰到了许多问题,不过都已经解决掉。经过分析,觉得会出现这种现象的原因是,

1.  编译工具不一致,我猜测,该项目组使用的编译工具可能是 gcc 2.6或者以前的版本,如果可以下到该版本的话,应该可以一次通过。

2.  编译环境不一致,Linux与bsd, solaris的环境有一定区别,即库的定义。这个问题需要在宏上有所选择,才能编过。我猜测该项目组使用的可能是solaris。

3.  在选择大小端的问题,应根据主机处理器所支持的方式进行选择,否在程序安装以后无法进行正常编译。

综合猜测,用较早版本的gcc应该可以一次通过编译。

【备注】可以参考的程序安装环境(version 3.0e)

                                                                                           

转载于:https://www.cnblogs.com/lu-yang/archive/2011/06/29/2092868.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值