Jump to content

Hempl/Compiling Hempl

From Wikibooks, open books for an open world

Use the Web Builder

[edit | edit source]

The Mizar32 Web Builder at http://builder.simplemachines.it lets you customise the firmware in several ways and will build you a new firmware image without you having to do any of this horrible stuff. But unfortunately at the moment, we don't have this feature yet for Hempl. See issue #4.


If that doesn't do enough for you, or if you just enjoy this kind of thing, then take a deep breath and...

Install an AVR32 cross-compiler

[edit | edit source]

On GNU/Linux

[edit | edit source]

Atmel AVR 32-bit Toolchain 3.4.2

[edit | edit source]

The cross-compiler for GNU/Linux is the Atmel AVR Toolchain for Linux.

At the time of writing, July 2015, the latest version is Atmel AVR Toolchain 3.4.2, based on the GNU C Compiler version 4.4.7.

To skip the Atmel registration form, you can use these quick download links:

You will also need

and, if you are interested in building the toolchain yourself, the source code is here:

Fetching and unpacking the toolchain

[edit | edit source]

Here we show the steps to install the 32-bit version:

cd
wget http://www.atmel.com/Images/avr32-gnu-toolchain-3.4.2.435-linux.any.x86.tar.gz
tar xfz avr32-gnu-toolchain-3.4.2.435-linux.any.x86.tar.gz
# Fetch, unpack and install the header files
wget http://www.atmel.com/Images/atmel-headers-6.1.3.1475.zip
unzip atmel-headers-6.1.3.1475.zip
mv atmel-headers-6.1.3.1475/avr32 avr32-gnu-toolchain-linux_x86/avr32/include/
# Clean up
rm -r atmel-headers*
rm avr32-gnu-toolchain-*.gz

then, to use it, once per session:

PATH=$HOME/avr32-gnu-toolchain-linux_x86/bin:$PATH
export PATH

you can, set the include path (C_INCLUDE_PATH), to use atmel-headers-6.1.3.1475 with avr32.

For the 64-bit version, replace every "x86" in the above with "x86_64"

Installing it as a Debian/Ubuntu package

[edit | edit source]

To make a Debian/Ubuntu package out of this, do the above, then go:

sudo apt-get install alien fakeroot
cd avr32-gnu-toolchain-linux_x86
mkdir usr
mv [a-s]* usr/
# It includes a lot of files that it shouldn't, so select the toolchain ones.
tar cfz avr32-gnu-toolchain-3.4.2.tgz usr/avr32 usr/bin/avr32-* \
    usr/lib/gcc/avr32 usr/libexec usr/share/man/man1 
fakeroot alien --keep-version avr32-gnu-toolchain-3.4.2.tgz
mv avr32-gnu-toolchain_3.4.2-1_all.deb avr32-gnu-toolchain_3.4.2-1_i386.deb
rm avr32-gnu-toolchain-3.4.2.tgz
rm -r usr

or, for the 64-bit version, do the same thing in avr32-gnu-toolchain-linux_x86_64 and rename the .deb file to ..._amd64.deb

If you had installed their old 2.4.2 Ubuntu packages, you will need to remove those first:

sudo apt-get purge avr32-binutils avr32-buildroot-essentials avr32-gcc-newlib \
 avr32-gdb avr32gdbproxy avr32headers avr32parts avr32program avr32trace \
 avrfwupgrade libavr32ocd libavr32sim libavrtools libelfdwarfparser

then you can install the new toolchain with

sudo dpkg -i avr32-gnu-toolchain_3.4.2-1_*.deb

(to remove it again, sudo apt-get purge avr32-gnu-toolchain)

Build a toolchain from source code

[edit | edit source]

ct-ng, a fork of crosstool-ng, builds better AVR32 cross compilers for you:

sudo apt-get install git autoconf bash gawk g++ libncurses-dev
git clone http://anonymous@spaces.atmel.com/git/ct-ng 
cd ct-ng
./bootstrap
./configure --enable-local
make
./ct-ng build

By default, it installs the cross-toolchain under your home directory, so before building eLua you need to say:

PATH=$HOME/x-tools/avr32-unknown-none/bin:$PATH
export PATH

On Windows

[edit | edit source]

Atmel also provide the Atmel AVR Toolchain for Windows as a setup.exe, for which the quick download link is:

Install the build system

[edit | edit source]

The Hempl build system (same as the official elua0.9) uses "scons" and "gcc". The Hempl sources are under git, so install those.

On Debian or Ubuntu:

sudo apt-get install scons gcc git

Download the sources

[edit | edit source]

Stable release

[edit | edit source]

The latest stable source release is hempl-1.0, which fully supports the Mizar32 boards.

wget https://github.com/simplemachines-italy/hempl/archive/v1.0.tar.gz
tar xfz v1.0.tar.gz
cd v1.0

An alternative is:

The current development version

[edit | edit source]

The Hempl project

[edit | edit source]
git clone https://github.com/simplemachines-italy/hempl.git
cd hempl

Compile Hempl

[edit | edit source]

For Mizar32 A and B

[edit | edit source]

The 256KB and 512KB flash/64MB internal RAM versions of Mizar32 use the same Hempl firmware. Use this command:

scons board=mizar32 cpu=AT32UC3A0256

If you're compiling the Hempl sources, the build will create a file hempl_at32uc3a0256.elf.

For Mizar32 C

[edit | edit source]

We can't directly compile Hempl for Mizar32-C. It only has 128K of flash! There's another way. We use emBLOD for that. To understand how that works, see the chapter The emBLOD second-stage boot loader.

Program the firmware to the board

[edit | edit source]

When the compilation is finished, it should have created a file called something like hempl_at32uc3a0256.elf which can be programmed into the Mizar32 board in various ways: see the chapter on Flashing firmware.

If you will be using dfu-programmer to do this, you will first need to convert your .elf file to a .hex file. For example:

hempl=hempl_at32uc3a0256
avr32-objcopy -O ihex $hempl.elf $hempl.hex