Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103718128
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-05-15 21:14:47

作者: iibull  出自:
author: iibull email: nick: 阿牛@FUZHOU 20080515
如需转载请注明作者出处。

折腾了一天,终于把arm-linux-gcc4.11搞定了。记录如下,哈哈 免得大家走弯路。顺便预祝女儿周岁生日快乐。

首页要准备好编译用的软件包:
软件包
wget -c
wget -c
wget -c
wget -c
wget -c
wget -c 源码文件及各项补丁

patches
wget
wget
wget
wget
wget
wget
wget
wget
wget
wget

wget
wget
wget
wget
wget
wget
wget
wget
wget
wget
wget
wget

wget
wget
wget
wget
wget
wget
wget


安装一些可能需要的软件包:
sudo apt-get install bison flex texinfo gawk

整个编译过程的工作目录:
sudo mkdir /crosstool
sudo chmod a+rwx /crosstool
cd /crosstool
mkdir linux-2.6.20
mkdir -p src/patches

linux-2.6.20存放要用到的内核头文件,patches存放需要的补丁,src存放要用到的软件包 PS:编译完成后的文件将安装到 ~/arm-linux上

设置一些环境变量 (~/.bashrc)
export CLFS_HOST="$(echo $MACHTYPE | sed "s/$(echo ${MACHTYPE} | cut -d- -f2)/cross/")"
export CLFS_TARGET="arm-linux"
export CLFS=/crosstool/arm-linux
export PATH=$CLFS/bin:$CLFS/cross-tools/bin:$PATH
unset CFLAGS
unset CXXFLAGS

source ~/.bashrc 使之生效

新建头文件存放地址
install -dv $CLFS/include
install -dv $CLFS/usr
install -dv $CLFS/usr/include

安装内核头文件:
新建保存头文件的目录,并生成linux/version.h文件指示内核版本,如果缺少这个文件后面编译会出错
install -dv ${CLFS}/usr/include
cd linux-2.6.20
make include/linux/version.h

复制必要的头文件和与体系结构(arm)相关的头文件
install -dv ${CLFS}/usr/include
cp -av include/{asm-generic,linux,mtd,scsi,sound} ${CLFS}/usr/include
cp -av include/asm-arm ${CLFS}/usr/include/asm



编译binutils-2.17:
#打上必要的补丁
cd src
tar jxvf binutils-2.17.tar.bz2
cd binutils-2.17
patch -Np1 -i ../patches/binutils-2.17-posix-1.patch (不要乱打补丁,否则make不成功)


创建编译目录:
mkdir -v ../binutils-build
cd ../binutils-build

配置configure:
../binutils-2.17/configure --prefix=${CLFS}/cross-tools --host=${CLFS_HOST} --target=${CLFS_TARGET} --with-sysroot=${CLFS} --disable-nls --enable-shared --disable-multilib

编译binutils:
make configure-host
make

安装binutils到 ${CLFS}/cross-tools:
make install

打开${CLFS}/cross-tools/bin,就会发现生成了好多arm-linux-开头的文件

以后会用到下面这个头文件,所以安装到include:
cp -v ../binutils-2.17/include/libiberty.h ${CLFS}/usr/include

安装 glibc的头文件到内核头文件中
编译glibc的时候需要glibc的头文件,所以要复制到内核头文件夹中
cd src
tar jxvf glibc-2.5.tar.bz2
cd glibc-2.5

去处glibc的gcc 3.4.x依赖
cp configure{,.orig}
sed -e 's/3.4/3.[0-9]/g' configure.orig > configure

安装glibc的arm支持:
tar -jxvf ../glibc-ports-2.5.tar.bz2
mv -v glibc-ports-2.5 ports

新建编译目录:
mkdir -v ../glibc-build_1
cd ../glibc-build_1

添加NPTL线程库支持:
echo "libc_cv_forced_unwind=yes" > config.cache
echo "libc_cv_c_cleanup=yes" >> config.cache
echo "libc_cv_arm_tls=yes" >> config.cache

指定安装路径:
echo "install_root=${CLFS}" > configparms

配置configure
CC=gcc
../glibc-2.5/configure --prefix=/usr --host=${CLFS_TARGET} --build=${CLFS_HOST} --with-headers=${CLFS}/usr/include --cache-file=config.cache

安装glibc头文件:
make install-headers ##(vi ../glibc-2.5/scripts/gen-sorted.awk出现错误时19/59/65行修改代码把 \[^\] 改成 \[\^]) 或者装gawk工具

cp -v bits/stdio_lim.h ${CLFS}/usr/include/bits
touch ${CLFS}/usr/include/gnu/stubs.h
cp -v ../glibc-2.5/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h ${CLFS}/usr/include/bits

