天嵌 ARM开发社区

 找回密码
 注册
查看: 2735|回复: 5

交叉编译工具链问题

[复制链接]
y296144646q 发表于 2010-8-18 08:48:36 | 显示全部楼层 |阅读模式
本帖最后由 y296144646q 于 2010-8-18 08:58 编辑

你好:最近参考网上博客自制一个ARM Linux 交叉编译工具链  具体步骤如下:


ARM Linux 交叉编译 工具链 制作攻略
2007-06-25 20:04
0、制作之前确保你的机子上有如下几个工具:bison             flex            build-essential。

build-essential 主要是用于提供GCC、GLIBC等必要的编译资源,一般做开发的人员机子上应该都会有的。如果没有,对于UBUNTU用户:sudo apt-get install build-essential bison flex,其它用户自己看着办,呵呵!

1、从http://kegel.com/crosstool处下载crosstool-0.43.tar.gz并解开存于$HOME下。

假如你想要arm9tdmi上的工具链(其它工具链方法相同),进入crosstool-0.43目录,用文本编辑器打开demo-arm9tdmi.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/downloads  //该行表示你即将下载的工具源码压缩包的存放目录!
RESULT_TOP=/opt/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 arm9tdmi.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest
eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest   //我选择本行!!!
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest

echo Done. //上面表示你要选工具链的版本号!"#"起注释功能!我们可以选择一行!

我把RESULT_TOP=/opt/crosstool改成RESULT_TOP=$HOME/toolchains,并在HOME目录下建立downloads 和toolchains两个目录,分别用于存放源码压缩包和将要生成的工具链。

打开crosstool-0.43目录下的arm9tdmi.dat文件,内容如下:

KERNELCONFIG=`pwd`/arm.config
TARGET=arm-9tdmi-linux-gnu
GCC_EXTRA_CONFIG="--with-cpu=arm9tdmi --enable-cxx-flags=-mcpu=arm9tdmi"
TARGET_CFLAGS="-O"

这个文件一般用于设置一些变量,一般不用改,用默认即可!

打开crosstool-0.43目录下的gcc-4.0.2-glibc-2.3.5-tls.dat文件,内容如下:

BINUTILS_DIR=binutils-2.16.1
GCC_DIR=gcc-4.0.2
GLIBC_DIR=glibc-2.3.5
LINUX_DIR=linux-2.6.15.4
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.5
GLIBC_EXTRA_CONFIG="$GLIBC_EXTRA_CONFIG --with-tls --with-__thread           --enable-kernel=2.4.18"

然后你就可以到网上去下载上面红色标记的几个源码包,注意对应的版本号,下载后存放在downloads目录下。注意,不需要解压!!你甚至可以去掉LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0这一行(当然也就中需要下载这个包了)!你可以到中国的镜像站点去下载这些包:

http://mirrors.shlug.org/                                     http://www.cn.kernel.org/pub/linux

http://www.cn.kernel.org/pub/software         ftp://ftp.cn.kernel.org/pub/linux

ftp://ftp.cn.kernel.org/pub/software

NOW,IT'S OK!

2进入crosstool-0.43目录,输入./demo-arm9tdmi.sh,然后经过几个小时的编译,就可以在你的toolchains目录中看到你想要的工具链,头文件,库文件等东东了!你可以把工具链所在目录加到环境变量PATH中即可使用工具链了!

注意:crosstool -0.43目录下的PATCH目录中有各个工具链的补丁,如果在编译过程中有错误,可以在crosstool-0.43目录下build目录中的解压后的源文件中打上补丁(我没打补丁也编译成功了,呵呵)。另外,如果不想每次编译时都有浪费时间的解压过程,可以在eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest 末尾处加--nounpack表示不解压(当然前提是你已经自行解压源码包到了对应的目录/build/gcc-4.0.2-glibc-2.3.5-tls/arm-9tdmi-linux-gnu里了,也可以在这时给其打补丁).


