什么是交叉编译这里就不用多说了,这里给出两种制作的方法。
1. 直接下载已经编译好的文件。例如:http://arm.linux.org.uk,这里提供已经编译好的cross,如cross- 3.3.2.tar.bz2,cross-3.0.tar.bz2。直接下载某个包后解压,然后创建合适的链接或者输出环境变量即可调用。
这种做法操作很简单,但是不能根据自己的需求去定义,只能选择已经编译好的东西。
2. 自己动手利用crosstool来制作。
A. 在CROSSTOOL官方网站下载源码包,解压,进入解压后的目录。
$sudo wget http://kegel.com/crosstool/crosstool-0.42.tar.gz
$sudo tar -xzvf crosstool-0.42.tar.gz
$cd crosstool-0.42
B. 以ROOT建立目录,存放生成的交叉编译链
改变该目录的 所有者为普通用户
例如,存放生成的交叉编译链目录为/opt/crosstool,如下所示:
sudo mkdir /opt/crosstool
sudo chown $USER /opt/crosstool
C. 修改针对目标板的脚本文件。
$sudo vi demo-arm.sh
(1)这几个环境变量可以根据实际情况修改
TARBALLS_DIR=$HOME/downloads
RESULT_TOP=/opt/crosstool
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"
export GCC_LANGUAGES
(2)在若干行eval语句中选择要建立的交叉编译链的组合,去掉该行eval的#号。例如要做gcc为3.3.3,glibc为2.3.2的工具链
eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest
D. 修改目标板脚本文件demo-arm.sh中eval那一行出现的体系结构的配置文件
$sudo vi arm.dat
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-unknown-linux-gnu
TARGET_CFLAGS="-O"
可以修改TARGET变量为
TARGET=arm-S3C2410-linux-gnu(你的arm型号)
E.修改目标板脚本文件demo-arm.sh中eval那一行出现的工具链的匹配文件
$sudo vi gcc-3.4.5-glibc-2.3.6.dat
BINUTILS_DIR=binutils-2.15
GCC_DIR=gcc-3.3.3
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.4.26
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
以上变量要根据实际情况修改。不过
例如想下载linux2.6的版本,并且下载gdb最新的版本。内核具体的版本要参照http://kernel.org/和ftp://ftp.gnu.org/pub/gnu/gdb。例如。
LINUX_DIR=linux-2.6.12.1
GDB_DIR=gdb-6.0
F.以普通用户运行脚本
$sudo sh demo-arm.sh
进入漫长的等待过程中……
3. 安装完成后路径设置和测试。
编辑~/.bash_profile,在其中export PATH前加入这样一行, PATH=/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-S3C2410-linux-gnu/bin:$PATH
,改完后我的是这样的
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
PATH=/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-S3C2410-linux-gnu/bin:$PATH
export PATH
unset USERNAME
然后就好了。可以开始测试使用了。测试的方法很简单,随便找个程序源码编译一下就好了。这里用的这些编译器生成的是二进制文件,和平时的gcc生成的可执行文件并不相同。例如我测试时的文件是test.c,
#include<stdio.h>
int main()
{
printf("Hello!");
return 0;
}
调用新的arm-linux-gcc来编译:arm-S3C2410-linux-gnu-gcc -o test test.c,这时生成的test文件是一个二进制的可执行文件,并不是我们平时常用的,所以在PC上执行这个文件的话是不行的,系统会提示:bash: ./test: cannot execute binary file。所以不能用这种方法来测试交叉编译是否成功。而应改采用file命令,例如我的是这样的:
file test
结果如下:
test: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.3, dynamically linked (uses shared libs), for GNU/Linux 2.4.3, not stripped
如果出现这样的结果说明交叉编译环境已经安装成功。否则…………重新想办法吧……
Note:在第二种方法中,gcc,gdb等文件的下载方法有两种,一是设置好网络后让shell程序自己去下载,这种方法简单,但是下载速度不敢恭维。 另外一种是自己使用下载工具去下载,然后将存放路径告诉demo-arm.sh,即 2.C里面的内容。这种方法速度让人满意。推荐使用。
来自:http://hi.baidu.com/yangyingchao/blog/item/1350e488bb803095a4c272b2.html
1. 直接下载已经编译好的文件。例如:http://arm.linux.org.uk,这里提供已经编译好的cross,如cross- 3.3.2.tar.bz2,cross-3.0.tar.bz2。直接下载某个包后解压,然后创建合适的链接或者输出环境变量即可调用。
这种做法操作很简单,但是不能根据自己的需求去定义,只能选择已经编译好的东西。
2. 自己动手利用crosstool来制作。
A. 在CROSSTOOL官方网站下载源码包,解压,进入解压后的目录。
$sudo wget http://kegel.com/crosstool/crosstool-0.42.tar.gz
$sudo tar -xzvf crosstool-0.42.tar.gz
$cd crosstool-0.42
B. 以ROOT建立目录,存放生成的交叉编译链
改变该目录的 所有者为普通用户
例如,存放生成的交叉编译链目录为/opt/crosstool,如下所示:
sudo mkdir /opt/crosstool
sudo chown $USER /opt/crosstool
C. 修改针对目标板的脚本文件。
$sudo vi demo-arm.sh
(1)这几个环境变量可以根据实际情况修改
TARBALLS_DIR=$HOME/downloads
RESULT_TOP=/opt/crosstool
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"
export GCC_LANGUAGES
(2)在若干行eval语句中选择要建立的交叉编译链的组合,去掉该行eval的#号。例如要做gcc为3.3.3,glibc为2.3.2的工具链
eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest
D. 修改目标板脚本文件demo-arm.sh中eval那一行出现的体系结构的配置文件
$sudo vi arm.dat
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-unknown-linux-gnu
TARGET_CFLAGS="-O"
可以修改TARGET变量为
TARGET=arm-S3C2410-linux-gnu(你的arm型号)
E.修改目标板脚本文件demo-arm.sh中eval那一行出现的工具链的匹配文件
$sudo vi gcc-3.4.5-glibc-2.3.6.dat
BINUTILS_DIR=binutils-2.15
GCC_DIR=gcc-3.3.3
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.4.26
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
以上变量要根据实际情况修改。不过
例如想下载linux2.6的版本,并且下载gdb最新的版本。内核具体的版本要参照http://kernel.org/和ftp://ftp.gnu.org/pub/gnu/gdb。例如。
LINUX_DIR=linux-2.6.12.1
GDB_DIR=gdb-6.0
F.以普通用户运行脚本
$sudo sh demo-arm.sh
进入漫长的等待过程中……
3. 安装完成后路径设置和测试。
编辑~/.bash_profile,在其中export PATH前加入这样一行, PATH=/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-S3C2410-linux-gnu/bin:$PATH
,改完后我的是这样的
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
PATH=/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-S3C2410-linux-gnu/bin:$PATH
export PATH
unset USERNAME
然后就好了。可以开始测试使用了。测试的方法很简单,随便找个程序源码编译一下就好了。这里用的这些编译器生成的是二进制文件,和平时的gcc生成的可执行文件并不相同。例如我测试时的文件是test.c,
#include<stdio.h>
int main()
{
printf("Hello!");
return 0;
}
调用新的arm-linux-gcc来编译:arm-S3C2410-linux-gnu-gcc -o test test.c,这时生成的test文件是一个二进制的可执行文件,并不是我们平时常用的,所以在PC上执行这个文件的话是不行的,系统会提示:bash: ./test: cannot execute binary file。所以不能用这种方法来测试交叉编译是否成功。而应改采用file命令,例如我的是这样的:
file test
结果如下:
test: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.3, dynamically linked (uses shared libs), for GNU/Linux 2.4.3, not stripped
如果出现这样的结果说明交叉编译环境已经安装成功。否则…………重新想办法吧……
Note:在第二种方法中,gcc,gdb等文件的下载方法有两种,一是设置好网络后让shell程序自己去下载,这种方法简单,但是下载速度不敢恭维。 另外一种是自己使用下载工具去下载,然后将存放路径告诉demo-arm.sh,即 2.C里面的内容。这种方法速度让人满意。推荐使用。
来自:http://hi.baidu.com/yangyingchao/blog/item/1350e488bb803095a4c272b2.html