Create a Mini PC or Server with Olimex's Olinuxino A13/A13Micro
Olimex is a Bulgarian company known for its innovative hobbyist products. It has a wide array of microcontroller-based products, ranging from the small Arduino clones to the very able system that has the Allwinner A13 microcontroller as its brain. In this article, I describe how you can create a working Linux system for the Olinuxino A13 and Olinuxino A13Micro from scratch.
Let's begin by obtaining and compiling the kernel, creating the U-Boot system, preparing the root filesystem and getting the necessary packages to create a comfortable minimal computing environment. At the end of this article, I also explain how to install a compact desktop environment.
I am using Ubuntu 12.04 (Precise Pangolin) for my build system. Any Debian-based system users should be able to follow the instructions in this article with relative ease. Before you begin, you should create a directory under your home directory to contain all your work. I am going to call mine "A13System".
What Are Arm and eabihf?
As you progress further into the article, you will encounter the terms Arm and eabihf more than once. Let me clarify those terms in order to avoid confusion with other terms that you might encounter if you decide to go further into the world of cross-compilation.
Arm is a general name for a family of microcontroller architectures designed by ARM Holdings, a British company. You can find Arm microcontrollers inside most portable modern gadgets, ranging from mobile phones, Nintendo DS portable game consoles to Apple iPhone and Apple TV. ARM Holdings does not manufacture these microcontrollers; rather, it licenses the designs to other companies. These companies then add their own "secret recipes" into the designs and then manufacture and sell the finished microcontrollers. This is why there are so many variants of Arm architecture and so many companies that produce Arm microcontrollers.
EABI stands for Embedded Application Binary Interface. It specifies the low-level conventions for embedded software application. When it comes to Arm microcontrollers, they come in many sizes, ranging from very small to large. The smaller variants don't have the necessary memory or power to process floating-point computation on the hardware itself, thus making it necessary to do it by software. These variants are called Arm soft float. There are other variants that can process the floating-point calculation by hardware, like vector floating point (vfp). These two EABIs (soft float and vfp) are what is usually known as armel. A newer EABI that targets the higher end of Arm microcontrollers with more efficient floating-point instructions than vfp is called hard float, thus armhf.
Olimex's A13WiFI, A13 and A13Micro boards are powered by the Allwinner A13 Arm microcontroller, which are based on ARMv7 design. ARMv7, as with the newer ARMv8, fully supports armhf.
You can find all the necessary URLs for file downloads and other information in the Resources section of this article. You need to install the following programs before you can commence the build process:
gcc-4.6-arm-linux-gnueabihf (the version might vary from one distro to another; the latest I came across at the time of this writing is version 4.7).
debian-archive-keyring (if you decide later that you want to use Debian rootfs).
Once you finish installing the prerequisites, you then
need to create several softlinks in the same directory where
gcc-4.6-arm-linux-gnueabihf is installed (in my case, it is located in
/usr/bin). Use the
which command to find the installation directory:
$ which arm-linux-gnueabi-gcc-4.6
Next, create softlinks for arm-linux-gnueabihf-gcc-4.6, arm-linux-gnueabihf-gcov-4.6 and arm-linux-gnueabihf-cpp-4.6:
$ sudo ln -s /usr/bin/arm-linux-gnueabihf-gcc-4.6 \ /usr/bin/arm-linux-gnueabihf-gcc $ sudo ln -s \ /usr/bin/arm-linux-gnueabihf-gcov-4.6 \ /usr/bin/arm-linux-gnueabihf-gcov $ sudo ln -s /usr/bin/arm-linux-gnueabihf-cpp-4.6 \ /usr/bin/arm-linux-gnueabihf-cpp
Ronald Kurniawan is a software developer living in Brisbane, Australia. Ronald is interested in embedded systems, Linux, Java development and trying to come up with interesting and wacky ways to combine them.