Cross Compiling: Difference between revisions
(added how to compile the kernel and openssl) |
(added a patch to compile correctly without further modifications) |
||
Line 12: | Line 12: | ||
== Ubuntu/Debian == | == Ubuntu/Debian == | ||
=== | ===Installing Cross Tool=== | ||
Install required packages | Install required packages | ||
Line 48: | Line 48: | ||
"export PATH="${PATH}:/home/user/x-tools/powerpc64-unknown-linux-gnu/bin/" | "export PATH="${PATH}:/home/user/x-tools/powerpc64-unknown-linux-gnu/bin/" | ||
===Patching crosstool=== | |||
For some reason, the compiler removes the symbolic links for lib64 | |||
The following patch corrects this behaviour allowing the toolchain to work properly without further modifications | |||
====Required Patch==== | |||
save the following file as """important.patch""" in home/usr/crosstool/lib/ct-ng-1.10.0/scripts/build | |||
<pre> | |||
diff --git a/scripts/build/internals.sh b/scripts/build/internals.sh | |||
--- a/scripts/build/internals.sh | |||
+++ b/scripts/build/internals.sh | |||
@@ -157,8 +157,6 @@ | |||
# the standard lib/ dirs, so we can get rid of the symlinks | |||
for d in \ | |||
"${CT_PREFIX_DIR}" \ | |||
- "${CT_SYSROOT_DIR}" \ | |||
- "${CT_SYSROOT_DIR}/usr" \ | |||
"${CT_PREFIX_DIR}/${CT_TARGET}" \ | |||
; do | |||
CT_DoExecLog ALL rm -f "${d}/lib32" | |||
</pre> | |||
Go to that directory and apply the patch | |||
<pre> | |||
cd /home/usr/crosstool/lib/ct-ng-1.10.0/scripts/build | |||
patch < important.patch | |||
</pre> | |||
===Creating a cross compiler toolchain for ppc64=== | |||
Download graf_chokolo's kernel | Download graf_chokolo's kernel |
Revision as of 04:58, 18 April 2011
Cross Compiling
This page shows how to cross compile for CellBE/ppc64
Gentoo
Server: Emerge distcc crossdev & env-update & source /etc/profile & crossdev -t powerpc64-unknown-linux-gnu
Client: http://www.gentoo.org/doc/en/cross-compiling-distcc.xml (Because it's much better written than anything I could do)
Ubuntu/Debian
Installing Cross Tool
Install required packages
sudo apt-get install build-essential gawk bison flex automake libtool cvs lzma ncurses-dev texinfo patch g++ gcj
Create directories and compile crosstool
mkdir /home/user/crosstool mkdir /home/user/kernel mkdir -p /home/user/toolchain/powerpc tar xvjf crosstool-ng-1.10.0.tar.bz2 cd crosstool-ng-1.10.0/ ./configure --prefix=/home/user/crosstool/ make && make install
- /home/user/crosstool-ng-1.10.0/ -> crostool-ng sources
- /home/user/crosstool/ -> Crosstool install directory with binaries
- /home/user/toolchain/ -> Directory where the binary will be installed
- /home/user/toolchain/powerpc/ -> Crosstool files generated in this tutorial for powerpc
- /home/user/toolchain/x-tools/ -> generated toolchain
- /home/user/kernel -> Place were graf_chokolo's linux kernel tarball will be saved
Add the enviromental variable to bash
sudo gedit /etc/bash.bashrc
Add the following lines at the end of the file
"export PATH="${PATH}:/home/user/crosstool/bin/" "export PATH="${PATH}:/home/user/x-tools/powerpc64-unknown-linux-gnu/bin/"
Patching crosstool
For some reason, the compiler removes the symbolic links for lib64
The following patch corrects this behaviour allowing the toolchain to work properly without further modifications
Required Patch
save the following file as """important.patch""" in home/usr/crosstool/lib/ct-ng-1.10.0/scripts/build
diff --git a/scripts/build/internals.sh b/scripts/build/internals.sh --- a/scripts/build/internals.sh +++ b/scripts/build/internals.sh @@ -157,8 +157,6 @@ # the standard lib/ dirs, so we can get rid of the symlinks for d in \ "${CT_PREFIX_DIR}" \ - "${CT_SYSROOT_DIR}" \ - "${CT_SYSROOT_DIR}/usr" \ "${CT_PREFIX_DIR}/${CT_TARGET}" \ ; do CT_DoExecLog ALL rm -f "${d}/lib32"
Go to that directory and apply the patch
cd /home/usr/crosstool/lib/ct-ng-1.10.0/scripts/build patch < important.patch
Creating a cross compiler toolchain for ppc64
Download graf_chokolo's kernel
cd /home/user/kernel wget -O linux-2.6.tar.gz http://git.dukio.com/gitweb.cgi?p=linux-2.6\;a=snapshot\;h=HEAD\;sf=tgz
Copy the sample configuration file and modify it
cp /home/usr/crosstool/lib/ct-ng-1.10.0/samples/powerpc64-unknown-linux-gnu/* /home/usr/toolchain/powerpc/ cd /home/usr/toolchain/powerpc/ mv crosstool.config .config cd /home/usr/toolchain/powerpc/ ct-ng menuconfig
I've added graf_chokolos kernel
- Operating System -> Linux Kernel version -> custom tarball
- Operating System -> Path to custom tarball -> /home/user/kernel/linux-2.6.tar.gz
or
Start from scratch and configure the toolchain the way you want
cd /home/user/toolchain/powerppc/ ct-ng menuconfig
Compile ppc64 toolchain
unset LD_LIBRARY_PATH LIBRARY_PATH CPATH export LD_LIBRARY_PATH LIBRARY_PATH CPATH ct-ng build
Wait for some time until it finishes compiling
Testing if your toolchain works properly
export PATH="${PATH}:/home/user/x-tools/powerpc64-unknown-linux-gnu/bin/" powerpc64-unknown-linux-gnuspe-gcc test.c -o test
More info: http://www.ibm.com/developerworks/linux/tutorials/l-embedded-distro/section3.html
Cross compiling openssl
Download openssl sources
wget http://www.openssl.org/source/openssl-0.9.8g.tar.gz
unpack the sources
tar xvjf openssl-0.9.8g.tar.gz
Go to openssl source path
cd openssl-0.9.8g/
Change the following lines in the Makefile
INSTALLTOP=/x-tools/powerpc64-unknown-linux-gnu/powerpc64-unknown-linux-gnu/sysroot/usr OPENSSLDIR=/x-tools/powerpc64-unknown-linux-gnu/powerpc64-unknown-linux-gnu/sysroot/usru CC= powerpc64-unknown-linux-gnu-gcc AR=xpowerpc64-unknown-linux-gnu-ar $(ARFLAGS) r RANLIB= powerpc64-unknown-linux-gnu-ranlib
Finally
make
Cross compiling graf_chokolo's tools
Make sure you have a working toolchain and openssl installed
Comment the current compiler and add your cross compiler in our case "powerpc64-unknown-linux-gnu-gcc"
#CC=gcc CC=powerpc64-unknown-linux-gnu-gcc
finally
make
you can find graf_chokolo tools and scripts here
http://git.dukio.com/gitweb.cgi
Compiling graf_chokolo's kernel
Set the following environmental variables
If you haven't already
export
the cross compile environmental variables
CROSS_COMPILE=powerpc64-unknown-linux-gnu- ARCH=powerpc
Finally
make