1.安装环境
GCC-4.4.3
2.软件下载
首先到上下载以下三个tar包。
simplesim-3v0d.tgz
simpletools-2v0.tgz
simpleutils-2v0.tgz
整个安装过程只需这个三个软件包即可。
3.安装过程
3.1 解压缩
假设把这三个软件包放在目录/root下。我们新建一个simplescalar目录,并将这三个包复制放入。然后解压缩,再将三个压缩包删除。命令如下,假设当前在/root下。
mkdir simplescalar
cp *.tgz simplescalar/
cd simplescalar/
tar –zxvf simplesim-3v0d.tgz
tar –zxvf simpletools-2v0.tgz
tar –zxvf simpleutils-2v0.tgz
rm –f *.tgz
3.2 设置环境变量
需设置三个环境变量,以方便后面的安装,不设置也行。
export HOST=i386-Ubuntu-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
首先会碰到第一个编译错误:
gcc -c -g -I. -I./../include strerror.c
strerror.c:467: 错误: 对‘sys_nerr’的静态声明出现在非静态声明之后
/usr/include/bits/sys_errlist.h:27: 错误: ‘sys_nerr’的上一个声明在此
strerror.c:468: 错误: 与‘sys_errlist’类型冲突
/usr/include/bits/sys_errlist.h:28: 错误: ‘sys_errlist’的上一个声明在此
make[1]: *** [strerror.o] 错误 1
make[1]:正在离开目录 `/root/simplescalar/binutils-2.5.2/libiberty'
make: *** [all-libiberty] 错误 2
解决:进入/root/simplescalar/binutils-2.5.2/libiberty 打开strerror.c,在第25行加入#undef NEED_sys_errlist
第二个错误:
bison -y -d ./ldgram.y
make[1]: bison:命令未找到
make[1]: *** [ldgram.c] 错误 127
make[1]:正在离开目录 `/root/simplescalar/binutils-2.5.2/ld'
make: *** [all-ld] 错误 2
这是由于没有安装bison的缘故,执行apt-get install flex bison安装bison
第三个错误:
./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
解决:进入/root/simplescalar/binutils-2.5.2/ld,打开ldlex.l 定位到476行,将小写的yy_current_buffer改为大写的YY_CURRENT_BUFFER。
第四个错误:
/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>."
解决:进入/root/simplescalar/binutils-2.5.2/ld,打开ldmisc.c,定位到24行,将#include<vararg.h>改为#include<stdarg.h>
第五个错误:
ldmisc.c: 在函数‘info_msg’中:
ldmisc.c:344: 错误: expected declaration 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:
343 void info_msg(const char* fmt, va_list ap)
344 //va_dcl
345 {
346 /* char *fmt;
347 va_list arg;
348 va_start(arg);
349 fmt = va_arg(arg, char *);
350 vfinfo(stdout, fmt, arg);
351 va_end(arg);
352 */
353 }
终于没错了,make install一下。发现simplescalar下多了一个bin文件夹
3.4 编译simplescalar
这个步骤比较简单,编译过程中没有错误。
cd simplesim-3.0
make config-pisa ;使它支持PISA,不然最后无法使用
make
3.5 编译gcc-2.6.3
这个步骤可能会碰到较多问题。
cd gcc-2.6.3
./configure -hose=$HOST -target=$TARGET -with-gnu-as -with-gnu-ld -prefix=$IDIR
make
第一个问题:
cccp.c:194: 错误: 与‘sys_errlist’类型冲突
/usr/include/bits/sys_errlist.h:28: 错误: ‘sys_errlist’的上一个声明在此
解决:进入/root/simplescalar/gcc-2.6.3,打开cccp.c,定位到191,在上一行加入#define bsd4_4
第二个问题:
gcc -c -DCROSS_COMPILE -DIN_GCC -DPOSIX -g -I. -I. -I./config sdbout.c
sdbout.c:57:18: 错误: syms.h:没有该文件或目录
sdbout.c: 在函数‘gen_fake_label’中: