Linux Kernel


Linux Kernel Archives is the primary site for the Linux kernel source. All Linux kernel versions, including latest snapshot or "release candidate" (-rc) can be easily found here.

The ARM Linux Project lead by Russell King. Russell is in charge to ensure the ARM core support in the Kernel mainline.

The ARM-SOC git tree lead by Arnd Bergmann, Olof Johansson and Kevin Hilman. It is the initiative that managed to unify the work being done on ARM-based System on Chip (SoC) by different vendors. This git tree is the natural way to send AT91-related material upstream.

The Linux-arm-kernel Mailing lists is where the work is actually being done. Discussions, bug reports and patches must be posted there.

Changes introduced by Device Tree support

The Device Tree is a binary file containing the description of your SoC and your board. Before this move to Device Tree, the information was stored in several C files directly in the Linux kernel code. The number of ARM-based SoC growing rapidly it has become clear that the amount of C code could not follow this pace. In addition to consolidating the ARM related kernel code, allowing the common code to be centralized and better maintained, the Device Tree also bring the possibility to run the same kernel binary on several platforms sharing the same ARM instruction set. This single zImage initiative allow the use of the same Linux kernel binary, without having the need for recompiling it, on another SoC, by just providing the proper Device Tree Binary file (.dtb).

Now the boot process has to deal with two Linux files instead of one: the Device Tree Binary file and the kernel image itself. It mainly involves changes for the U-Boot / barebox booting command. If you don't want to care about this new file, there is an Linux kernel option to append the Device Tree Binary at the end of the kernel image.

Useful documentation:

Linux for AT91 source code

The Linux kernel for Atmel ARM-based SoC (aka AT91) is distributed as a GIT tree hosted on GitHub as a fork of the official Linus Torvalds' git tree. The objective of the Atmel Linux team is to integrate all the AT91-related material in the official Linux Kernel.
Before completing this inclusion process, which can take time, this website provides the Linux4SAM Linux Kernel git tree for AT91 devices at:


Name Board Supported Comment Related Tags
github sources: linux-4.1-at91
wiki page: LinuxKernel_4_1
All Atmel boards supported
All boards using Device Tree
Boards with demo available: SAMA5D2 Xplained
Maintained, stable linux4sam_5.0-beta1
github sources: linux-3.18-at91
wiki page: LinuxKernel_3_18
All Atmel boards supported
All boards using Device Tree
Boards with demo available: SAMA5D4 Xplained, SAMA5D4-EK, SAMA5D3 Xplained, SAMA5D3-EK, SAMA5D2 Xplained,
Maintained, stable linux4sam_5.0-alpha7, linux4sam_4.7
github sources: linux-3.10-at91
wiki page: LinuxKernel_3_10
All Atmel boards supported
Some boards using Device Tree
Boards with demo available: SAMA5D4 Xplained, SAMA5D4-EK, SAMA5D3 Xplained, SAMA5D3-EK, AT91SAM9X5-EK, AT91SAM9N12, Legacy
Maintained but not recommended for new developments linux4sam_4.6, linux4sam_4.5
github sources: linux-3.6.9-at91
wiki page: LinuxKernel_legacy
  Old branch
don't use for new developments
github sources: linux-2.6.39-at91
wiki page: LinuxKernel_legacy
  Legacy branch
don't use for new developments

Changes in linux-4.1-at91

  • TODO changes

Changes in linux-3.18-at91

  • Update atmel hlcdc driver to DRM driver.
  • Totally support devicetree. Remove the temperory code which not support devicetree.


  • pioD is enabled in SAMA5D4, also add usart1, usart2 for SAMA5D4.
  • DRM driver fixes.

Changes in linux-3.10-at91

  • Add devicetree support
  • HDMI driver for SiI902x component on SAMA5D4-EK and SAMA5D4 Xplained boards
  • VDEC is supported on SAMA5D4-EK board
  • For drivers which not fully support devicetree, atmel ISI, hlcdc and etc, using arch/arm/mach-at91/board-dt-[sama5.c,sam9.c] add the devices
  • Serial RX & TX DMA support
  • Serial fixes and enhancements


