Creating a crosscompiler is 3 stage process, this only explains cross compiler for 32 bit cross compiler!!!
my build env:
Linux infinity 2.6.34.12lts #1 SMP Tue Jun 19 23:21:49 IST 2012 i686 Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz GenuineIntel GNU/Linux
gcc version 4.4.4 (GCC)
GNU ld (Linux/GNU Binutils) 2.20.51.0.8.20100412
NOTE: host GCC is very important ... it affects target GCC version a lot, for example FC16 GCC 4.6.x, creating cross compiler based on GCC 4.4.x fails!!!
packages:
binutils (2.20.1)
gcc (4.4.7)
glibc (2.14.1)
gmp (5.0.5)
mpfr (3.1.1)
mpc (1.0)
(my) build directory setup
/opt/cross/
|--binutils/
|--gcc-4.4.7/
| |--mpfr/
| |--mpc/
| |--gmp/
|--glibc/
|--objroot/
|
|--stage1
|--stage1_libc
|--stage2
|--stage2_libc
|--stage3
===========================stage1
1. binutils
#cd /opt/cross/stage1
#../binutils-2.20.1/configure --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=powerpc-home-linux-gnu --with-pkgversion=ratnaraj --prefix=/opt/cross/objroot --with-sysroot=/opt/cross/objroot/powerpc-home-linux-gnu/sysroot --disable-nls --disable-werror
#make
#make install
this ll install ld, as and other binutils in /opt/cross/objroot/bin/
2. gcc (basic, w/o libc): building static gcc w/o libc, to compile 2nd stage
#cd /opt/cross/stage1
#../gcc-4.4.7/configure --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=powerpc-home-linux-gnu --disable-libssp --disable-libgomp --disable-libmudflap --disable-nls --without-headers --with-newlib --disable-shared --disable-threads --enable-languages=c --with-pkgversion=ratnaraj --prefix=/opt/cross/objroot --disable-libquadmath --disable-decimal-float --disable-libffi --with-sysroot=/opt/cross/objroot/powerpc-home-linux-gnu/sysroot --disable-multilib --without-ppl --without-cloog --with-mpfr-include=$(pwd)/../gcc-4.4.7/mpfr/src --with-mpfr-lib=$(pwd)/mpfr/src/.libs
#make
#make install
3. kernel headers
#cd /opt/cross/linux-2.6.34.12/
#export PATH=/opt/cross/objroot/bin:$PATH
#CC=powerpc-home-linux-gnu-gcc LD=powerpc-home-linux-gnu-ld RANLIB=powerpc-home-linux-gnu-ranlib AR=powerpc-home-linux-gnu-ar AS=powerpc-home-linux-gnu-as BUILD_CC=gcc make ARCH=powerpc INSTALL_HDR_PATH=/opt/cross/objroot/powerpc-home-linux-gnu/sysroot/usr headers_install
4. some adjustments:
#ln -vs libgcc.a `powerpc-home-linux-gnu-gcc -print-libgcc-file-name | sed 's/libgcc/&_eh/'`
if u skip this u'll understand why to do it!!
vim /opt/cross/objroot/powerpc-home-linux-gnu/sysroot/usr/include/asm/ptrace.h
here, move "#include
5. glibc
#cd /opt/cross/stage1_libc
#../glibc-2.14.1/configure --build=i686-pc-linux-gnu --host=powerpc-home-linux-gnu --with-pkgversion=ratnaraj --prefix=/opt/cross/objroot --with-sysroot=/opt/cross/objroot/powerpc-home-linux-gnu/sysroot --disable-profile libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes --enable-add-ons --enable-kernel=2.6.34 libc_cv_ctors_header=yes
#make
#make install
#make install-headers install-bootstrap-headers=yes
6. more adjustments (some linking)
#cd /opt/cross/objroot/powerpc-home-linux-gnu/
#ln -s ../include include
#cd /opt/cross/objroot/powerpc-home-linux-gnu/sysroot/usr/
#ln -s ../../../lib lib
==========================stage2
7. gcc (stage2)
cd /opt/cross/stage2
../gcc-4.4.7/configure --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=powerpc-home-linux-gnu --disable-libssp --disable-libgomp --disable-libmudflap --disable-nls --enable-languages=c --with-pkgversion=ratnaraj --prefix=/opt/cross/objroot --disable-libquadmath --disable-decimal-float --disable-libffi --with-sysroot=/opt/cross/objroot/powerpc-home-linux-gnu/sysroot --disable-multilib --without-ppl --without-cloog --with-mpfr-include=$(pwd)/../gcc-4.4.7/mpfr/src --with-mpfr-lib=$(pwd)/mpfr/src/.libs --enable-symvers=gnu --enable-__cxa_atexit
make
make install
8. glibc (stage2)
cd /opt/cross/stage2_libc
../glibc-2.14.1/configure --build=i686-pc-linux-gnu --host=powerpc-home-linux-gnu --with-pkgversion=ratnaraj --prefix=/opt/cross/objroot --with-sysroot=/opt/cross/objroot/powerpc-home-linux-gnu/sysroot --disable-profile --enable-add-ons --enable-kernel=2.6.34 --without-cvs --without-gd
make
make install
make install-headers install-bootstrap-headers=yes
=========================stage3
9. gcc
cd /opt/cross/stage3
../gcc-4.4.7/configure --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=powerpc-home-linux-gnu --enable-languages=c,c++ --with-pkgversion=ratnaraj --prefix=/opt/cross/objroot --with-sysroot=/opt/cross/objroot/powerpc-home-linux-gnu/sysroot --with-mpfr-include=$(pwd)/../gcc-4.4.7/mpfr/src --with-mpfr-lib=$(pwd)/mpfr/src/.libs --enable-symvers=gnu --enable-__cxa_atexit --enable-shared --enable-threads --disable-nls --with-gnu-as --with-gnu-ld --disable-libssp --disable-libgomp --disable-libmudflap
make
make install
10. glibc (not required)
cd /opt/cross/stage3_libc
../glibc-2.14.1/configure --build=i686-pc-linux-gnu --host=powerpc-home-linux-gnu --with-pkgversion=ratnaraj --prefix=/opt/cross/objroot --with-sysroot=/opt/cross/objroot/powerpc-home-linux-gnu/sysroot --disable-profile --enable-add-ons --enable-kernel=2.6.34 --without-cvs --without-gd
make
make install
make install-headers install-bootstrap-headers=yes
========================================================================
GDB can be compiled using this cross compiler,
cd /opt/cross/gdbobj
../gdb-7.3.1/configure --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=powerpc-home-linux-gnu --with-pkgversion=ratnaraj --prefix=/opt/cross/objroot --with-sysroot=/opt/cross/objroot/powerpc-home-linux-gnu/sysroot
========================================================================
kernel cross compilation :)
no we are interested only in /opt/cross/objroot/, "/opt/cross/objroot" directory structure can be copied to other systems.
export PATH=/opt/cross/objroot/bin:$PATH
make O=../objdir ARCH=powerpc CROSS_COMPILE=powerpc-home-linux-gnu- CC=powerpc-home-linux-gnu-gcc AS=powerpc-home-linux-gnu-as LD=powerpc-home-linux-gnu-ld HOSTCC=gcc all uImage p4080ds_36b.dtb p4080ds-usdpaa.dtb
independet kernel module compile
complete path of "objdir" from kernel cross compile is needed
Makefile of module ll have following,
obj-$(SOME_VAR) +=
obj-m +=
to compile,
make ARCH=powerpc CROSS_COMPILE=powerpc-home-linux-gnu- CC=powerpc-home-linux-gnu-gcc AS=powerpc-home-linux-gnu-as LD=powerpc-home-linux-gnu-ld HOSTCC=gcc -C /path/of/objdir M=/path/of/module/klm modules
