This tutorial is an updated version of this old post, with newer software and less obsolete emulated hardware. - Every year the market produces tons of new products that run on ARM cores, and are able to run operating systems such as Linux. While most of these products are quite expensive (think about smartphones, development kits or evaluation boards) it’s possible to explore the world of Linux on ARM freely, thanks to software emulators like QEMU.
I am going to show how to compile the kernel and emulate the boot. To simplify things, the boot will not include a complete filesystem but uses a minimal ramdisk to show the kernel executing just one program.
I chose to emulate the Versatile Express product because it’s well supported both by the mainline Linux kernel and by mainline QEMU. Moreover, this hardware platform runs on the Cortex-A9 core, which is an ARM CPU that is included in many smartphones today.
In order to follow the same steps that I did, you need some tools.
First of all, anything I do is performed on a Linux machine, specifically a Debian testing distribution, in a bash shell.
To manage the kernel compilation, GNU make should be installed (it is usually in build-essential package)
To compile the kernel for ARM architecture, a cross-compiler must be installed. The difference between a traditional compiler and a cross-compiler is that the traditional compiler runs on an architecture (for example x86_64) and produces binaries for the same architecture. A cross-compiler produces binaries for a different architecture (in our case ARMv7). Depending on your distribution and what works for your setup, you can choose from different toolchains:
- Azul Systems’ Zulu Embedded is a Build of OpenJDK for ARM, MIPS, PowerPC, and x86 Compliant with Java SE standard
- Open Source ARM Compute Library Released with NEON and OpenCL Accelerated Functions for Computer Vision, Machine Learning
- Orange Pi 2G-IoT ARM Linux Development Board with 2G/GSM Support is Up for Sale for $9.90
- And here it comes the new Embedded Linux Education Kit, based on UDOO Neo
- Shenzhen Xunlong Software & Canonical Launch Orange Pi App Store for Ubuntu Snaps
- Microsoft's .NET Core slowly marches onto Raspberry Pi 3