linux4sam_5.0 tag

  • TODO tags

linux4sam_5.0-beta1 tag

  • TODO tags

linux4sam_5.0-alpha7 tag

  • support for new SAMA5D2 SoC and the associated sama5d2 Xplained board
    • QSPI with DMA (disabled in Device Tree by default)
    • Flexcom with FIFO & DMA
      • USART interface
      • I2C interface
      • SPI interface
    • SD/MMC interface (SDHCI) + on-board eMMC
    • Audio using Class D amplifier
    • ISC
      • support YUV sensor output
      • support RGB output format
    • Crypto engines
      • AEAD support for IPSec
  • fix residue computation for HDMA
  • ISI: add RGB565, GREY, SGRBG, SBGGR (Bayer) support
  • runtime PM: added the ISI driver, modifications to the HLCD DRM driver

And the enhancements from linux4sam_4.7 tag below

linux4sam_4.7 tag

  • Based on 3.18 linux kernel
  • Update atmel hlcdc driver to DRM driver.
  • Totally support devicetree. Remove the temperory code which not support devicetree.
  • SAMA5 series boards support
  • HDMI driver for SiI902x component on SAMA5D4-EK and SAMA5D4 Xplained boards
  • add LCD driver entries in at91sam9x5 and at91sam9n12 DT (HLCD DRM driver)
  • Power management enhancements
  • Power management states on pin configuration (pinctrl OUTPUT configuration)
  • Power management pin states for: SPI, i2c, MMC, serial, LCD, SSC, IIO (ADC), ETH, NAND, CAN
  • Serial RX & TX DMA support
  • Serial fixes and enhancements
  • updated clock management for USB (OHCI and EHCI)

linux4sam_4.6 tag

  • SAMA5D4 Xplained board support
  • HDMI driver for SiI902x component on SAMA5D4-EK and SAMA5D4 Xplained boards
  • Power management enhancements
  • Power management states on pin configuration (pinctrl OUTPUT configuration)
  • Power management pin states for: SPI, i2c, MMC, serial, LCD, SSC, IIO (ADC), ETH, NAND, CAN
  • Serial RX & TX DMA support
  • Serial fixes and enhancements
  • And of course everything listed below

linux4sam_4.5 tag

  • ARM Cortex-A5 support (include SAMA5D4 chip family support)
  • VFP + NEON support
  • L2 Cache for SAMA5D4 family
  • Linux drivers for Hardware Video Decoder
  • Ethernet driver enhancements for both 10/100 and Gigabit Ethernet
  • Power management enhancement
  • PWM interface

linux4sam_4.2 tag

  • ARM Cortex-A5 support (include SAMA5D36 chip support)
  • VFP support
  • Timer Counter
  • Watchdog (beware, can be deactivated by AT91Bootstrap)
  • RTC
  • Serial driver with DMA support
  • I2C interface with DMA support
  • SPI interface with DMA support
  • CAN
  • ADC (with 12 bits support)
  • ISI interface (support OV2640, OV2643 and OV5640)
  • MCI interface with DMA support
  • NAND flash with hadware ECC and DMA support
  • serial flash (SPI - at25)
  • Enhanced Ethernet drivers & Enhanced Gigabit Ethernet drivers
  • USB: host (OHCI & EHCI)
  • USB: device/gadget high speed
  • LCD base layer / LCD overlay 1, 2 / LCD High End Overlay
  • Crypto engines (AES, DES/TDES, SHA) with DMA support
  • Pinctrl (PIO muxing, PIO control and configuration)
  • Resistive touchscreen
  • Capacitive touchscreen maXTouch - PDA module
  • Touch button QT1070
  • LEDs
  • Audio using SSC/I2S - wm8904 codec
  • Power management

Build Linux for AT91

Following sections will show you how to build Linux Kernel for AT91.

Getting Kernel sources

To get the source code, you have to clone the repository:

