Chinaunix首页 | 论坛 | 博客
  • 博客访问: 44044
  • 博文数量: 12
  • 博客积分: 471
  • 博客等级: 下士
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-20 10:13
文章存档

2012年(1)

2011年(1)

2010年(1)

2008年(9)

我的朋友

分类: LINUX

2008-11-05 20:58:34

      建立嵌入式linux的基础是建立基于ARM平台的交叉编译工具链。通常构建交叉工具链有3种方法:
方法一  分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链。

方法二  通过Crosstool脚本工具来实现一次编译生成交叉编译工具链。

方法三  直接从网上()下载已经制作好的交叉编译工具链。

    我认为方法一太复杂,容易出错,我做了一次没有成功,放弃了,方法三简单省事,但局限性大,不能编译新版本的U-boot和内核。因此我使用Crosstool工具构建交叉工具链。之前我用的系统是Ubuntu8.04,做交叉编译链时郁闷死了。虽然最后成功编译出来了,但花了一周的时间。Ubuntu作为桌面系统来说非常的棒,但用来开发嵌入式就比较郁闷了,因为有很多的库默认是不安装的,建议做开发的使用Red Hat系统。我装的系统是
Red Hat Enterprise 5
下面是用crosstool-0.43制作交叉编译工具链的过程。

1、准备资源文件

下载crosstool-0.43.tar.gz。

下载地址:

内核linux-2.6.24.tar.gz 下载地址:

其他资源是:binutils-2.16.1.tar.gz、gcc-3.3.6.tar.bz2、gdb-6.5.tar.bz2、glibc-linuxthreads-2.3.2.tar.gz、linux-libc-headers-2.6.12.0.tar.bz2、gcc-4.1.1.tar.bz2、glibc-2.3.2.tar.gz、linux-2.6.24.tar.gz。下载地址为:ftp.gnu.org
用户目录为david,将crosstool-0.43.tar.gz在/home/david目录下解压,使用root用户登录,解压命令如下:

# cd /home/david/crosstool-0.43

# tar –xvzf crosstool-0.43.tar.gz

将其他资源放在/home/david/downloads目录下。


2、建立脚本文件

接着建立自己的编译脚本,起名为arm.sh,找一个最接近的文件demo-arm.sh

作为模板,将该脚本的内容复制到arm.sh。命令如下:

# cd /home/david/crosstool-0.43

# cp demo-arm.sh arm.sh

# vi arm.sh

修改后的arm.sh脚本内容如下:
#!/bin/sh
# This script has one line for each known working toolchain
# for this architecture.  Uncomment the one you want.
# Generated by generate-demo.pl from buildlogs/all.dats.txt

set -ex
TARBALLS_DIR=/home/david/downloads
RESULT_TOP=/home/david/crosstool
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"
export GCC_LANGUAGES

# Really, you should do the mkdir before running this,
# and chown /opt/crosstool to yourself so you don't need to run as root.
mkdir -p $RESULT_TOP

#eval `cat arm.dat gcc-2.95.3-glibc-2.1.3.dat` sh all.sh --notest
#eval `cat arm.dat gcc-2.95.3-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-2.95.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.1.0-glibc-2.2.2.dat` sh all.sh --notest
#eval `cat arm.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest
eval `cat arm.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest --gdb

echo Done.

    其中RESULT_TOP=/home/david/crosstool是为了编译时的操作全在david用户的权限范围内。如果写的是/opt/crosstool,david用户就没有权限进行操作,也就不能编译成功了。

3、建立配置文件

    arm.dat文件主要用于定义配置文件、定义生成编译工具链的明晨以及定义

编译选项等。命令如下:

# cd /home/david/crosstool-0.43

# vi arm.dat

 

修改后arm.dat内容如下:
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-linux
TARGET_CFLAGS="-O"

    gcc-4.1.1-glibc-2.3.2.dat文件主要定义编译过程中所需要的库以及它定义的版本。命令如下:

# cd /home/david/crosstool-0.43

# vi
gcc-4.1.1-glibc-2.3.2.dat

修改后
gcc-4.1.1-glibc-2.3.2.dat内容如下:
BINUTILS_DIR=binutils-2.16.1
GCC_CORE_DIR=gcc-3.3.6
GCC_DIR=gcc-4.1.1
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.24
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GDB_DIR=gdb-6.5

5、执行脚本
    在
/home/david目录下新建一个crosstool目录,并将crosstool和crosstool-0.43目录的权限设置为当前用户和同组用户可读可写可执行,为了简便,可设置为777。然后切换为david用户后执行脚本文件arm.sh。命令如下:

# cd /home/david
# mkdir crosstool
# chmod 
777 crosstool
# chmod  777 crosstool-0.43
# su david
$ ./arm.sh

你可以出去喝杯咖啡或者看部电影,大约两小时后在/home/david/crosstool目录下生成新的交叉编译工具。

6、添加环境变量

    使用命令sudo su切换到root用户,在系统/etc目录下的
profile文件的最后添加一行:
export PATH=/home/david/crosstool/gcc-4.1.1-glibc-2.3.2
/arm-linux/bin:$PATH
保存并退出终端,执行命令# source /etc/profile使环境变量生效。关于环境变量请参考shareman的文章:http://blog.chinaunix.net/u2/80919/showart.php?id=1316644
执行# arm-linux-gcc -v命令,可以看到编译好的交叉编译器版本为4.1.1。
阅读(1145) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~