NameLast modifiedSizeLicense

Parent Directory Parent Directory
text hwpack_linaro-lsk-vexpress_20150522-720_armhf_supported.manifest.txt 13-Jan-2018 03:25 621 open
application/x-tar hwpack_linaro-lsk-vexpress_20150522-720_armhf_supported.tar.gz 26-Feb-2018 23:14 42.8M open
other linaro-image-alip-genericarmv7a-20150522-332.manifest 13-Jan-2018 03:25 51.9K open
other linaro-image-alip-genericarmv7a-20150522-332.rootfs.manifest 13-Jan-2018 03:25 20.2K open
application/x-tar linaro-image-alip-genericarmv7a-20150522-332.rootfs.tar.gz 26-Feb-2018 23:14 46.3M open
other linaro-image-minimal-initramfs-genericarmv7a-20150522-332.manifest 13-Jan-2018 03:25 3.8K open
application/x-cpio linaro-image-minimal-initramfs-genericarmv7a-20150522-332.rootfs.cpio.gz 13-Jan-2018 03:25 6.6M open
other linaro-image-minimal-initramfs-genericarmv7a-20150522-332.rootfs.cpio.gz.u-boot 13-Jan-2018 03:25 6.6M open
other linaro-image-minimal-initramfs-genericarmv7a-20150522-332.rootfs.manifest 13-Jan-2018 03:25 1.3K open
other linaro-sysroot-alip-genericarmv7a-20150522-332.manifest 13-Jan-2018 03:26 113.1K open
other linaro-sysroot-alip-genericarmv7a-20150522-332.rootfs.manifest 13-Jan-2018 03:26 44.6K open
application/x-tar linaro-sysroot-alip-genericarmv7a-20150522-332.rootfs.tar.gz 26-Feb-2018 23:14 66.0M open
text lsk-vexpress-openembedded_alip-armv7a-gcc-4.9_20150522-720.html 13-Jan-2018 03:26 3.5K open
other lsk-vexpress-openembedded_alip-armv7a-gcc-4.9_20150522-720.img.gz 26-Feb-2018 23:14 128.4M open
other lsk-vexpress-openembedded_alip-armv7a-gcc-4.9_20150522-720.img.gz.zsync 26-Feb-2018 23:14 19.5M open

Linaro Stable Kernel (LSK) Engineering Build for Versatile Express (OpenEmbedded)

ARM’s customers should use the latest ARM Member Build here:

ARM Member Builds capture the latest content and information at that ARM wishes to present to it’s partners and users. The Member Build contains a more complete set of release notes, installation and build instructions.

The Linaro Stable Kernel (LSK) is produced, validated and released by Linaro and is based on the linux stable kernel tree.

Linaro releases monthly binary images for the ARM Versatile Express including support for Cortex-A9, Cortex-A5, TC2 (big.LITTLE) CoreTiles and Fast Models.

For support matters related to ARM hardware or firmware images downloaded from ARM sites, please contact ARM support

This build includes is targeted at both Versatile Express and Fast Models. The images are able to boot A5, A9 and TC2 using UEFI. Sources are also made available so you can build your own images (see the ‘Building from Source’ tab).

Where To Find More Information

More information on Linaro can be found on our website.

Feedback and Support

Subscribe to the important Linaro mailing lists and join our IRC channels to stay on top of Linaro development.

  • Linaro Development mailing list
  • Linaro IRC channel on at #linaro

  • Landing Team bug reports should be filed in Bugzilla
    • You will need to login to your Linaro account. If you do not have an account or are having problems, email for help.
  • More general bug reports should be filed in Bugzilla against the individual packages that are affected.
  • Questions? ask Linaro.
  • Interested in commercial support? inquire at Linaro support


Before any installation begins, it is important that you ensure your board has the latest firmware installed. See the “Firmware tab” for more details