$ git clone git://
Cloning into 'linux-at91'...
remote: Counting objects: 5239592, done.
remote: Compressing objects: 100% (764014/764014), done.
Receiving objects: 100% (5239592/5239592), 1018.56 MiB | 11.18 MiB/s, done.
remote: Total 5239592 (delta 4448248), reused 5218219 (delta 4427054)
Resolving deltas: 100% (4448248/4448248), done.
Checking out files: 100% (38567/38567), done.

The source code has been taken from the master branch which is pointing on the latest branch we use.

Pointing hand Note that you can also add this Linux4SAM repository as a remote GIT repository to your usual Linux git tree. It will save you a lot of bandwidth and download time:

$ git remote add linux4sam git://
$ git remote update linux4sam
Fetching linux4sam
From git://
 * [new branch]                linux-2.6.39-at91 -> linux4sam/linux-2.6.39-at91
 * [new branch]                linux-3.10-at91 -> linux4sam/linux-3.10-at91
 * [new branch]                linux-3.15-at91 -> linux4sam/linux-3.15-at91
 * [new branch]                linux-3.18-at91 -> linux4sam/linux-3.18-at91
 * [new branch]                linux-3.4.9-at91 -> linux4sam/linux-3.4.9-at91
 * [new branch]                linux-3.6.9-at91 -> linux4sam/linux-3.6.9-at91
 * [new branch]                linux-4.1-at91 -> linux4sam/linux-4.1-at91
 * [new branch]                master     -> linux4sam/master

If you want to use an other branch, you can list them and use one of them by doing this:

$ git branch -r
  origin/HEAD -> origin/master
$ git checkout origin/linux-4.1-at91 -b linux-4.1-at91
Branch linux-4.1-at91 set up to track remote branch linux-4.1-at91 from origin.
Switched to a new branch 'linux-4.1-at91'

Setup ARM Cross Compiler

  • Ubuntu:
    In Ubuntu, you can install the ARM Cross Compiler by doing:
    sudo apt-get install gcc-arm-linux-gnueabi
    export CROSS_COMPILE=arm-linux-gnueabi-

  • Others:
    For others, you can download the Linaro cross compiler and setup the environment by doing:
    wget -c
    tar xf gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabi.tar.xz
    export CROSS_COMPILE=`pwd`/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-

Configure and Build the Linux kernel

Now you have to configure the Linux kernel according to your hardware. We have two default configuration at91 SoC in arch/arm/configs

  • at91_dt_defconfig: for at91sam ARM926 series chips
  • sama5_defconfig: for SAMA5 series chips

Now we Configure and Build kernel for board:

$ make ARCH=arm sama5_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/
  SHIPPED scripts/kconfig/zconf.lex.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/
  HOSTLD  scripts/kconfig/conf
# configuration written to .config

At this step, you can modify default configuration using the menuconfig

$ make ARCH=arm menuconfig

And build the Linux kernel image, before you build you need set up the cross compile toolchain, check this section.

$ make ARCH=arm


  Kernel: arch/arm/boot/Image is ready
  Kernel: arch/arm/boot/zImage is ready

Now you have an usable compressed kernel image zImage.

If you need an uImage you can run this additional step:

make ARCH=arm uImage


  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-4.1.0
Created:      Wed May  6 15:44:56 2015
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    3537576 Bytes = 3454.66 kB = 3.37 MB
Load Address: 20008000
Entry Point:  20008000
  Image arch/arm/boot/uImage is ready

