大家好,又见面了,我是你们的朋友全栈君。
(1)首先准备需要的安装文件,如果没有可到以下地址下载:
simpletools‐2v0.tgz:
http://www.simplescalar.com/tools.html
simplesim‐3v0d‐with‐cheetah.tar.gz:
http://www.ict.kth.se/courses/IS2202/software
simpleutils‐990811.tar.gz:
http://www.eecs.umich.edu/mirv/software
gcc‐2.7.2.3.ss.tar.gz:
http://american.cs.ucdavis.edu/RAD/gcc‐2.7.2.3.ss.tar.gz
(2)打开终端,设置环境变量为:
(安装目录)
$ exportIDIR=/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.gzIDIR
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 installbuild‐essential flex bison
在ubuntu12.04里还需要gcc-multilib
$ sudo apt-get install gcc-multilib
(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 xvfzsimplesim‐3v0d‐with‐cheetah.tar.gz
$ cd simplesim‐3.0
$ make config‐pisa
$ make
测试:
$ ./sim‐safetests/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>”;
1.为了解决decl.c的一处错误信息,名为“invalidlvalue 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的权限为可执行,不然会提示“Permissiondenied”!
使用命令:
$ chmod x ar ranlib
或在ar及ranlib的属性中修改。
3.再次执行“makeLANGUAGES…”后,提示缺少文件stubs-32.h
$ apt-file update
$ apt-file search stubs-32.h
libc6-dev:/usr/include/i386-linux-gnu/gnu/stubs-32.h
新版的ubuntu更改了stubs-32.h的存放位置。可执行
$ sudo cp/usr/include/i386-linux-gnu/gnu/stubs-32.h /usr/include/gnu/stubs-32.h
4.再次执行“makeLANGUAGES…”后,如果需要则删除cxxmain.c的2978‐2979行。
现在,运行:
$ make LANGUAGES=c CFLAGS=‐OCC=”gcc ‐m32″
$ make enquire
$ ../simplesim‐3.0/sim‐safe./enquire ‐f > float.h‐cross
$ make LANGUAGES=c CFLAGS=‐OCC=”gcc ‐m32″ install
5.这时可能会有错误“sendmsg.c:36:parse error”
在文件objc/sendmsg.c的第35行加上“#defineSTRUCT_VALUE 0”
这时再makeinstall应该就没有问题了。
测试:新建hello.c,内容为:
#include<stdio.h>
int main(int argc, char* argv)
{
printf(“HelloWorld!n”);
return 0;
}
然后用如下命令编译:
IDIR/bin/sslittle‐na‐sstrix‐gcc ‐o hello hello.c
生成文件hello,可用如下方式运行:
IDIR/simplesim‐3.0/sim‐safe hello
如果输出“HelloWorld!”,说明安装成功!
本文章参考《山东大学软件学院 计算机系统结构实验指导书》
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135063.html原文链接:https://javaforall.cn