Native toolchains are tools which makes binaries for the environment where toolchain itself is being run.i.e Host and target are same platform.

+

Native toolchains are tools which makes binaries for the environment where the toolchain itself is being run (i.e. Host and target are same platform.

−

This type of Compilation process is called Native compilation .Meaning that the program is compiled on same platform where it has to be run. Similar to normal PC based program ,they are compiled and run on same machine.

+

This type of Compilation process is called Native compilation .Meaning that the program is compiled on same platform where it has to be run. Most common example of Native compilation is compilation for normal PC based program ,they are compiled and run on same machine.

−

+

−

e.g. Normal GCC Toolchain in x86 Linux machine is a Native toolchain.

+

−

It is much easier to program using this method as it doesn’t involve any Makefile changes.

Earlier embedded devices had very less memory and space and also limited supports of Input-output peripherals, hence Native compilation was not possible or very difficult.

+

Earlier embedded devices had very less memory and space and also limited Input-output peripherals, hence Native compilation was not possible or very difficult.

−

But with the advent of powerful embedded ARM processor its now possible to make application on the platform itself. Same can be done in Hawkboard too.Yet compilation will be slower as compare to that in x86 machine.

+

But with the advent of powerful embedded ARM processor its now possible to make application on the platform itself. Same can be done in Hawkboard too but Compilation will be slower as compare to that in x86 machine.

−

'''b)Croos Toolchain'''

+

'''b)Cross Toolchain'''

Toolchain which are used to compile the application that will run of different machine(architecture) .This is usually used for embedded apps (e.g ARM programming)

Toolchain which are used to compile the application that will run of different machine(architecture) .This is usually used for embedded apps (e.g ARM programming)

You program/compile in x86 environment and run in ARM Board. This type of compiling is called cross compiling.

You program/compile in x86 environment and run in ARM Board. This type of compiling is called cross compiling.

−

Since native compilation is either not possible or very slow ,Cross compilation present a better alternative for faster development .Only drawback is to properly set build environment and Makefiles.

+

Since native compilation is either not possible or very slow ,Cross compilation present a better alternative for faster development .Only drawback is to properly set build environment and Makefiles. Cross Compilation is most common way of Development in Embedded System.

'''c)Hybrid Toolchain'''

'''c)Hybrid Toolchain'''

Line 43:

Line 41:

It similar to native toolchain,but infact toolchain run in virtualised environment

It similar to native toolchain,but infact toolchain run in virtualised environment

on Host.Simple example is QEMU -ARM Running on X86 Linux & you are developing application

on Host.Simple example is QEMU -ARM Running on X86 Linux & you are developing application

−

on this Virtual environment.

+

inside this Virtual environment.

This has advantage of both Native and Cross compilation.Speed of cross compilation & Ease

This has advantage of both Native and Cross compilation.Speed of cross compilation & Ease

Line 54:

Line 52:

and C, one uses machine A to build a cross compiler that runs on machine B to create executables for machine C.

and C, one uses machine A to build a cross compiler that runs on machine B to create executables for machine C.

Not practiced normally .

Not practiced normally .

−

==Native Toolchain & Compilation==

==Native Toolchain & Compilation==

−

There are various ways solution to compile the application natively on hawkboard.

+

There are various ways to compile the application natively on hawkboard.

==='''1. Using Ubuntu Rootfs'''===

==='''1. Using Ubuntu Rootfs'''===

−

Rootstock script in Ubuntu provides a easy way of making Root Filesystem

+

If you are using Ubuntu as Development Host,Ubuntu provides a Script '''Rootstock''' that provides a easy way of making Root Filesystem.Give gcc,vi,g++ as ''seed'' parameter to rootstock script and you will have a GNU Toolchain inside the rootfs.

−

give gcc,vi,g++ as ''seed'' parameter to rootstock command and you will have

Source the Path of cross-compiler-armv5l\bin and compile the C program using

==='''3.Cross Toolchain by Fedora Arm Project'''===

==='''3.Cross Toolchain by Fedora Arm Project'''===

Line 205:

Line 230:

====4.Bitbake(Openembedded)====

====4.Bitbake(Openembedded)====

Bitbake is the tool used by [http://wiki.openembedded.net/index.php/Main_Page OpenEmbedded]. The best way to get started is probably by just building an existing distribution that uses openembedded (e.g. Ångström, see http://www.angstrom-distribution.org for details).

Bitbake is the tool used by [http://wiki.openembedded.net/index.php/Main_Page OpenEmbedded]. The best way to get started is probably by just building an existing distribution that uses openembedded (e.g. Ångström, see http://www.angstrom-distribution.org for details).

+

+

+

==Transferring Binaries/Executable to Hawkboard==

+

Once the application has been compiled on the Host ,It needs to Transferred to Hawkboard.

+

One of many ways could be used.

+

+

'''1.NFS Boot:-''' If you are using NFS Boot to load RootFS,Then you can simple copy paste the Binary in home dir or any folder of

+

NFS Shared folder.Once Binary has been transferred execute it as usual.

+

+

'''2.SD/USB Drive-'''Binary can also be transferred if you SD Card or USB Port is empty by inserting the Card or USB Drive

+

Containing the Binary,Mounting and subsequently accessing it.

+

+

'''3.FTP /SCP :-'''If RootFS contains ftp or scp you can also used that to copy compiled binary from Host to Target(Hawkboard)

+

+

'''3.Wget''' Preferred method would be to wget the file from Host,It avoids need of setting FTP or SCP,only thing is that you need to

+

share the File containing binary through HTTP Server.

+

+

Python has a simple HTTP Server in built,And since most Linux machine will containing python to share the binary over HTTP on host

+

host$ cd programs

+

host$ python -m SimpleHTTPServer

+

+

This will start http server on port 8000 ,on Target simply run wget to access the file

+

+

Target$ wget http://<ip of host>:8000/a.out

==Hybrid Toolchain & Compilation==

==Hybrid Toolchain & Compilation==

Line 225:

Line 274:

Now you can build/test packages etc, the chroot works like any other x86 chroot on your system as long as you have the qemu-arm-static package installed with the advantage that you can make use of all resources your host system provides (CPU speed, RAM, diskspeed etc)

Now you can build/test packages etc, the chroot works like any other x86 chroot on your system as long as you have the qemu-arm-static package installed with the advantage that you can make use of all resources your host system provides (CPU speed, RAM, diskspeed etc)

To copy files or Native toolchain to Chroot environment you must exit out of chroot and copy as normal then chroot to "chroot-eabi" directory.

To copy files or Native toolchain to Chroot environment you must exit out of chroot and copy as normal then chroot to "chroot-eabi" directory.

Prerequisite

This guide assume basic knowledge of Kernel(uImage) and RootFS and
prior knowledge of C programming .

Introduction to Toolchain

Toolchain are Chain or set of programming tools for building an apps , it could include following :

Editor for writing program

Assembler

Compiler

Preprocessor

Linker loader

Debugger

Binutils etc.

Toolchain Type

a)Native toolchain

Native toolchains are tools which makes binaries for the environment where the toolchain itself is being run (i.e. Host and target are same platform.
This type of Compilation process is called Native compilation .Meaning that the program is compiled on same platform where it has to be run. Most common example of Native compilation is compilation for normal PC based program ,they are compiled and run on same machine.

Earlier embedded devices had very less memory and space and also limited Input-output peripherals, hence Native compilation was not possible or very difficult.
But with the advent of powerful embedded ARM processor its now possible to make application on the platform itself. Same can be done in Hawkboard too but Compilation will be slower as compare to that in x86 machine.

b)Cross Toolchain

Toolchain which are used to compile the application that will run of different machine(architecture) .This is usually used for embedded apps (e.g ARM programming)
You program/compile in x86 environment and run in ARM Board. This type of compiling is called cross compiling.

Since native compilation is either not possible or very slow ,Cross compilation present a better alternative for faster development .Only drawback is to properly set build environment and Makefiles. Cross Compilation is most common way of Development in Embedded System.

c)Hybrid Toolchain

It similar to native toolchain,but infact toolchain run in virtualised environment
on Host.Simple example is QEMU -ARM Running on X86 Linux & you are developing application
inside this Virtual environment.

This has advantage of both Native and Cross compilation.Speed of cross compilation & Ease
of Native development.

Various solution exists, One is scratchbox ,another is ChrootEABI feature in Ubuntu.

d)Canadian Toolchain
The Canadian Cross is a technique for building cross compilers for other machines. Given three machines A, B,
and C, one uses machine A to build a cross compiler that runs on machine B to create executables for machine C.
Not practiced normally .

