本文在 http://blog.csdn.net/pulpdog/article/details/8023922 文章的基础上根据自己的实际情况(虚拟机中新安装的ubutun 16.04 LTS)做出的相应的修改。
1. 下载资源包
cd $HOME
mkdir ppc
cd ppc
mkdir sources
cd sources
wget http://ftp.gnu.org/gnu/binutils/binutils-2.29.tar.bz2
wget http://ftp.gnu.org/gnu/glibc/glibc-2.26.tar.bz2
wget http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.5.tar.bz2
wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2
wget ftp://ftp.kernel.org/pub/linux/kernel/v3.x/linux-3.2.1.tar.bz2
wget ftp://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.bz2
wget http://ftp.gnu.org/gnu/mpfr/mpfr-3.1.5.tar.bz2
wget http://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.bz2
wget http://ftp.gnu.org/gnu/m4/m4-1.4.18.tar.bz2
wget http://isl.gforge.inria.fr/isl-0.18.tar.bz2
mkdir ../tools
export TARGET=powerpc-linux
export TOOLS=~/ppc/tools
export SOURCES=~/ppc/sources
export PATH=$TOOLS/bin:$PATH
export LANGUAGE=C
export LC_ALL=C
http://ftp.gnu.org/gnu/ 改为镜像地址 http://mirrors.ustc.edu.cn/gnu/ 下载速度更快。
2. 安装工具
注意 : tar vxf 命令可以加压任意后缀压缩包;安装过程中,configure 出现错误时可以查看 config.log 查明原因,如需要安装 m4、mpc 等库时,按如下命令编译。
../xxx/configure --prefix=/usr
make
make install
2.1 linux 内核头文件(编译glibc使用)
cd $SOURCES
tar jvxf linux-3.2.1.tar.bz2
#把内核头文件安装到$TOOLS/$TARGET/usr/include中。
make ARCH=powerpc INSTALL_HDR_PATH=$TOOLS/$TARGET/usr headers_install
#安装后目录中的内容:
ls -p $TOOLS/$TARGET/usr/include
asm/ asm-generic/ drm/ linux/ mtd/ rdma/ scsi/ sound/ video/ xen
2.2 交叉编译 binutils
cd $SOURCES
tar jvxf binutils-2.29.tar.bz2
mkdir binutils-build
cd binutils-build
../binutils-2.29/configure\ --prefix=$TOOLS \ --target=$TARGET
make
make install
mkdir $TOOLS/include
cp ../binutils-xxx/include/libiberty.h $TOOLS/include
ls -p $TOOLS
bin/ info/ lib/ man/ powerpc-linux/ share/
2.3 交叉编译临时GCC
cd $SOURCES
tar jvxf gcc-6.1.0.tar.bz2
mkdir gcc-bootstrap-build
cd gcc-bootstrap-build
../gcc-6.1.0/configure --target=$TARGET --prefix=$TOOLS --disable-nls --disable-shared --disable-multilib --disable-decimal-float --disable-threads --disable-libmudflap --disable-libssp --disable-libgomp --without-headers --with-newlib --enable-languages=c
make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc
2.4 交叉编译glibc
解压源码:
cd $SOURCES
tar jvxf glibc-2.26.tar.bz2
tar jvxf glibc-linuxthreads-2.5.tar.bz2 --directory=glibc-2.14
修改源码中 Makeconfig 两行:
gnulib := -lgcc $(libgcc_eh) #libgcc_eh是用于处理C++异常的代码
static-gnulib := -lgcc -lgcc_eh $(libunwind)
为:
gnulib := -lgcc
static-gnulib := -lgcc
编译及安装:
mkdir glibc-build
cd glibc-build
CC=$TOOLS/bin/${TARGET}-gcc ../glibc-2.26/configure --prefix=/ --host=$TARGET --build=$(../glibc-2.26/scripts/config.guess) --with-headers=$TOOLS/$TARGET/usr/include/ --with-binutils=$TOOLS/$TARGET/bin\ --disable-profile libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes
make
make install_root=$TOOLS/$TARGET install
修改以下两个连接脚本,不然在最后编译 gcc 时会报错找不到对应的库。
修改连接脚本: $TOOLS/$TARGET/lib/libc.so
GROUP ( //lib/libc.so.6 //lib/libc_nonshared.a )
改为:
GROUP ( libc.so.6 libc_nonshared.a )
修改连接脚本:$TOOLS/$TARGET/lib/libpthread.so
GROUP ( //lib/libpthread.so.0 //lib/libpthread_nonshared.a )
改为:
GROUP ( libpthread.so.0 libpthread_nonshared.a )
2.5 交叉编译GCC
cd $SOURCES
mkdir gcc-full-build
cd gcc-full-build
../gcc-6.1.0/configure --target=$TARGET --host=$(../gcc-6.1.0/config.guess) --prefix=$TOOLS --with-headers=$TOOLS/$TARGET/usr/include/ --enable-languages=c,c++ --disable-libgomp --disable-multilib --disable-nls --enable-shared
make all
make install