嵌入式linux-arm交叉编译工具链的构建
时间:11-11
来源:互联网
点击:
第一步:首先下载如下源文件
binutils-2.16.tar.gz,gcc-3.4.4.tar.bz2,t-linux.diff,glibc-2.3.5.tar.gz,glibc-linuxthreads-2.3.5.tar.gz,ioperm.c.diff,linux-2.6.11.12tar.gz并且把所有的源文件放入/home/zmj/usr/arm/src文件夹中,其中zmj是用户名。并把如下脚本,写入一个文件,例如文件名为buildchain.sh,并把该文件放入usr目录下。
第二步:运行buildchain.sh脚本即可。其中第七步是不需要的,将来自己编译内核的时候还要重新配置,故可以删去。
#!/bin/bash
# Setup
PREFIX=/home/zmj/usr/arm
TARGET=arm-unknown-linux-gnu
SYSROOT=${PREFIX}/sysroot
export ARCH=arm
export CROSS_COMPILE=${TARGET}-
export PATH=$PATH:${PREFIX}/bin
mkdir -p ${PREFIX}/src
## Get the sources
#
#cd ${PREFIX}/src
#tar xvfz binutils-2.16.tar.gz
#mkdir -p BUILD/binutils-2.16
#cd BUILD/binutils-2.16
# ../../binutils-2.16/configure --prefix=${PREFIX} --target=${TARGET} --with-sysroot=${SYSROOT} 2>&1 | tee configure.out
#make 2>&1 | tee make.out
#make install 2>&1 | tee -a make.out
#
# Linux Kernel Headers
#cd ${PREFIX}/src
#tar xvfz linux-2.6.11.12.tar.gz
#ln -s linux-2.6.11.12 linux
#cd linux
#make ARCH=arm CROSS_COMPILE=${CROSS_COMPILE} menuconfig
#make include/linux/version.h
#mkdir -p ${SYSROOT}/usr/include
#cp -a ${PREFIX}/src/linux/include/linux ${SYSROOT}/usr/include/linux
#cp -a ${PREFIX}/src/linux/include/asm-arm ${SYSROOT}/usr/include/asm
#cp -a ${PREFIX}/src/linux/include/asm-generic ${SYSROOT}/usr/include/asm-generic
##
## Glibc headers
#
#cd ${PREFIX}/src
##tar xvfz glibc-2.3.5.tar.gz
##patch -d glibc-2.3.5 -p1 #cd glibc-2.3.5
##tar xvfj ../glibc-linuxthreads-2.3.5.tar.gz
#cd ..
#mkdir BUILD/glibc-2.3.5-headers
#cd BUILD/glibc-2.3.5-headers
#../../glibc-2.3.5/configure --prefix=/usr --host=${TARGET} --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include 2>&1 | tee configure.out
#make cross-compiling=yes install_root=${SYSROOT} install-headers 2>&1 | tee make.out
#touch ${SYSROOT}/usr/include/gnu/stubs.h
#touch ${SYSROOT}/usr/include/bits/stdio_lim.h
#
# Step 4: stage 1 gcc
#
#cd ${PREFIX}/src
#bunzip2 -c gcc-3.4.4.tar.bz2 | tar xvf -
#patch -d gcc-3.4.4 -p1 < flow.c.diff
#patch -d gcc-3.4.4 -p1 < t-linux.diff
#mkdir -p BUILD/gcc-3.4.4-stage1
#cd BUILD/gcc-3.4.4-stage1
#../../gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c --with-sysroot=${SYSROOT} 2>&1 | tee configure.out
#make 2>&1 | tee make.out
#make install 2>&1 | tee -a make.out
#
# Step 5: glibc
#cd ${PREFIX}/src
#mkdir BUILD/glibc-2.3.5
#cd BUILD/glibc-2.3.5
#BUILD_CC=gcc CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar RANLIB=${CROSS_COMPILE}ranlib AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld ../../glibc-2.3.5/configure --prefix=/usr --build=i686-pc-linux-gnu--host=arm-unknown-linux-gnu --target=arm-unknown-linux-gnu --without-__thread --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include 2>&1 | tee configure.out
#
#make 2>&1 | tee make.out
#make install_root=${SYSROOT} install
# Step 6: stage 2 gcc
#cd ${PREFIX}/src
#mkdir BUILD/gcc-3.4.4
#cd BUILD/gcc-3.4.4
#../../gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c,c++ --with-sysroot=${SYSROOT} 2>&1 | tee configure.out
#make 2>&1 | tee make.out
#make install 2>&1 | tee -a make.out
#cd ../..
# Step 7: Linux kernel
cd ${PREFIX}/src/linux
make zImage
make modules
make INSTALL_MOD_PATH=${SYSROOT} modules_install
注意:文中的大部分#号是自己当初为了分步编译差错方便而屏蔽掉的部分。自己编译的时候可以去掉。顺便说一下我是在suse环境下建立这个交叉编译环境的,内核是2.6以上的版本,其中—build=i686-pc-linux-gnu。
几个简单的命令::set nu显示文本行号。:1,5s/^/#/g可以在文本的1~5行添加一个#号,也即屏蔽掉这几行。1,5s/^#//g去掉文本1~5行文本开头的#号。
第三步测试程序Helloworld.c
#include《stdio.h》
int main( )
{
printf(“Hello ,world!\n”);
return 0;
}
可以在脚本中/etc/bash.bashrc中写入环境变量,也可以直接写如下:
export PATH=/home/zmj/usr/arm/arm/bin:$PATH其中bin中存放的是自己交叉编译器的路径。
cd ..到helloworld.c的目录。# arm-unknown-linux-gnu-gcc helloworld.c完毕!
binutils-2.16.tar.gz,gcc-3.4.4.tar.bz2,t-linux.diff,glibc-2.3.5.tar.gz,glibc-linuxthreads-2.3.5.tar.gz,ioperm.c.diff,linux-2.6.11.12tar.gz并且把所有的源文件放入/home/zmj/usr/arm/src文件夹中,其中zmj是用户名。并把如下脚本,写入一个文件,例如文件名为buildchain.sh,并把该文件放入usr目录下。
第二步:运行buildchain.sh脚本即可。其中第七步是不需要的,将来自己编译内核的时候还要重新配置,故可以删去。
#!/bin/bash
# Setup
PREFIX=/home/zmj/usr/arm
TARGET=arm-unknown-linux-gnu
SYSROOT=${PREFIX}/sysroot
export ARCH=arm
export CROSS_COMPILE=${TARGET}-
export PATH=$PATH:${PREFIX}/bin
mkdir -p ${PREFIX}/src
## Get the sources
#
#cd ${PREFIX}/src
#tar xvfz binutils-2.16.tar.gz
#mkdir -p BUILD/binutils-2.16
#cd BUILD/binutils-2.16
# ../../binutils-2.16/configure --prefix=${PREFIX} --target=${TARGET} --with-sysroot=${SYSROOT} 2>&1 | tee configure.out
#make 2>&1 | tee make.out
#make install 2>&1 | tee -a make.out
#
# Linux Kernel Headers
#cd ${PREFIX}/src
#tar xvfz linux-2.6.11.12.tar.gz
#ln -s linux-2.6.11.12 linux
#cd linux
#make ARCH=arm CROSS_COMPILE=${CROSS_COMPILE} menuconfig
#make include/linux/version.h
#mkdir -p ${SYSROOT}/usr/include
#cp -a ${PREFIX}/src/linux/include/linux ${SYSROOT}/usr/include/linux
#cp -a ${PREFIX}/src/linux/include/asm-arm ${SYSROOT}/usr/include/asm
#cp -a ${PREFIX}/src/linux/include/asm-generic ${SYSROOT}/usr/include/asm-generic
##
## Glibc headers
#
#cd ${PREFIX}/src
##tar xvfz glibc-2.3.5.tar.gz
##patch -d glibc-2.3.5 -p1
##tar xvfj ../glibc-linuxthreads-2.3.5.tar.gz
#cd ..
#mkdir BUILD/glibc-2.3.5-headers
#cd BUILD/glibc-2.3.5-headers
#../../glibc-2.3.5/configure --prefix=/usr --host=${TARGET} --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include 2>&1 | tee configure.out
#make cross-compiling=yes install_root=${SYSROOT} install-headers 2>&1 | tee make.out
#touch ${SYSROOT}/usr/include/gnu/stubs.h
#touch ${SYSROOT}/usr/include/bits/stdio_lim.h
#
# Step 4: stage 1 gcc
#
#cd ${PREFIX}/src
#bunzip2 -c gcc-3.4.4.tar.bz2 | tar xvf -
#patch -d gcc-3.4.4 -p1 < flow.c.diff
#patch -d gcc-3.4.4 -p1 < t-linux.diff
#mkdir -p BUILD/gcc-3.4.4-stage1
#cd BUILD/gcc-3.4.4-stage1
#../../gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c --with-sysroot=${SYSROOT} 2>&1 | tee configure.out
#make 2>&1 | tee make.out
#make install 2>&1 | tee -a make.out
#
# Step 5: glibc
#cd ${PREFIX}/src
#mkdir BUILD/glibc-2.3.5
#cd BUILD/glibc-2.3.5
#BUILD_CC=gcc CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar RANLIB=${CROSS_COMPILE}ranlib AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld ../../glibc-2.3.5/configure --prefix=/usr --build=i686-pc-linux-gnu--host=arm-unknown-linux-gnu --target=arm-unknown-linux-gnu --without-__thread --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include 2>&1 | tee configure.out
#
#make 2>&1 | tee make.out
#make install_root=${SYSROOT} install
# Step 6: stage 2 gcc
#cd ${PREFIX}/src
#mkdir BUILD/gcc-3.4.4
#cd BUILD/gcc-3.4.4
#../../gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c,c++ --with-sysroot=${SYSROOT} 2>&1 | tee configure.out
#make 2>&1 | tee make.out
#make install 2>&1 | tee -a make.out
#cd ../..
# Step 7: Linux kernel
cd ${PREFIX}/src/linux
make zImage
make modules
make INSTALL_MOD_PATH=${SYSROOT} modules_install
注意:文中的大部分#号是自己当初为了分步编译差错方便而屏蔽掉的部分。自己编译的时候可以去掉。顺便说一下我是在suse环境下建立这个交叉编译环境的,内核是2.6以上的版本,其中—build=i686-pc-linux-gnu。
几个简单的命令::set nu显示文本行号。:1,5s/^/#/g可以在文本的1~5行添加一个#号,也即屏蔽掉这几行。1,5s/^#//g去掉文本1~5行文本开头的#号。
第三步测试程序Helloworld.c
#include《stdio.h》
int main( )
{
printf(“Hello ,world!\n”);
return 0;
}
可以在脚本中/etc/bash.bashrc中写入环境变量,也可以直接写如下:
export PATH=/home/zmj/usr/arm/arm/bin:$PATH其中bin中存放的是自己交叉编译器的路径。
cd ..到helloworld.c的目录。# arm-unknown-linux-gnu-gcc helloworld.c完毕!
linux-arm交叉编译工具 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)