配置安装Spmp8kSdk

一.目标

Ubuntu环境中,为spmp8k配置安装toolchain,并使用该toolchain编译由Alemaxxspmp8制作的函数库libspmp8k最终产生适合spmp8k平台的SDK

 

二.制作环境

主机系统:Ubuntu-10.10-desktop-i386,以下将该系统简称为Ubuntu。为了便于工作,Ubuntu使用了Vmware(版本为7.1.2 build-301548)安装。

 

主机gcc版本:4.4.5

 

三.配置安装toolchain

1.总体过程

(1)编译安装binutils

在步骤(2)、步骤(3)、步骤(4)中,都要用到在这个步骤中编译出来的binutils,所以这个工具最先编译安装。

 

(2)编译安装bootstrap gcc (初始编译器)

在这个步骤中,只编译出目标平台(spmp8k)的C编译器,并称这个编译器为bootstrap gcc (初始编译器)。叫这个名称是因为:这个编译器是很原始的,它没有newlib的支持;而且这个编译器将会被废弃,而由步骤(4)编译出来的编译器所替代。编译安装bootstrap gcc的目的只是为了编译newlib

 

(3)编译译安装newlib

适合嵌入式系统环境的近标准C库。

 

(4)编译安装完整的gcc

在这个步骤中,编译安装目标系统的C编译器和C++编译器。注意这个步骤编译出来的编译器有newlib作为近标准C

 

2.具体过程

安装所缺的包

在原版的Ubuntu中,还缺少一些制作spmp8k toolchain的过程中要用到的包。可以使用以下的命令进行安装这些包。

$sudo apt-get install texinfo bison flex gawk patch

 

有些缺少的包无法通过apt-get来安装。对于这样的包,通过下载它们的源码包,进行编译后再安装。需要按这样的方法安装的包有gmpmpfr

gmp-4.3.2.tar.bz2

ftp://ftp.gmplib.org/pub/gmp-4.3.2/gmp-4.3.2.tar.bz2

假设下载的gmp-4.3.2.tar.bz2放在了当前用户的home目录(即目录~)下,则安装方法如下:

$cd ~

$bunzip2 0<gmp-4.3.2.tar.bz2 | tar -xvf -

$cd  gmp-4.3.2

$./configure

$make

$make check

$make install

 

 

mpfr-3.0.0.tar.bz2

http://www.mpfr.org/mpfr-3.0.0/mpfr-3.0.0.tar.bz2

假设下载的mpfr-3.0.0.tar.bz2放在了当前用户的home目录(即目录~)下,则安装方法如下:

$cd ~

$bunzip2 0<mpfr-3.0.0.tar.bz2 | tar –xvf -

$cd mpfr-3.0.0

$./configure

$make

$make check

$make install

 

 

准备所需的toolchain源码包

binutils-2.20.1.tar.bz2 

http://ftp.gnu.org/gnu/binutils/binutils-2.20.1.tar.bz2

 

newlib-1.18.0.tar.gz

ftp://sources.redhat.com/pub/newlib/newlib-1.18.0.tar.gz

 

gcc-core-4.3.3.tar.bz2

http://gcc.igor.onlinedirect.bg/releases/gcc-4.3.3/gcc-core-4.3.3.tar.bz2

 

gcc-g++-4.3.3.tar.bz2

ftp://sources.redhat.com/pub/newlib/newlib-1.18.0.tar.gz

 

创建相关目录

$sudo mkdir -v /spmp8k

$sudo chown  $LOGNAME:$LOGNAME /spmp8k    //将目录spmp8k的拥有前交给当前用户

 

注意:使用sudo命令时,可能当提示输入密码,输入当前用户的密码即可。

 

$mkdir -v /spmp8k/src               //放源文件的目录

$mkdir -v /spmp8k/build             //build目录

$mkdir -v /spmp8k/toolchain         //工具链的安装目录

$mkdir -v /spmp8k/build/binutils

$mkdir -v /spmp8k/build/newlib

$mkdir -v /spmp8k/build/gcc

 

解压源码包

将以下文件放在目录/spmp8k/src下。

binutils-2.20.1.tar.bz2

newlib-1.18.0.tar.gz

gcc-core-4.3.3.tar.bz2            //只包含C编译器的源码和所有编译器的公共部分

gcc-g++-4.3.3.tar.bz2             //g++源码

 

然后

$cd /spmp8k/src
$
bunzip2 0<binutils-2.20.1.tar.bz2 | tar -xvf -

$gunzip 0<newlib-1.18.0.tar.gz | tar -xvf -

$bunzip2 0<gcc-core-4.3.3.tar.bz2 | tar -xvf -
$
bunzip2 0<gcc-g++-4.3.3.tar.bz2 | tar -xvf -

 

注意:gcc-core-4.3.3.tar.bz2gcc-g++-4.3.3.tar.bz2解压后会自动生成同一个目录:gcc-4.3.3

 

编译安装binutils
$
cd /spmp8k/build/binutils
$
/spmp8k/src/binutils-2.20.1/configure /

--target=arm-elf --prefix=/spmp8k/toolchain /

2>&1 | tee binutils_configure.out

$make -w all 2>&1 | tee binutils_make.out

等待编译完成,然后安装:

$make -w install 2>&1 | tee binutil_install.out

 

编译安装bootstrap gcc(初始化编译器)

$gedit ~/.bashrc &

.bashrc 添加以下内容,然后保存退出:

PATH=/spmp8k/toolchain/bin:$PATH

 

$export PATH=/spmp8k/toolchain/bin:$PATH
$cd /spmp8k/build/gcc

$/spmp8k/src/gcc-4.3.3/configure --target=arm-elf --prefix=/spmp8k/toolchain /
  --disable-nls --disable-libssp --disable-libgomp --disable-libmudflap --enable-languages=c /
  --with-gnu-as --with-gnu-ld
--with-cpu=arm926ej-s
/
  2>&1 | tee configure.out

 

其中:

--disable-libssp

表示不编译保护缓冲区溢出的运行时库。

--disable-libgomp

表示不编译 GOMP 使用的运行时库和工具。

--disable-libmudflap

表示不编译边界检查函数的运行时库。

--enable-languages=c

表示只编译生成C语言编译器

--with-gnu-as --with-gnu-ld

分别表示使用gnu汇编器和gnu连接器。

 

$make -w all 2>&1 | tee bootstrap_gcc_make.out

等待编译完成,然后安装:

$make -w install 2>&1 | tee bootstrap_gcc_install.out

 

编译安装newlib

$cd /spmp8k/build/newlib

$/spmp8k/src/newlib-1.18.0/configure /

 --target=arm-elf --prefix=/spmp8k/toolchain  --disable-newlib-supplied-syscalls  /

 2>&1 | tee newlib_make_configure.out

 

 

$make all -w 2>&1 | tee newlib_make.out

等待编译完成,然后安装:

$make install -w 2>&1 | tee newlib_install.out

 

编译完整的gcc

$cd /spmp8k/build/gcc

$rm -rf *

$/spmp8k/src/gcc-4.3.3/configure --target=arm-elf --prefix=/spmp8k/toolchain /

--disable-nls --disable-libssp --disable-libgomp --disable-libmudflap --enable-languages=c,c++ /

--with-gnu-as --with-gnu-ld --with-cpu=arm926ej-s --with-newlib /

2>&1 | tee full_gcc_configure.out

 

$make all -w 2>&1 | tee full_gcc_make.out

等待编译完成,然后安装:

$make install -w 2>&1 | tee full_gcc_install.out

 

到此为止,适合spmp8kgcc toolchain编译安装完成。接下来我们利用刚这个刚编译toolchain,来编译由Alemaxxspmp8制作的函数库libspmp8k

 

四.编译libspmp8k

libspmp8k的作者是Alemaxx

 

libspmp8k的下载地址为:

http://libspmp8k.googlecode.com/svn/trunk/

 

注意:下载libspmp8k时,要用TortoiseSVNTortoiseSVN是个源代码管理工具,它的官网站为http://tortoisesvn.net/

 

假设下载的libpmp8k放在了当前用户的home目录(即目录~)下,则使用以下命令编译这个代码库中的内容。

$cd ~/libspmp8k

$make

 

编译过程中,会出现一些错误。估计原因主要是:1.在这里制作的编译环境跟Alemmax使用的编译环境不同,libspmp原本是在Alemmax使用的编译环境工作的;2.Alemmax没及时Check In最新的libspmp。所以要成功编译libspmp8k,得做一些额外的工作。具体是:

 

libsmp8k/demo/keydemo/Makefile中的

OBJS      = libgame.o glue.o dmsg.o font6x8.o

改为

OBJS      = libgame.o glue.o dmsg.o font6x8.o start.o

 

libsmp8k/demo/doom110/i_main.c中的#include "rls_text.h"删去,再将其中的  dmsg_puts(rls_text1);

       dmsg_puts(rls_text2);

改为

dmsg_puts(“Hello World”);  //在运行编译出来的doom0.bin的启动画面中,将见到Hello World

 

libspmp8k/demos/uarttest/Makefile中的

LIBDIR   = -L/usr/local/lib/gcc/arm-elf/4.3.3/ -L../../libspmp8k

改为LIBDIR  = -L/spmp8k/toolchain/lib/gcc/arm-elf/4.3.3/ -L../../libspmp8k

 

libspmp8k/demos/libgame/glue.c中的

extern int errno;

改为int errno;

 

注意:在Spmp8kSdk-Src中提供的libspmp8k已经做了以上修改。

 

安装libpng

编译libspmp8kpng2c这个工具时,需要使用到函数库libpng。使用下面的命令安装这个函数库。

$sudo apt-get install libpng12-dev

 

安装G++

编译libpmp8k的某些工具时,需要用到G++编译器,而Ubuntu在默认情况下没有安装这个编译器。使用以下命令安装g++

$sudo apt-get install g++

 

最后

准备好这些工作后,用cd命令进入目录libspmp8k,然后执行命令make,即可编译libspmp8k

 

 

 

参考资料:

http://alemaxx.al.funpic.de/spmp8000/sp8hc.html

http://ecos.sourceware.org/getstart.html

http://gcc.gnu.org/install/

http://www.mp4nation.net/forum/viewtopic.php?f=24&t=17095&sid=9340c9f33ee43207cad9ef42f0f0019a

http://www.linuxfromscratch.org/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值