ubuntu12.04下安装simplesccalar和gem5模拟其记录


最近在做本科毕业设计,我的题目是“基于多核的低功耗模拟与实现”,需要用到计算机体系结构模拟器,先是参考了以前学长的单核,于是也去安装simplescalar,说是话真不容易啊。好不容易安装好了simplescalar,才发现原来simplescalar使用来模拟单处理器的不能模拟多核。于是在网上找啊找终于找到了gem5可以用来模拟多核,于是又开始安装gem5,也不是省油的灯。不过还是有收获,下面的安装这两个模拟器的记录。

Record1

1.安装ubuntu12.04,使用wubi安装

2.安装simplescalar

  1. www.simplescalar.com上下载四个包Simpletools-2v0.tgz Simplesim-3v0d.tar.gz Simpleutils-990811.tar.gz Gcc-2.7.2.3.ss.tar.gz。建立一个用于安装simplescalar的目录/home/administrator/professionalSoftware/simplescalar。将这四个压缩包解压到这个目录下。

  2. 了方便安装simplescalar,先定义以下临时环境变量。

    $ export HOST=i386-pc-linux
	$ export IDIR=/home/administrator/professionalSoftware/simplescalar
	$ export TARGET=sslittle-na-sstrix
  1. 安装前确保ubuntu已经安装了flex bison build-essential,使用命令“sudoapt-get install <PACKAGE_NAME>”

  2. 安装binutils-2.5.2;使用如下命令;

    cdbinutils-2.5.2
    ./configure -host=$HOST -target=$TARGET-with-gnu-as -with-gnu-ld -prefix=$IDIR
    make

这一步对于不同的计算机系统或许会出现不同的错误,这里就我安装时出现的问题加以阐述:

错误1

./ldlex.l:在函数‘yy_input’:
./ldlex.l:477:
错误:‘yy_current_buffer’未声明(在此函数内第一次使用)
./ldlex.l:477:
错误:(即使在一个函数内多次出现,每个未声明的标识符在其
./ldlex.l:477:
错误: 所在的函数内也只报告一次。)
make[1]:*** [ldlex.o]
错误 1
make[1]:
正在离开目录`/root/simplescalar/binutils-2.5.2/ld'
make:*** [all-ld]
错误2
解决:进入/home/administrator/professionalSoftware/simplescalar,打开ldlex.l定位到476行, 将小写的yy_current_buffer改为大写的YY_CURRENT_BUFFER

错误2

/usr/lib/gcc/i486-linux-gnu/4.3.3/include/varargs.h:4:2:错误: #error"GCC no longer implements<varargs.h>."
/usr/lib/gcc/i486-linux-gnu/4.3.3/include/varargs.h:5:2:
错误: #error"Revise your code to use<stdarg.h>."
解决:进入/home/administrator/professionalSoftware/simplescalar/binutils-2.5.2/ld,打开 ldmisc.c,定位到24行,将 #include<vararg.h>改为#include<stdarg.h>

错误3

ldmisc.c:在函数‘info_msg’:
ldmisc.c:344:
错误: expecteddeclaration specifiers before ‘va_dcl’
ldmisc.c:348:15:
错误:宏“va_start”需要2个参数,但只给出了 1
ldmisc.c:357:
错误: expected‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before‘va_dcl’

解决:

这是因为在stdarg.h里已经不再支持va_dcl,所以编译无法通过。
修改如下:
《《屏蔽掉函数内部分~~》》eg:
343void info_msg(const char* fmt, va_list ap)
344 //va_dcl
345{
346 /* char *fmt;
347 va_list arg;
348va_start(arg);
349 fmt = va_arg(arg, char *);
350vfinfo(stdout, fmt, arg);\
351 va_end(arg);
352 */
353 }

解决掉这些错误后再一次进行make,编译通过后会 /home/administrator/professionalSoftware/simplescalar中产生一个bin文件,说明binutils- 2.5.2安装成功

  1. 安装gcc-2.7.2.3,使用如下命令

    ./configure-hose=$HOST -target=$TARGET -with-gnu-as -with-gnu-ld-prefix=$IDIR
    make

这一步也会出现很多的错误,解决方法如下

错误1

cccp.c:194:错误:与‘sys_errlist’类型冲突
/usr/include/bits/sys_errlist.h:28:
错误:‘sys_errlist’的上一个声明在此
解决:进入/root/simplescalar/gcc-2.6.3,打开cccp.c,定位到191,在上一行加入#definebsd4_4

错误2

gcc-c -DCROSS_COMPILE -DIN_GCC -DPOSIX -g -I. -I. -I./configsdbout.c
sdbout.c:57:18:
错误:syms.h:没有该文件或目录
sdbout.c:
在函数‘gen_fake_label’:
解决:在这段代码之前(53行处)加一个#undefUSG,这样就会将gsyms.h包含进去。

错误3

这个错误可能会有多个地方,只需在所有的地方按照下面的解决办法解决就可以

insn-output.c:在函数‘output_110’:

insn-output.c:675:错误: 缺少结尾的 "字符
insn-output.c:676:
错误: 程序中有游离的‘\’
insn-output.c:676:
错误:‘sll’未声明(在此函数内第一次使用)
insn-output.c:676:
错误:(即使在一个函数内多次出现,每个未声明的标识符在其
insn-output.c:676:
错误: 所在的函数内也只报告一次。)
insn-output.c:676:
错误: expected‘;’ before ‘t’

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

修改方法如下:
FIXME\n
后面添加一个'\'
即:
675  return "FIXME\n\

错误5

gcc.c:172:错误:与‘sys_errlist’类型冲突
/usr/include/bits/sys_errlist.h:28:
错误: ‘sys_errlist’的上一个声明在此
gcc.c:
在函数‘translate_options’:

解决:这个问题也与前面类似,就不再详述,解决办法是在./gcc.c169行添加一个#definebsd4_4

问题6
./cp/g++.c:90:
错误:与‘sys_errlist’类型冲突
/usr/include/bits/sys_errlist.h:28:
错误: ‘sys_errlist’的上一个声明在此
./cp/g++.c:
在函数‘fatal’:

解决:在./cp/g++.c52行添加一个#definebsd4_4

错误都解决后就可一通过编译了,使用makeinstall安装完毕

  1. 进行测试

    编写一个helloworld.c程序,进行编译bin/sslittle-na-sstrix-gcchelloworld.c,然后运行simplesim-3.0/sim-safea.out

    运行结果如下:

  2. sim:** starting functional simulation **
    Hello world
    sim: **simulation statistics **
    sim_num_insn 7691 # total number ofinstructions executed
    sim_num_refs 4234 # total number of loadsand stores executed
    sim_elapsed_time 1 # total simulation time inseconds
    sim_inst_rate 7691.0000 # simulation speed (ininsts/sec)
    ld_text_base 0x00400000 # program text (code) segmentbase
    ld_text_size 70128 # program text (code) size inbytes
    ld_data_base 0x10000000 # program initialized data segmentbase
    ld_data_size 8192 # program init'ed `.data' and uninit'ed`.bss' size in bytes
    ld_stack_base 0x7fffc000 # program stacksegment base (highest address in stack)
    ld_stack_size 16384 #program initial stack size
    ld_prog_entry 0x00400140 # programentry point (initial PC)
    ld_environ_base 0x7fff8000 # programenvironment base address address
    ld_target_big_endian 0 # targetexecutable endian-ness, non-zero if big endian
    mem.page_count 26# total number of pages allocated
    mem.page_mem 104k # total sizeof memory pages allocated
    mem.ptab_misses 26 # total first levelpage table misses
    mem.ptab_accesses 476132 # total page tableaccesses
    mem.ptab_miss_rate 0.0001 # first level page table missrate

    到此simplescalar安装成功,上面的输出结果就是模拟后输出的数据








Record2:

1.ubuntu12.04中安装gem5模拟器,类似与simplescalar,但是gem5可以模拟多核,simplescalar只能模拟单核

  1. 先安装Mercurial,使用命令$sudoapt-get install Mercurial,

  2. 然后使用命令$hgclone http://repo.gem5.org/gem5-stable/professionalSoftware/gem5下载稳定版本的gem5的源码到制定的目录

  3. 接下来需要编译源码,但是在编译之前需要安装几个必要的工具,他们分别是g++编译其(注意要使用4.5版本的,4.6版本的编译不能通过),python,swig,zlib(我没有安装但是同样可以编译通过),m4.

  4. 如果已有的g++不是4.6版本的使用一下命令更换版本

    $sudoapt-get install g++-4.5

    $sudorm /usr/bin/g++

    $sudoln -s /usr/bin/g++-4.5 /usr/bin/g++

  5. 其他的软件都可以使用sudoapt-get install [software name]进行安装

  6. 进入gem5的下载目录执行如下命令进行编译:

    pythonscons.py build/X86/gem5.opt

    如果出现错误:can'tfind python.h header in [‘/usr/include/python2.7']

    解决:sudoapt-get install python-dev

    PS:由于第一次安装的时候使用的ALPHA平台,所以我想换成X86平台,我删除了gem5重新编译,可是这次使用上面的命令不行了,提示错误找不到scons.py文件。于是使用scons build/X86/gem5.opt进行编译就可以了。

  7. 编译通过后进行测试:build/X86/gem5.optconfigs/example/se.py -ctests/test-progs/hello/bin/X86/linux/hello输出helloworld!说明安装成功。

    PS:这里运行测试的是gem5自带的测试程序,我自己尝试这自己写了一个简单的hellomine.c,功能仅仅只是输出hellomy world!.第一次使用gcc-o hellomine hellomine.c编译,然后使用build/X86/gem5.optconfigs/example/se.py -c./hellomine运行是出现错误,提示模拟器只能运行静态编译的程序,不能是动态编译。所以我在编译是使用gcc -o hellomine hellomine.c -static,然后再一次运行,运行成功。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值