make ARCH=arm dtbs


  DTC     arch/arm/boot/dts/at91-kizbox2.dtb
  DTC     arch/arm/boot/dts/at91-sama5d2_xplained.dtb
  DTC     arch/arm/boot/dts/at91-sama5d2_xplained_pda4.dtb
  DTC     arch/arm/boot/dts/at91-sama5d3_xplained.dtb
  DTC     arch/arm/boot/dts/at91-sama5d3_xplained_pda4.dtb
  DTC     arch/arm/boot/dts/at91-sama5d3_xplained_pda7.dtb
  DTC     arch/arm/boot/dts/sama5d31ek.dtb
  DTC     arch/arm/boot/dts/sama5d31ek_pda4.dtb
  DTC     arch/arm/boot/dts/sama5d31ek_pda7.dtb
  DTC     arch/arm/boot/dts/sama5d31ek_revc_pda4.dtb
  DTC     arch/arm/boot/dts/sama5d31ek_revc_pda7.dtb
  DTC     arch/arm/boot/dts/sama5d31ek_revc.dtb
  DTC     arch/arm/boot/dts/sama5d33ek.dtb
  DTC     arch/arm/boot/dts/sama5d33ek_pda7.dtb
  DTC     arch/arm/boot/dts/sama5d33ek_pda4.dtb
  DTC     arch/arm/boot/dts/sama5d33ek_revc.dtb
  DTC     arch/arm/boot/dts/sama5d33ek_revc_pda4.dtb
  DTC     arch/arm/boot/dts/sama5d33ek_revc_pda7.dtb
  DTC     arch/arm/boot/dts/sama5d34ek.dtb
  DTC     arch/arm/boot/dts/sama5d34ek_pda4.dtb
  DTC     arch/arm/boot/dts/sama5d34ek_pda7.dtb
  DTC     arch/arm/boot/dts/sama5d34ek_revc.dtb
  DTC     arch/arm/boot/dts/sama5d34ek_revc_pda4.dtb
  DTC     arch/arm/boot/dts/sama5d34ek_revc_pda7.dtb
  DTC     arch/arm/boot/dts/sama5d35ek.dtb
  DTC     arch/arm/boot/dts/sama5d35ek_revc.dtb
  DTC     arch/arm/boot/dts/sama5d36ek_pda4.dtb
  DTC     arch/arm/boot/dts/sama5d36ek.dtb
  DTC     arch/arm/boot/dts/sama5d36ek_pda7.dtb
  DTC     arch/arm/boot/dts/sama5d36ek_revc.dtb
  DTC     arch/arm/boot/dts/sama5d36ek_revc_pda4.dtb
  DTC     arch/arm/boot/dts/sama5d36ek_revc_pda7.dtb
  DTC     arch/arm/boot/dts/at91-sama5d4_xplained.dtb
  DTC     arch/arm/boot/dts/at91-sama5d4_xplained_pda4.dtb
  DTC     arch/arm/boot/dts/at91-sama5d4_xplained_hdmi.dtb
  DTC     arch/arm/boot/dts/at91-sama5d4_xplained_pda7.dtb
  DTC     arch/arm/boot/dts/at91-sama5d4ek.dtb

If the building process is successful, the final images can be found under arch/arm/boot/ directory.

Recent FAQ


Using Atmel DRMDriver: Using Atmel KMS/DRM LCD driver. (Sama5d2Xplained, Sama5d4Xplained, Sama5d4ek, Sama5d3Xplained, Sama5d3xek)
Using Isi: How to use the Image Sensor Interface. (Sama5d4ek, Sama5d3xek)
Using Max Touch: Introduction for how to use MaxTouch. (Sama5d2Xplained, Sama5d4Xplained, Sama5d4ek, Sama5d3Xplained, Sama5d3xek)
Crypto Config: How to configure Crypto driver. (Sama5d2Xplained, Sama5d4Xplained, Sama5d4ek, Sama5d3Xplained, Sama5d3xek)
Iio Adc Driver: Adc IIO driver introduction. (Sama5d2Xplained, Sama5d4Xplained, Sama5d4ek, Sama5d3Xplained, Sama5d3xek)
r74 - 26 Nov 2015 - 10:39:43 - NicolasFerre
Linux & Open Source related information for AT91 Smart ARM Microcontrollers

Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.

Linux® is the registered trademark of Linus Torvalds in the U.S. and other countries.

Atmel® and others, are registered trademarks or trademarks of Atmel Corporation or its subsidiaries. This site is powered by the TWiki collaboration platform

ARM® and others are registered trademarks or trademarks of ARM Ltd. Other terms and product names may be trademarks of others.

Ideas, requests, contributions ? Connect to LinksToCommunities page.

Syndicate this siteRSS ATOM