Chinaunix首页 | 论坛 | 博客
  • 博客访问: 220130
  • 博文数量: 48
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 258
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-22 23:45
文章分类

全部博文(48)

文章存档

2015年(4)

2014年(34)

2013年(10)

分类: LINUX

2013-05-23 00:27:54

下面将以具体操作步骤来讲述Crosstool构建针对ARM平台的交叉编译器。
1.准备资源文件
软件包名称 下载站点
crosstool-0.43.tar.gz
binutils-2.15.tar.bz2
gcc-3.3.6.tar.gz
glibc-2.3.2.tar.gz
glibc-linuxthreads-2.3.2.tar.gz
linux-2.6.10.tar.gz
linux-libc-headers-2.6.12.0.tar.bz2 ~mmazur/linux-libc-headers/
首先从网上下载上述资源文件:binutils-2.15.tar.bz2,gcc-3.3.6.tar.gz,glibc-2.3.2.tar.gz ,glibc-linuxthreads-2.3.2.tar.gz,linux-2.6.10.tar.gz和linux-libc-headers-2.6.12.0.tar.bz2。然后将这些工具包文件放在开放主机的/home/mike/downloads目录(该目录根据个人使用习惯不同可修改)下,最后在/home/mike目录下解压crosstool-0.43.tar.gz,命令如下:
# cd /home/mike
# tar -xvzf crosstool-0.43.tar.gz
2建立脚本文件
接着需要建立自己的编译脚本,起名为arm.sh,为了简化编写arm.sh,寻找一个最接近的脚本文件demo-arm.sh作为模版,然后将该脚本的内容复制到arm.sh,修改arm.sh脚本,具体操作如下:
# cd crosstool-0.43
# cp demo-arm.sh arm.sh
# vi arm.sh
修改后的arm.sh的脚本内容如下:
#!/bin/sh
set -ex
TARBALLS_DIR=/home/mike/downloads # 定义工具链源码所存放位置。
RESULT_TOP=/opt/crosstool # 定义工具链的安装目录
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++" # 定义支持C, C++语言
export GCC_LANGUAGES
mkdir -p $RESULT_TOP# 创建/opt/crosstool目录
eval `cat arm.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest # 编译工具链,该过程需要数小时完成。
echo Done.
3 建立配置文件
在arm.sh脚本文件中需要注意arm.dat和gcc-3.3.6-glibc-2.3.2.dat两个文件,这两个文件是作为crosstool的编译的配置文件。其中arm.dat文件内容如下,主要用于定义配置文件,定译生成编译工具链的名称以及定义编译选项等。
KERNELCONFIG=`pwd`/arm.config # 内核的配置
TARGET=arm-linux # 编译生成的工具链名称
TARGET_CFLAGS="-O" # 编译选项
gcc-3.3.6-glibc-2.3.2.dat文件内容如下,该文件主要定义编译过程中所需要的库以及它定义的版本,如果当在编译过程中发现有些库不存在时,crosstool会自动在相关网站上下载,该工具在这点上相对非常智能,也非常有用。
BINUTILS_DIR=binutils-2.15
GCC_DIR=gcc-3.3.6
GLIBC_DIR=glibc-2.3.2
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
LINUX_DIR=linux-2.6.10
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
4 执行脚本
将Crosstool的脚本文件和配置文件准备好之后,开始执行arm.sh脚本来编译交叉变异工具。具体执行命令如下:
# cd crosstool-0.43
# ./arm.sh
出现如下问题:
出现了下面的提示:(仅部分)
+ abort 'Don'/''t run all.sh or crosstool.sh as root, it'/''s dangerous'
+ echo 'Don'/''t' run all.sh or crosstool.sh as root, 'it'/''s' dangerous
Don't run all.sh or crosstool.sh as root, it's dangerous
人家不让在root用户下允许,说的是 “ it's dangerous”
解决方法:首先,在终端里面切换到普通用户如:#su - veason
                 然后,在终端里面切换到root用户如:#su root 输入密码#(密码)
                 再次进行解析脚本#./arm.sh
经过数小时的漫长编译之后,会在/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin目录下生成新的交叉编译工具,其中包括以下内容:
arm-linux-addr2line  arm-linux-g++          arm-linux-ld             arm-linux-size
arm-linux-ar             arm-linux-gcc           arm-linux-nm           arm-linux-strings
arm-linux-as             arm-linux-gcc-3.4.5 arm-linux-objcopy    arm-linux-strip
arm-linux-c++           arm-linux-gccbug    arm-linux-objdump   fix-embedded-paths
arm-linux-c++filt       arm-linux-gcov         arm-linux-ranlib
arm-linux-cpp           arm-linux-gprof        arm-linux-readelf
5 添加环境变量
然后将生成的编译工具链路径添加到环境变量PATH上去,添加的方法是在系统/etc/bashrc文件中添加下面一行在文件的最后,如下所示。 export PATH=/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin:$PATH
补充问题如下:
S3C2440芯片没有硬件浮点数(hardfloat),很多软件只能采用软件浮点数(softfloat)的编译器编译,恰巧现在高版本的u-boot只能采用支持softfloat的交叉编译器编译,否则会在编译结束前的链接那一步出现不支持softfloat的错误。
解决办法:
要解决这个错误的唯一办法就是采用支持softfloat的交叉编译器编译uboot。下面来说一下制作softfloat的具体过程。
和上述制作交叉编译器过程一样,不同之处:修改arm.dat内容如下,参考arm-softfloat.dat内容修改。
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-softfloat-linux
TARGET_CFLAGS="-O"
GCC_EXTRA_CONFIG="--with-float=soft"
GLIBC_EXTRA_CONFIG="--without-fp"

阅读(1930) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:MAC地址和IP地址的区别-ARP原理

给主人留下些什么吧!~~

校长的马夹2013-05-27 11:37:38

学习了