ARM Technical Support Knowledge Articles

How do I rebuild the Linux kernel for my ARM development board?

Applies to: Development Boards


Note: the examples below are using an Emulation Baseboard (EB) with a CT11MPCore. For other systems, the file names and paths will be slightly different but the procedures will be the same.

It should be pointed out that ARM does not support Linux. These instructions are provided in order to assist customers who are using our development boards and for some reason need to rebuild one of the kernel images posted on

This FAQ assumes that you are building the kernel on an x86 Linux host. The file and path names here refer to the versions available at the time of writing. These will change in future releases - modify the command lines accordingly.


1. Downloading the required files

Ensure that there is at least 250Mb of storage space available on the computer where you intend to build the kernel - this will be required for building.

Download the following files from the ARM Linux Download page to a work directory on your build computer:

  • The latest patch (at the moment of writing, this is patch-2.6.17-arm1.gz)
  • The corresponding standard Linux kernel source from one of the mirrors listed on (in this case linux-2.6.17.tar.bz2)
  • The codesourcery toolchain from the ARM Linux Download page (currently sourceryg -4.1-6-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.gz)
  • The pre-built U-Boot package (U-Boot-RealView-EB.tar.gz)
  • The pre-built Linux kernel image for your board (Image-RealView-EB-2.6.17-arm1.tar.gz)


2. Extracting the downloaded components

Extract the toolchain into the work directory and set up the CROSS_COMPILE environment variable:

$ mkdir codesourcery
$ tar -C codesourcery
-xzf sourceryg -4.1-6-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.gz
$ export CROSS_COMPILE="$PWD/codesourcery/bin/arm-none-linux-gnueabi-"
Extract the pre-built U-Boot package and add the current directory (where the mkimage utility was extracted) to the PATH:
$ tar xzf U-Boot-RealView-EB.tar.gz
$ export PATH="$PATH:$PWD"
Extract and patch the kernel source and set up the ARCH environment variable:
$ tar xjf linux-2.6.17.tar.bz2
$ cd linux-2.6.17
$ gzip -cd ../patch-2.6.17-arm1.gz | patch -p1
$ cd ..
$ export ARCH=arm
Extract the pre-built Linux kernel image:
$ tar xzf Image-RealView-EB-2.6.17-arm1.tar.gz

3. Configuring and building the Linux kernel

It is highly recommended you start with an existing configuration file from one of the prebuilt kernel packages. Copy this into your Linux source tree, renaming it .config:
$ cp kernel/src/2.6.17/configs/config-2.6.17-arm1-realview-eb-mpcore
Import the configuration settings from the new .config:
$ cd linux-2.6.17
$ make oldconfig
Modify the configuration to suit your purposes using
  • For graphical configuration utility
    $ make xconfig
  • For text mode configuration utility
    $ make menuconfig
Remember to save your configuration before exiting.

Now build your kernel:
$ make uImage
After the build has completed, the resulting uImage will be located in the arch/arm/boot directory.
For information  about how to run the kernel on your development board, see "How do I install the pre-built Linux images on my ARM development board?".

Article last edited on: 2012-01-27 14:21:19

Rate this article

Disagree? Move your mouse over the bar and click

Did you find this article helpful? Yes No

How can we improve this article?

Link to this article
Copyright © 2011 ARM Limited. All rights reserved. External (Open), Non-Confidential