world leader in high performance signal processing
Trace: » targets

Blackfin Toolchain Targets

The Blackfin toolchain supports a variety of binary executable formats and C libraries. Each format is used in different contexts, and usually has an associated toolchain target (or tuple). Here we'll cover the different options available to you.

These are the different Blackfin tuples that we actively support/ship.

Tuple OS C Library Format
bfin-elf None newlib ELF/LDR
bfin-uclinux Linux uClibc FLAT
bfin-linux-uclibc Linux uClibc FDPIC ELF


The bfin-elf toolchain is meant for people who wish to do standalone application development. Other common terms that mean the same thing are “bare metal”, or “standalone ELFs”, or “no operating system”. The C library called newlib provides as much of the C API as is possible. For lower layer details (such as writing to files), there are simple stub functions available, but you will need to create your own set of functions in the end.

The bare metal ELFs can be trivially transformed into an LDR which the Blackfin on-chip Boot ROM can directly execute using the ldr-utils package. Otherwise, the ELFs may be fed to a boot loader which understands the ELF format and can do the required processing, or it is converted to a simple binary blob and directly executed.

Since most people will be working with Linux, there is no need for them to even install the bfin-elf toolchain.


The bfin-uclinux toolchain is the default one used in the uClinux distribution. It produces minimalistic FLAT binaries which run under Linux. It is also often used for building up boot loaders (like U-Boot) and kernels (like the Linux kernel). In this regard, the bfin-elf toolchain could also be used, but since we only use the compiler and do not need the bundled C library (each code base includes its own minimal functions), it does not really matter.

In order to get a FLAT binary, you need to use the -elf2flt flag with the compiler. This will give you two files. The first is the FLAT binary which can be executed under Linux. The other is named the same but with a .gdb suffix. This is used only on your host system when debugging the FLAT binary running on the board. Without the -elf2flt flag, you will get an ELF which cannot be executed under Linux.

When you specify the -elf2flt flag, the linker will produce the .gdb ELF before invoking the bfin-uclinux-elf2flt utility. This strips down and converts the .gdb ELF into the final FLAT executable.


The bfin-linux-uclibc toolchain is commonly used when shared libraries are needed under Linux. It produces FDPIC ELF binaries which run under Linux. It is designed to cut down on memory resources at run time as well as enable many ELF features that are not available when using FLAT. Unfortunately, there is a minor speed penalty for using this format over FLAT.