主机环境
- Download source code
-
- binutils-2.22.tar.gz
- gcc-4.7.2.tar.bz2
- gmp-5.0.5.tar.xz
- mpfr-3.1.1.tar.xz
- mpc-1.0.1.tar.gz
- glibc-2.16.0.tar.xz
- glibc-linuxthreads-2.5.tar.bz2
- glibc-ports-2.16.0.tar.xz
- linux-3.5.4.tar.bz2
- 将以上源码放入arm-tool目录(或其它自建目录)
- 编译环境变量配置
-
- vim armenv,写入以下内容
-
- TARGET=arm-linux-gnueabi
- PREFIX=/opt/cross/gcc-4.7.2/$TARGET
- PATH=$PREFIX/bin:$PATH
- LD_LIBRARY_PATH=/opt/gmp-5.0.5/lib:/opt/mpfr-3.1.1/lib:/opt/mpc-1.0.1/lib
- export TARGET PREFIX PATH LD_LIBRARY_PATH
- source armenv使之生效
-
Instll binutils -
- tar
-xzf binutils-2.22.tar.gz - mkdir
binutils-build - cd
binutils-build - ../binutils-2.22/configure
--target=$TARGET --prefix=$PREFIX - make
-j2 - make
install - cd ..
- tar
- Install gmp安装在/opt/gmp-5.0.5下
-
- sudo mkdir -p /opt/gmp-5.0.5
- tar -jxvf gmp-5.0.5.tar.bz2
- cd gmp-5.0.5
- ./configure --prefix=/opt/gmp-5.0.5
- make && make check && sudo make install
- Install mpfr安装在/opt/mpfr-3.1.1
-
- mkdir -p /opt/mpfr-3.1.1
- tar -jxvf mpfr-3.1.1.tar.bz2
- cd
mpfr-3.1.1 - ./configure --prefix=/opt/
mpfr-3.1.1 --with-gmp=/opt/gmp-5.0.5 - make && make check && sudo make install
- Install mpc安装在/opt/mpc-1.0.1
-
- mkdir -p /opt/mpc-1.0.1
- tar -zxvf
mpc-1.0.1 .tar.gz - cd mpc-1.0.1
- ./configure --prefix=/opt/ mpc-1.0.1
--with-gmp=/opt/gmp-5.0.5 --with-mpfr=/opt/mpfr-3.1.1 - make && make check && sudo make install
- 第一次编译gcc
-
- mkdir gcc-bootstrap-build
- cd
gcc-bootstrap-build - ../gcc-4.7.2/configure --target=$TARGET --host=x86-linux-gnu --build=x86-linux-gnu
--enable-targets=all --prefix=$PREFIX --enable-languages=c --with-newlib --without-headers --disable-nls --disable-threads --disable-shared --disable-libmudflap --disable-libssp --disable-libgomp --disable-decimal-float --enable-checking=release --disable-bootstrap --disable-libquadmath --with-gmp=/opt/gmp-5.0.5 --with-mpfr=/opt/mpfr-3.1.1 --with-mpc=/opt/mpc-1.0.1 - make -j2 all-gcc
- make
-j2 all-target-libgcc - make
install-gcc - make
install-target-gcc - cp
-v libiberty/libiberty.a $PREFIX/lib - 以下两个添加 libgcc_eh.a,
,libgcc_s.a到 libgcc.a的软链接 - ln
-vs libgcc.a `arm-linux-gnueabi-gcc -print-libgcc-file-name | sed 's/libgcc/&_eh/'` - ln
-vs libgcc.a `arm-linux-gnueabi-gcc -print-libgcc-file-name | sed 's/libgcc/&_s/'` - cd ..
- 安装内核头文件
-
- tar
-xjf linux-3.5.4.tar.bz2 - cd
linux-3.5.4 - make
ARCH=arm headers_check - make
ARCH=arm INSTALL_HDR_PATH=dest headers_install - mkdir /opt/cross/gcc-4.7.2/arm-linux-gnueabi/arm-linux-gnueabi/include
- sudo
cp -rv dest/include/* $PREFIX/$TARGET/include - cd
..
- tar
- 编译glibc库
-
- tar
-xvf glibc-2.16.0.tar.xz - tar
-xvjf glibc-linuxthreads-2.5.tar.bz2 -C glibc-2.16.0 - tar
-xvf glibc-ports-2.16.0.tar.xz - mv
glibc-ports-2.16.0 glibc-2.16.0/ports - mkdir
glibc-build - cd
glibc-build - ../glibc-2.16.0/configure CC=$TARGET-gcc AR=$TARGET-ar RANLIB=$TARGET-ranlib --host=$TARGET --prefix=$PREFIX/$TARGET --with-tls --disable-profile --enable-add-ons --with-headers=$PREFIX/$TARGET/include libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes libc_cv_arm_tls=yes
- make
-j2 - make
install - cd
..
- tar
- 编译完整的gcc
-
- cd
gcc-bootstrap-build - ../gcc-4.7.2/configure --target=$TARGET --host=x86-linux-gnu --build=x86-linux-gnu --prefix=$PREFIX --enable-languages=c,c++ --enable-shared --with-gmp=/opt/gmp-5.0.5 --with-mpfr=/opt/mpfr-3.1.1 --with-mpc=/opt/mpc-1.0.1
- make
-j2 - make
install - cd ..
- cd
- Issue:
Issue:
m awk : scripts/gen-sorted. awk : line 19: runaway regular expression /, "", subd ...
make[1]: *** No rule to make target `/home/embedded/build-bools/build-glibc/Versions.all', needed by `/home/embedded/build-bools/build-glibc/abi-versions.h'. Stop.
make[1]: Leaving directory `/home/embedded/build-bools/glibc-2.14'
make: *** [all] Error 2
Solution:
ubuntu安装时默认安装了mawk,在交叉编译时,mawk会影响你的建立交叉编译环境,所以应该卸载mawk,应该安装gawk,这样就ok了。