编译静态的gcc(不带glibc),用来编译glibc
cd src
tar jxvf gcc-4.1.1.tar.bz2
cd gcc-4.1.1

打上补丁:
patch -Np1 -i ../patches/gcc-4.1.1-posix-1.patch
patch -Np1 -i ../patches/gcc-4.1.1-cross_search_paths-1.patch

新建编译目录:
mkdir -v ../gcc-build
cd ../gcc-build

配置configure:
../gcc-4.1.1/configure --prefix=${CLFS}/cross-tools --host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib --with-sysroot=${CLFS} --disable-nls --disable-shared --enable-languages=c

编译安装gcc-static
make all-gcc
make install-gcc

编译安装glibc:

解压补丁并打上补丁:
cd src
mkdir glibc_2.5
tar jxvf glibc-2.5.tar.bz2 -C glibc_2.5
cd glibc_2.5; mv glibc-2.5/* ./; rm -rf glibc-2.5/

去处glibc的gcc 3.4.x依赖
cp configure{,.orig}
sed -e 's/3.4/3.[0-9]/g' configure.orig > configure

tar -jxvf ../glibc-ports-2.5.tar.bz2
mv -v glibc-ports-2.5 ports

patch -Np1 -i ../patches/glibc-2.5-libgcc_eh-2.patch
patch -Np1 -i ../patches/glibc-2.5-localedef_segfault-1.patch
patch -Np1 -i ../patches/glibc-2.5-cross_hacks-2.patch

新建编译目录:
mkdir -v ../glibc-build_2
cd ../glibc-build_2

编译并安装:
echo "libc_cv_forced_unwind=yes" > config.cache
echo "libc_cv_c_cleanup=yes" >> config.cache
echo "libc_cv_arm_tls=yes" >> config.cache
echo "install_root=${CLFS}" > configparms

BUILD_CC="gcc"
CC="${CLFS_TARGET}-gcc"
AR="${CLFS_TARGET}-ar"
RANLIB="${CLFS_TARGET}-ranlib"
../glibc_2.5/configure --prefix=/usr --libexecdir=/usr/lib/glibc --host=${CLFS_TARGET} --build=${CLFS_HOST} --disable-profile --enable-add-ons --with-tls --enable-kernel=2.6.0 --with-__thread --with-binutils=${CLFS}/cross-tools/bin --with-headers=${CLFS}/usr/include --cache-file=config.cache

安装glibc头文件:
make install-headers ##(用mawk时会发送错误,清修改vi ../glibc-2.5/scripts/gen-sorted.awk出现错误时19/59/65行修改代码把 \[^\] 改成 \[\^]) 或者装gawk工具

cp -v bits/stdio_lim.h ${CLFS}/usr/include/bits
touch ${CLFS}/usr/include/gnu/stubs.h
cp -v ../glibc_2.5/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/pthreadtypes.h ${CLFS}/usr/include/bits

make
make install

配置glibc
cat > ${CLFS}/etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf

passwd: files
group: files
shadow: files

hosts: files dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

# End /etc/nsswitch.conf
EOF(ctrl +D)

配置glibc的动态装载:
cat > ${CLFS}/etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf

/usr/local/lib
/opt/lib

# End /etc/ld.so.conf
EOF(ctrl +D)

完全安装gcc

打上个GCC的补丁:
cd ../gcc-4.1.1
patch -Np1 -i ../patches/gcc-4.1.1-posix-1.patch
patch -Np1 -i ../patches/gcc-4.1.1-PR20425-1.patch
patch -Np1 -i ../patches/gcc-4.1.1-cross_search_paths-1.patch

配置Configure:
cd ../gcc-build

../gcc-4.1.1/configure --prefix=${CLFS}/cross-tools --host=${CLFS_HOST} --target=${CLFS_TARGET} --disable-multilib --with-sysroot=${CLFS} --disable-nls --enable-shared --enable-languages=c,c++ --enable-__cxa_atexit --enable-c99 --enable-long-long --enable-threads=posix

编译安装gcc:
make
make install

编译gdb
cd src
tar jxvf gdb-6.6.tar.bz2
mkdir gdb-build
cd gdb-build
../gdb-6.6/configure --prefix=${CLFS}/cross-tools --host=${CLFS_HOST} --target=${CLFS_TARGET} --with-sysroot=${CLFS} --enable-threads=posix --enable-long-long

make
make install


打包压缩arm-linux-toolchains

tar cvjf /tmp/arm-linux-toolchains.tar.bz2 \
cross-tools/arm-linux \
cross-tools/bin/arm-linux-* \
cross-tools/bin/genext2fs \
cross-tools/include/c++/4.1.1 \
cross-tools/lib/gcc/arm-linux/4.1.1\
cross-tools/libexec/gcc/arm-linux/4.1.1
阅读(440) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~