我按照上面步骤(很仔细)的做到最后一步:如下:
[root@localhost crosstool-0.43]# ./demo-arm9tdmi.sh
+ TARBALLS_DIR=/home/downloads
+ RESULT_TOP=/home/toolchains
+ export TARBALLS_DIR RESULT_TOP
+ GCC_LANGUAGES=c,c++
+ export GCC_LANGUAGES
+ mkdir -p /home/toolchains
++ cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5-tls.dat
+ eval 'KERNELCONFIG=`pwd`/arm.config' TARGET=arm-9tdmi-linux-gnu 'GCC_EXTRA_CONFIG="--with-cpu=arm9tdmi' '--enable-cxx-flags=-mcpu=arm9tdmi"' 'TARGET_CFLAGS="-O"' BINUTILS_DIR=binutils-2.16.1 GCC_DIR=gcc-4.0.2 GLIBC_DIR=glibc-2.3.5 LINUX_DIR=linux-2.6.15.4 '#LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0' GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.5 'GLIBC_EXTRA_CONFIG="$GLIBC_EXTRA_CONFIG' --with-tls --with-__thread '--enable-kernel=2.4.18"' sh all.sh --notest
+++ pwd
++ KERNELCONFIG=/home/crosstool-0.43/arm.config
++ TARGET=arm-9tdmi-linux-gnu
++ GCC_EXTRA_CONFIG=--with-cpu=arm9tdmi --enable-cxx-flags=-mcpu=arm9tdmi
++ TARGET_CFLAGS=-O
++ BINUTILS_DIR=binutils-2.16.1
++ GCC_DIR=gcc-4.0.2
++ GLIBC_DIR=glibc-2.3.5
++ LINUX_DIR=linux-2.6.15.4
+ echo Done.
Done.
[root@localhost crosstool-0.43]#

好像也没出错 关键是啥都没做 好像 按理说应该等好久啊   我想问下最可能是啥问题(没出错信息 我找不到原因)  是不是第一步   0、制作之前确保你的机子上有如下几个工具:bison             flex            build-essential。 有问题啊 我装系统时工具是全选的了 bison             flex 好像有 但build-essential好像没找到 我的系统是RedHat linux
machoe 发表于 2010-8-18 13:46:43 | 显示全部楼层
你可以先试一配置一下环境变量,然后arm-linux-gcc -v,看看有没有安装成功。
machoe 发表于 2010-8-18 13:46:45 | 显示全部楼层
你可以先试一配置一下环境变量,然后arm-linux-gcc -v,看看有没有安装成功。
 楼主| y296144646q 发表于 2010-8-19 14:26:37 | 显示全部楼层
版主你好:
    我想问的是别人做的时候 到输入:./demo-arm9tdmi.sh后要经过几个小时的编译  而我输入:./demo-arm9tdmi.sh后就打印出下面几行字 不到2秒钟 根本没编译啊(第一次用这个工具crosstool-0.43 都不太懂 所以才想请教下 这是为啥)  打印的几行字如下(好想没报错啊):
[root@localhost crosstool-0.43]# ./demo-arm9tdmi.sh
+ TARBALLS_DIR=/home/downloads
+ RESULT_TOP=/home/toolchains
+ export TARBALLS_DIR RESULT_TOP
+ GCC_LANGUAGES=c,c++
+ export GCC_LANGUAGES
+ mkdir -p /home/toolchains
++ cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5-tls.dat
+ eval 'KERNELCONFIG=`pwd`/arm.config' TARGET=arm-9tdmi-linux-gnu 'GCC_EXTRA_CONFIG="--with-cpu=arm9tdmi' '--enable-cxx-flags=-mcpu=arm9tdmi"' 'TARGET_CFLAGS="-O"' BINUTILS_DIR=binutils-2.16.1 GCC_DIR=gcc-4.0.2 GLIBC_DIR=glibc-2.3.5 LINUX_DIR=linux-2.6.15.4 '#LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0' GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.5 'GLIBC_EXTRA_CONFIG="$GLIBC_EXTRA_CONFIG' --with-tls --with-__thread '--enable-kernel=2.4.18"' sh all.sh --notest
+++ pwd
++ KERNELCONFIG=/home/crosstool-0.43/arm.config
++ TARGET=arm-9tdmi-linux-gnu
++ GCC_EXTRA_CONFIG=--with-cpu=arm9tdmi --enable-cxx-flags=-mcpu=arm9tdmi
++ TARGET_CFLAGS=-O
++ BINUTILS_DIR=binutils-2.16.1
++ GCC_DIR=gcc-4.0.2
++ GLIBC_DIR=glibc-2.3.5
++ LINUX_DIR=linux-2.6.15.4
+ echo Done.
Done.
[root@localhost crosstool-0.43]#
shufexiu 发表于 2010-8-19 16:55:43 | 显示全部楼层
4# y296144646q

没有弄过阿......哥哥,很明显是你的设置有问题,才没有进入编译阿。这个你还是去看一下官方网站了。
 楼主| y296144646q 发表于 2010-8-20 08:48:35 | 显示全部楼层
设置 奥 我在去看看吧  谢谢啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-9-19 16:00 , Processed in 1.025325 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表