Native Toolchain & Compilation

There are various ways to compile the application natively on hawkboard.

1. Using Ubuntu Rootfs

If you are using Ubuntu as Development Host,Ubuntu provides a Script Rootstock that provides a easy way of making Root Filesystem.Give gcc,vi,g++ as seed parameter to rootstock script and you will have a GNU Toolchain inside the rootfs.

Then write/compile/run as you do for x86 program.

This needs rootstock to installed on Ubuntu (9.10)

apt-get install rootstock

Once rootstock is installed run following line on host pc to make Ubuntu Rootfs

Source the Path of cross-compiler-armv5l\bin and compile the C program using

3.Cross Toolchain by Fedora Arm Project

If you are using a Fedora as host environment than easiest way is to use Fedora ARM Toolchain.
Fedora provides arm toolchain packages for i386 and x86_64 that are built from the same sources as the Fedora native toolchain packages (binutils, gcc, gdb, glibc.)
To install this toolchain on your Fedora machine, do:

Buildroot is a set of Makefiles and patches that makes it easy to generate a cross-compilation toolchain and root filesystem for your target Linux system using the uClibc C library. Buildroot is useful mainly for people working with small or embedded system.

Scratchbox is a cross-compilation toolkit designed to make embedded Linux application development easier. It also provides a full set of tools to integrate and cross-compile an entire Linux distribution.

Now you can build/test packages etc, the chroot works like any other x86 chroot on your system as long as you have the qemu-arm-static package installed with the advantage that you can make use of all resources your host system provides (CPU speed, RAM, diskspeed etc)
To copy files or Native toolchain to Chroot environment you must exit out of chroot and copy as normal then chroot to "chroot-eabi" directory.

Dynamic Linking
Dynamic linking involves loading the subroutines of a library into an application program at load time or runtime, rather than linking them in at compile time; the subroutines remain as separate files on disk.Libraries can be called by multiple programs.
This saves lots of space ,only drawback being porting of application you need to have depended libraries copied to another system
when you are porting your apps.

Normally a program when compiled is dynamically linked ,this can be check using ldd & File commmand