Pre-installation steps

  • Ubuntu 12.04 64 bit or newer on your desktop PC (
  • 4GB SD card or larger
  • Download the artifacts from the above list

Using pre-built image

  • Unzip the downloaded pre-built image and write it to an SD card
  • Safely remove the SD card and insert it into the board

Building a custom image using pre-built components

sudo linaro-media-create --mmc /dev/sdX --dev vexpress --hwpack <hwpack filename> --binary <rootfs filename>

Post-installation steps

  • Safely remove the USB drive and insert it into the board
  • Configure UEFI

OpenEmbedded images are comprised of a Hardware Pack (HWPack) and a root file system. The hardware pack contains the kernel, boot loader and Device Tree blobs (if applicable). There is no need to rebuild the RootFS since it is comprised of a large number of debian packages. Instead, the best approach is to use an image, which you can create as outlined in the “Binary Image Installation” tab then replace the kernel with your compiled one. This is common practice that many engineers deploy when wanting a standard Linux image to use for testing and development purposes.

The following instructions will walk you through how to obtain the kernel source, build it, and add it to a pre-existing image.


  • Ubuntu 12.04 64 bit system. You can download Ubuntu from
  • git and toolchain. You can get those by typing the following command in your terminal
sudo apt-get install build-essential git gcc-arm-linux-gnueabi

Get the source

You can use GIT to obtain the kernel source code for this build:

git clone git://
cd linux-linaro-stable
YY=<current year, eg, 14>
MM=<current month, eg. 07>
git checkout lsk-${YY}.${MM}

Create a kernel config

Do not use the defconfig for Versatile Express, instead, build a config from the config fragments that Linaro provides:

ARCH=arm scripts/kconfig/ \
linaro/configs/linaro-base.conf \
linaro/configs/distribution.conf \

Note: the config fragments are part of the git repository and the source tarball.

Build the kernel

To build the kernel uImage, use the following command:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- LOADADDR=0x60008000 uImage

Install your kernel

This section is common for both Android and OpenEmbedded.

  • Create the Device Tree blob if you don’t have one in your Linaro image (note, the A9 Core Tile boots using an ATAGS kernel so there is no need for a device tree blob):
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs
  • Insert the SD card containing the Linaro disk image into your PC SD card reader
  • Copy the kernel onto the memory card using
cp arch/arm/boot/uImage /media/boot/
  • Copy the device tree blob
    • For A9 CoreTile: no device tree blob is needed
    • For A5 CoreTile: cp arch/arm/boot/dts/vexpress-v2p-ca5s.dtb /media/boot/v2p-ca5s.dtb
    • For A15 CoreTile (TC1): cp arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dtb /media/boot/v2p-ca15-tc1.dtb
    • For A15_A7 CoreTile (TC2): cp arch/arm/boot/dts/vexpress-v2p-ca15_a7.dtb /media/boot/v2p-ca15-tc2.dtb
  • Eject the memory card from your PC by using the following command
eject /media/boot
  • Insert the memory card into the Versatile Express board and power it on
  • You should boot your image using your own compiled kernel

Ensure that you update your Versatile Express board firmware to the latest version. To update your VE board firmware, please follow the instructions below:

  • Clone the Linaro Versatile Express Firmware repository
  • Connect and mount your Versatile Express motherboard USB mass storage device to your PC
  • Remove all of the existing files from the USB mass storage device
  • Copy the Linaro Firmware to the board

For example:

git clone git://
rm -rf /media/VEMSD/*
cp -R vexpress-firmware/* /media/VEMSD

Once you have finished copying the firmware over:

  • Safely unmount the Versatile Express motherboard
  • Reboot the Versatile Express board
  • At the ARM Boot Loader “Cmd> “ prompt, type the following commands:
Cmd> flash
Cmd> eraseall
Cmd> exit
Cmd> reboot
  • You may need to configure UEFI to boot from the image that you’ve created. See the UEFI page on the Linaro Wiki for more details on configuring UEFI.
  • You may want to set /media/VEMSD/config.txt AUTORUN to TRUE to be make the CoreTile boot from power on.
  • For TC2, you should set the DIP swich closest to the black reset button down so that the Boot Monitor runs the boot script on power on.
  • Versatile Express version 5.2 contains the original firmware and documentation for the Versatile Express platform
  • Please contact for any issues related their firmware
  • Please contact Linaro for any issues related to booting this release on the Versatile Express platform.

Using TC2 as an A7-only or A15-only board

Configure the Firmware

It is possible to configure a TC2 development board as an A7 or A15 only board. To do this, the developer should modify the /SITE1/HBI0249A/board.txt file on the Versatile Express firmware drive, usually mounted at /media/VEMSD.

The relevant register is CFGREG6 on pages 78-81 of the following TRM:

You should add the following setting in board.txt:

SCC: 0x018 0x1FFFFFFF     ; CFGRW6 - Reset register default (both clusters active)
- or -
SCC: 0x018 0x00001FFF     ; CFGRW6 - A15-only config
- or -
SCC: 0x018 0x1FFFF000     ; CFGRW6 - A7-only config

Remember to update TOTALSCCS, eg, if it was 32 and you’ve added one register, it becomes 33:

TOTALSCCS: 33                   ;Total Number of SCC registers

Configure the Device Tree

Once the hardware is booting as an A7 or A15 only board, next you need to remove the unused CPU nodes from the device tree.

In the kernel source tree, edit arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts and remove the unused CPUs from this section:

   cpus {
        #address-cells = <1>;
        #size-cells = <0>;
       cpu2: cpu@2 {
            device_type = "cpu";
            compatible = "arm,cortex-a7";
            reg = <0x100>;
            cluster = <&cluster1>;
            core = <&core2>;
            clock-frequency = <800000000>;
            cci-control-port = <&cci_control2>;
       cpu3: cpu@3 {
            device_type = "cpu";
            compatible = "arm,cortex-a7";
            reg = <0x101>;
            cluster = <&cluster1>;
            core = <&core3>;
            clock-frequency = <800000000>;
            cci-control-port = <&cci_control2>;
       cpu4: cpu@4 {
            device_type = "cpu";
            compatible = "arm,cortex-a7";
            reg = <0x102>;
            cluster = <&cluster1>;
            core = <&core4>;
            clock-frequency = <800000000>;
            cci-control-port = <&cci_control2>;
       cpu0: cpu@0 {
            device_type = "cpu";
            compatible = "arm,cortex-a15";
            reg = <0>;
            cluster = <&cluster0>;
            core = <&core0>;
            clock-frequency = <1000000000>;
            cci-control-port = <&cci_control1>;
       cpu1: cpu@1 {
            device_type = "cpu";
            compatible = "arm,cortex-a15";
            reg = <1>;
            cluster = <&cluster0>;
            core = <&core1>;
            clock-frequency = <1000000000>;
            cci-control-port = <&cci_control1>;

Next, you need to remove the GIC entries that are associated with the removed CPUs, eg:

   gic: interrupt-controller@2c001000 {
        compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic";
        #interrupt-cells = <3>;
        #address-cells = <0>;
        reg = <0 0x2c001000 0 0x1000>,
              <0 0x2c002000 0 0x1000>,
              <0 0x2c004000 0 0x2000>,
              <0 0x2c006000 0 0x2000>;
        interrupts = <1 9 0xf04>;
       gic-cpuif@0 {
            compatible = "arm,gic-cpuif";
            cpuif-id = <0>;
            cpu = <&cpu0>;
       gic-cpuif@1 {
            compatible = "arm,gic-cpuif";
            cpuif-id = <1>;
            cpu = <&cpu1>;
       gic-cpuif@2 {
            compatible = "arm,gic-cpuif";
            cpuif-id = <2>;
            cpu = <&cpu2>;
       gic-cpuif@3 {
            compatible = "arm,gic-cpuif";
            cpuif-id = <3>;
            cpu = <&cpu3>;
       gic-cpuif@4 {
            compatible = "arm,gic-cpuif";
            cpuif-id = <4>;
            cpu = <&cpu4>;

Finally, you need to re-compile the DTS file and copy it to the SD card used to boot the system, eg:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs
cp arch/arm/boot/dts/vexpress-v2p-ca15_a7.dtb /media/boot/v2p-ca15-tc2.dtb

This build has been boot tested on FVP_VE A15×4 and A9MPx4. Reaching a login prompt is the only test carried out. This build is expected to run on other models. No UEFI binary exists for dual cluster A15x{1|4}-A7x{1|4} models; in this case the A15 binary can be used, but the A7 CPUs will be held in reset.


  • Install the model(s) you wish to run. You must have a valid license and the environment set up to run models
  • Install Linaro image tools
  • Install kpartx which you can get by issuing the following command in your terminal
  • Download all the artifacts from the list above
sudo apt-get install kpartx

Linaro OpemEmbedded images are made up of two components. The Hardware Pack, which contains the kernel, boot loader and/or Device Tree blob and a Root file system (RootFS) of your choice to generate an image.

Install Linaro Image Tools

There are multiple ways you can get the latest Linaro Image Tools:

  • Method 1: Install them from the Linaro Image Tools PPA

sudo add-apt-repository ppa:linaro-maintainers/tools
sudo apt-get update
sudo apt-get install linaro-image-tools

  • Method 2: Building from source


Create a 2GB image file

Fast Models will only deal with file systems up to 2GB in size, however the pre-built image may be larger. In this case, you can build your own image using the pre-built artifacts as listed below.

You need to create the image using the following commands.

linaro-media-create --image-file linaro.img --image-size 2000M --dev vexpress --hwpack <hwpack filename> --binary <rootfsi filename>
sudo kpartx -a linaro.img
mkdir boot
sudo mount /dev/mapper/loop0p1 boot
cp boot/uImage .
cp -ar boot/rtsm rtsm
sudo umount boot
sudo kpartx -d linaro.img

note: unless you use kpartx to delete the loop mappings as above, even if you update linaro.img and re-mount it, it will not refresh and you will end up using the old image.

Run Fast Models with UEFI

The instructions for running UEFI on the various models are very similar. The two differences are the UEFI binary and the model used. Follow the model specific instruction below, then proceed to the generic instructions in the section “Run the model with UEFI”. Make sure that the model binary is on your path, or alter the MODEL variable definition to include the path to the binary.

Run A9×4 model with UEFI


Run A15×1 model with UEFI


Run A15×2 model with UEFI


Run A15×4 model with UEFI


Run the model with UEFI

touch uefi-vars.fd # create the file if it doesn't already exist
-C motherboard.flashloader0.fname=$UEFI \
-C motherboard.flashloader1.fname=uefi-vars.fd \
-C motherboard.flashloader1.fnameWrite=uefi-vars.fd \
-C motherboard.mmc.p_mmc_file=linaro.img \
-C motherboard.pl011_uart0.unbuffered_output=true \
-C motherboard.smsc_91c111.enabled=1 \
-C motherboard.hostbridge.userNetworking=1