Toolchain

The toolchain is a set of binaries, system libraries and tools which allow you to build (in our case, cross-compile) u-boot and the kernel for a target platform. This will, to some limited extent, need to match the target rootfs. A large and incompatible change has taken place recently, through the Hard Float ABI. Now, two different debian and ubuntu ports are binary incompatible with each other.

Ubuntu 10.04
For Ubuntu 10.04 you can install a prebuilt toolchain like this very easily (newer Ubuntu version may have this pacakage by default): sudo add-apt-repository ppa:linaro-maintainers/toolchain

sudo apt-get update

sudo apt-get install gcc-arm-linux-gnueabi

Linaro toolchain
One option is to get a linaro released toolchain. Ignore most of the files there. Take the gcc-linaro-arm-linux-gnueabihf-4.7-{milestone}_linux.tar.xz file and untar it. You will find a bin directory in there. Temporarily add it to the environment you are building from:

export PATH="$PATH":/home/user/folder/gcc-linaro-arm-linux-gnueabihf-*_linux/bin/

Recent linaro toolchains are Hard Float (hf), which only runs us into one issue with u-boot. This will be used throughout the document. Wherever you see something like

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

Replace arm-linux-gnueabihf- with arm-linux-gnueabi- if your are not using a hardfloat toolchain.

'''WARNING: Do not use the 4.8 gcc versions of the linaro toolchain to build legacy kernels (sunxi-3.4 etc.), those seem to have issues building the kernel. Use an earlier version instead.'''

Debian
To install Cross-development Toolchains for Debian follow the instructions on emdebian.org.

Note: Emdebian's armhf-toolchain is only available for Debian/unstable at the moment.

Edit your /etc/apt/sources.list as approriate and advised above: deb http://www.emdebian.org/debian/ unstable main Install Cross Compiler and build utilities: apt-get install emdebian-archive-keyring apt-get update apt-get install gcc-4.7-arm-linux-gnueabihf You might want additional tools for building a sunxi kernel that are not related to the cross-compiler: apt-get install build-essential git debootstrap u-boot-tools Create a ~/bin to store symlinks to specific version of the cross-compiler-tools so they are found by the kernel build system: mkdir ~/bin cd ~/bin for i in /usr/bin/arm-linux-gnueabihf*-4.7 ; do j=${i##/usr/bin/}; ln -s $i ${j%%-4.7} ; done

Usually ~/bin is already included in $PATH, otherwise you will need to add these lines in your .profile: if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi
 * 1) set PATH so it includes user's private bin if it exists

Code Sourcery
Another option is to install the Sourcery toolchain from Code Sourcery (now in Mentor Graphics). Download Code Sourcery G++ 2010 9-50 https://sourcery.mentor.com/sgpp/lite/arm/portal/release1600 (official link, email registration required)

Direct link: https://netst.org/pub/linux/ARM/CodeSourcery/arm-2010.09-50-arm-none-linux-gnueabi.bin (unofficial link)

chmod +x arm-2010.09-50-arm-none-linux-gnueabi.bin ./arm-2010.09-50-arm-none-linux-gnueabi.bin

If you are using Ubuntu, you may need to switch to use bash shell (instead of dash shell) sudo dpkg-reconfigure -plow dash     ( then choose [No], this changes from using dash shell to using bash shell )

It will now install CodeSourcery with a GUI installer

Follow default settings and do Next, Next, Next, etc…

It should install in: ~/CodeSourcery/     ( for example: /home/penguin/CodeSourcery/ )

Make sure the CodeSourcery binaries are added to your path (if your username is penguin, then this should be correct):

echo "export PATH=~/CodeSourcery/Sourcery_G++_Lite/bin:\${PATH}" >> ~/.bashrc export PATH=~/CodeSourcery/Sourcery_G++_Lite/bin:$PATH  (or you can just spawn a new terminal window to update the path) echo $PATH (make sure your path is updated)