NameLast modifiedSizeLicense

Parent Directory Parent Directory
other MANIFEST 28-Jul-2014 06:42 313 open
other MD5SUMS 28-Jul-2014 06:42 147 open
application/x-tar boot.tar.bz2 28-Jul-2014 06:42 12.5M open
other kernel_config 28-Jul-2014 06:42 57.5K open
other lava-job-info 28-Jul-2014 06:42 63 open
text linaro_android_build_cmds.sh 28-Jul-2014 06:42 8.0K open
text linaro_kernel_build_cmds.sh 28-Jul-2014 06:42 1.8K open
application/xml pinned-manifest-ann.xml 28-Jul-2014 06:42 65.2K open
application/xml pinned-manifest.xml 28-Jul-2014 06:42 62.4K open
application/xml source-manifest-ann.xml 28-Jul-2014 06:42 79.6K open
application/xml source-manifest.xml 28-Jul-2014 06:42 76.8K open
application/x-tar system.tar.bz2 28-Jul-2014 06:43 201.5M open
application/x-tar userdata.tar.bz2 28-Jul-2014 06:43 2.7M open
other vexpress.img.bz2 28-Jul-2014 06:44 216.9M open


Linaro Stable Kernel (LSK) 14.07 Release for Versatile Express (Android)

The Linaro Stable Kernel (LSK) is produced, validated and released by Linaro and is based on the linux stable kernel tree. It is produced to satisfy the requirements of Linaro members. The LSK focuses on quality and stability and is therefore a great basis for member products. It also includes backports of commonly desired features, provided they meet the quality requirements, and also any bug fixes.

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 release includes Linaro Android Jelly Bean for 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).

About the TC2 Engineering Build

This release is based on the Linux v3.10.44 kernel. As a consequence, almost all of the patches in the ARM Landing Team tree have been rebased and refactored to account for the latest upstream content.

The TC2 CoreTile is the first example of a big.LITTLE system shipped by ARM and serves as a platform for development and test of big.LITTLE software. TC2 contains a tri-core Cortex-A7 cluster and a dual-core Cortex-A15 cluster linked using the CCI-400 coherent interconnect.

The release contains the big.LITTLE MP patchset developed by ARM. This patchset is hosted by Linaro and can be found in the linked git repository. These patches have been developed and rigorously tested in order to enable the ARM Versatile Express V2P-CA15_A7 CoreTile (TC2) to run in full MP mode. This functionality has been optimised for energy and performance bringing it close to the Cortex-A7 (LITTLE) in energy consumption with near Cortex-A15 (big) performance. The patchset also includes optimizations that provide a considerable performance uplift across a wide range of benchmarks. The functionality introduced by this patchset is stable and ready for use on other platforms. Note that at present this LSK release is the reference point for big.LITTLE MP functionality.

The patches in the big.LITTLE MP patchset are generic and applicable to big.LITTLE systems with minimal porting effort. To ease porting, the patches are also available as an isolated package located here. This package may be used directly by partners interested in porting the big.LITTLE MP scheduler functionality to their custom platform. Please contact ARM support in case of any queries related to this package.

Also provided is optional configurable kernel support for an implementation of ARM’s Power State Co-ordination Interface (PSCI). This support is disabled by default. To use PSCI support you will require secure firmware that is currently available to ARM licensees upon request to ARM. Please contact ARM support to get access to the firmware code.

The 'small task packing feature’ continues to be enabled by default in the kernel configuration. (See the documentation for this feature located at 'Documentation/arm/small_task_packing.txt’ within the kernel sources for more information on this feature).

Please note that this release does not introduce any new functionality. However the release does contain one bug fix – see the patch marked 'New in this release’ in the list below for details.

Scheduler modifications to support big.LITTLE

The following patches make up the big.LITTLE MP patchset.

sched: implement usage tracking
sched: entity load-tracking load_avg_ratio
sched: Task placement for heterogeneous systems based on task load-tracking
sched: Forced task migration on heterogeneous systems
sched: Introduce priority-based task migration filter
ARM: Add HMP scheduling support for ARM architecture
ARM: sched: Use device-tree to provide fast/slow CPU list for HMP
ARM: sched: Setup SCHED_HMP domains
sched: Add ftrace events for entity load-tracking
sched: Add HMP task migration ftrace event
sched: SCHED_HMP multi-domain task migration control
sched: Enable HMP priority filter by default
ARM: sched: Avoid empty 'slow’ HMP domain
sched: Only down migrate low priority tasks if allowed by affinity mask
sched: fix arch_get_fast_and_slow_cpus to get logical cpumask correctly
sched: Do not ignore grouped tasks during HMP forced migration.
sched: Ignore offline CPUs in HMP migration & load stats
ARM: Change load tracking scale using sysfs
ARM: Experimental Frequency-Invariant Load Scaling Patch
ARM: Fix build breakage when big.LITTLE.conf is not used.
sched: Basic global balancing support for HMP
sched: cfs.nr_running does not contain the intended metric
Revert sched: Enable HMP priority filter by default
HMP: Use unweighted load for hmp migration decisions
HMP: Select least-loaded CPU when performing HMP Migrations
HMP: Avoid multiple calls to hmp_domain_min_load in fast path
HMP: Force new non-kernel tasks onto big CPUs until load stabilises
sched: Restrict nohz balance kicks to stay in the HMP domain
HMP: experimental: Force all rt tasks to start on little domain
HMP: select 'best’ task for migration rather than 'current’
sched: HMP fix traversing the rb-tree from the curr pointer
sched: track per-rq 'last migration time’
HMP: Modify the runqueue stats to add a new child stat
HMP: Explicitly implement all-load-is-max-load policy for HMP targets
sched: HMP change nr_running offload metric
HMP: Implement idle pull for HMP
HMP: Access runqueue task clocks directly.
HMP: Update migration timer when we fork-migrate
sched: HMP: Change default HMP thresholds
sched: HMP: Additional trace points for debugging HMP
arm: ipi raise/start/end tracing
smp: smp_cross_call function pointer tracing
sched: HMP: fix potential logical errors
hmp: Remove potential for task_struct access race
HMP: Implement task packing for small tasks in HMP
HMP: Avoid using the cpu stopper to stop runnable tasks
sched: hmp: add read-only hmp domain sysfs file
Documentation: HMP: Small Task Packing explanation
sched: hmp: Fix build breakage when not using CONFIG_SCHED_HMP
sched: reset blocked load decay_count during synchronization
sched: update runqueue clock before migrations away
sched: hmp: Make idle balance behaviour normal when packing disabled
sched: hmp: Change TC2 packing config to disabled default if present
config: Make packing present on TC2
sched: hmp: Fix potential task_struct memory leak
HMP: Restrict irq_default_affinity to hmp_slow_cpu_mask
HMP: Fix rt task allowed cpu mask restriction code on 1×1 system
hmp: sched: Clean up hmp_up_threshold checks into a utility fn
sched: hmp: unify active migration code
hmp: Use idle pull to perform forced up-migrations
hmp: dont attempt to pull tasks if affinity doesn’t allow it
Revert hmp: dont attempt to pull tasks if affinity doesn’t allow it
Revert hmp: Use idle pull to perform forced up-migrations
Revert sched: hmp: unify active migration code
Revert hmp: sched: Clean up hmp_up_threshold checks into a utility fn
sched: hmp: Change small task packing defaults for all platforms
hmp: sched: Clean up hmp_up_threshold checks into a utility fn
sched: hmp: unify active migration code
hmp: Use idle pull to perform forced up-migrations
hmp: dont attempt to pull tasks if affinity doesn’t allow it
sched: hmp: fix out-of-range CPU possible
New in this release

Platform Support.

In addition to the big.LITTLE MP work the TC2 platform support includes:

  • TC2: reset CPUs spuriously woken up on cluster power up
  • vexpress: add shim layer for psci backend on TC2
  • vexpress: allow native pm ops backends to probe for psci suppport
  • psci: add cmdline option to enable use of psci
  • psci: add probe function to discover presence of a psci implementation
  • psci: convert psci '-EALREADYON’ error code to linux '-EAGAIN’
  • vexpress: add psci support in TC2 device tree
  • psci: add constants to specify affinity levels
  • TC2: replace hard coded cluster and cpu values with constants
  • TC2: use generic accessors to extract cpu and cluster ids
  • CPUidle & CPUfreq support
  • hwmon driver allowing, amongst other things, TC2’s power, current and energy measurements to be read through standard sysfs interfaces
  • Common clocks implementation
  • Regulator driver
  • Drivers for previously hard-coded configuration interfaces
  • Support self-hosted debugging through idle
  • In addition to the CPU PMUs the perf framework supports the CCI-400 PMUs
  • A patch from Thomas Gliexner which supports a IRQ affinity mask being specified in the command line. This can be used to reduce unnecessary IRQ wakeups on Cortex-A15. For instructions see the irqaffinity entry in Documentation/kernel-parameters.txt
  • arm-multi_pmu_v2 – enables the use of multiple PMU types or sources, for example profiling across both Cortex-A15 and Cortex-A7 clusters and getting results for CCI.

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 Android Development mailing list
  • Linaro Android IRC channel on irc.freenode.net at #linaro-android

  • Landing Team bug reports should be filed in Bugzilla by clicking on the New link on the top menu bar.
    • You will need to login to your Linaro account. If you do not have an account or are having problems, email its@linaro.org 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

Resolved in this release

  • ARM-137 HMP Patch 77 missing from 14.06 release

Known Issues

General Issues

  • Bug 55 Stats for cpuidle time are always zero
  • Bug 138 14.05 LSK pre-release validation shows degradation in BBench scores
  • Bug 141 perf shows zero for cycle and instruction counts on TC2
  • Bug 143 Audio playback under Android JellyBean stops sporadically on TC2 with release 13.03

Known Issues due to lack of video acceleration

  • Bug 142 vexpress: Angrybirds display severely truncated
  • Bug 160 vexpress: YouTube video playback fails

Known Issues due to generic Android features

  • Bug 140 Gallery app crashes on start on vexpress Android 4.3
  • Bug 139 Panic in ip6tables during Android boot
  • Bug 139 Panic in ip6tables during Android boot
  • Bug 197 Latest Android rootfs (4.4.3) caused performance regression on LSK with big.LITTLE patch set
  • Bug 250 Vellamo is crashing on 4.4.2 and 4.4.3 builds on TC2

Additional information

NOTE: When using the interactive governor with Android, take care to use the following values for governor specific tunables. These values have been selected after careful analysis on this LSK version and result in optimal power-performance on TC2. In future LSK releases, additional system initialisation logic will use these values as defaults.

Interactive settings for the Cortex-A7 cluster:

'above_hispeed_delay’: 20000
'go_hispeed_load’: 85
'hispeed_freq’: 800000
'min_sample_time’: 80000
'timer_rate’: 20000

Interactive settings for the Cortex-A15 cluster:

'above_hispeed_delay’: 20000
'go_hispeed_load’: 85
'hispeed_freq’: 1000000
'min_sample_time’: 80000
'timer_rate’: 20000

Linaro provides two methods for installing Linaro binary builds:

  1. Using a pre-built image, which you can download
  2. Assembling your own image using provided components

Pre-Installation Steps

Before any installation begins, it is important that you ensure your Versatile Express board has the latest firmware and boot loader installed. Please check the “Firmware Update” tab on this page for the latest updates and installation instructions.

Using pre-built image

Prerequisites

  • Ubuntu 12.04 64 bit or newer on your desktop PC, which you can download from www.ubuntu.com
  • 4GB SD card or larger
  • Latest firmware installed onto the Versatile Express. Please see “Firmware Update” tab
  • This release pre-built image (vexpress.img.bz2), which you can downloaded from the above list of artifacts or just click here

Installation Steps

  • Unzip the downloaded pre-built image
  • Insert SD card into your PC and note the assigned '/dev/sdX'
dmesg
SDCARD=/dev/sdX # sdcard found from dmesg above
bzcat vexpress.img.bz2 | sudo dd bs=64k of=$SDCARD

When the image is created, skip down to the section “Booting the image”.

Note: Windows users may use the Image Writer for Windows


Building a custom image using pre-built components.

Sometimes, you may wish to build your own custom image for a Versatile Express. Perhaps you wish to use a more recent snapshot of the hardware pack or take the latest Android build. Whatever the reason, you will want to use the Linaro Image Tools to create a custom image.

Using components to generate the image will yield the same functionality found in the pre-built image of the same release.

Prerequisites

  • Ubuntu 12.04 64 bit or newer on your desktop PC, which you can download from www.ubuntu.com
  • Download Artifacts from above or use the following command in your terminal
wget https://releases.linaro.org/14.07/members/arm/android/vexpress-lsk/boot.tar.bz2
wget https://releases.linaro.org/14.07/members/arm/android/vexpress-lsk/system.tar.bz2
wget https://releases.linaro.org/14.07/members/arm/android/vexpress-lsk/userdata.tar.bz2

  • 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

wget http://releases.linaro.org/14.07/components/platform/linaro-image-tools/linaro-image-tools-2014.07.tar.gz
  • Insert SD card and note the assigned '/dev/sdX' or '/dev/mmcblk0'
dmesg | less

Look for a line that looks like the following at the end of the log

[288582.790722] sdc: sdc1 sdc2 sdc3 sdc4 <sdc5 sdc6 >

Or, if your machine uses '/dev/mmcblkX', you may see a line line this:

[10770.938042] mmcblk0: p1 p2 p3 p4 < p5 p6 >

WARNING: In the next step, make sure you use /dev/"whatever you see above". You can erase your hard drive with the wrong parameter.

  • Create media
linaro-android-media-create --mmc /dev/sdX --dev vexpress --boot boot.tar.bz2 --system system.tar.bz2 --userdata userdata.tar.bz2

Booting the image

After the media create tool has finished executing, remove the SD card from your PC and insert it into the Versatile Express board.

Before you can boot the image you will need to install the UEFI boot loader into NOR flash and update the Versatile MMC card configuration files. The instructions on the Firmware Update tab provide information on how to do this and how to configure UEFI to specify the SD card as a boot device.

Advanced Setup for Benchmarking

Advanced users of Versatile Express may wish to perform benchmarking tests on the board.

Booting with the root filesystem on a USB mass storage device is more efficient both in terms of electrical power and processing speed. Unfortunately, UEFI does not support booting the kernel from USB. In order to achieve this, we recommend that you install the kernel onto SD card and the root filesystem to USB mass storage.

The instructions below will create two identical images: one on SD card and one on USB mass storage. The user is able to choose which device the kernel uses for the root filesystem by adding a command line parameter. By default, the android kernel will expect the root filesystem to be read from the SD card. Adding the parameter “androidboot.hardware=arm-versatileexpress-usb” to the command line will over-ride this behaviour and instruct the kernel to read the root filesystem from USB.

Before following these instructions, ensure that you have both an SD card and a USB mass storage device of at least 4GB inserted into your Linux machine.

Using a pre-built image

Follow the instructions above for creating an image on an SD card. Then repeat the instructions using the device path for your USB device. For example:

dmesg
SDCARD=/dev/sdX # sdcard found from dmesg above
USBMS=/dev/sdY # USB device found from dmesg above
bzcat vexpress.img.bz2 | sudo dd bs=64k of=$SDCARD
bzcat vexpress.img.bz2 | sudo dd bs=64k of=$USBMS

Using linaro-android-media-create

First the user should run linaro-android-media-create as described above. Then run it again with a USB mass storage device. This will create two release images: one on the SD card and the other on the USB device.

For example:

dmesg
SDCARD=/dev/sdX # sdcard found from dmesg above
USBMS=/dev/sdY # USB device found from dmesg above
linaro-android-media-create --mmc $SDCARD --dev vexpress --boot boot.tar.bz2 --system system.tar.bz2 --userdata userdata.tar.bz2
linaro-android-media-create --mmc $USBMS  --dev vexpress --boot boot.tar.bz2 --system system.tar.bz2 --userdata userdata.tar.bz2

Booting your system with the advanced setup

Insert the SD card into the card slot on the Versatile Express board and insert the USB device into one of the USB device slots on the board. The USB slots are located below the ethernet port on the rear panel.

Boot the board using the standard UEFI firmware setup as described in the Firmware Update tab.

When UEFI starts, you will need to interrupt the boot countdown and edit the configuration to add the following text to the end of the kernel commandline:

androidboot.hardware=arm-versatileexpress-usb

Instructions for updating the UEFI configuration can be found on the UEFI wiki

Accessing Source Code

Linaro Android JB Source Code

Run the linaro_android_build_cmds.sh, it will download the entire source code for both Android JB and the kernel and attempt to build it.

The pinned and source manifests can be found here:

Kernel Source Code

Obtain the exact kernel source code for this cycle by using the linaro_kernel_build_cmds.sh script to download the source and build it. You can get the kernel configuration from here (listed above)

Compiling Linaro Android RootFS+Kernel

The following simple steps download, install and compile a complete Linaro Android distribution

  • Download and install Ubuntu 12.04 64 bit or newer (download)
  • Install the following packages:
sudo apt-get update
sudo apt-get install zip curl flex bison build-essential git-core gnupg gperf zlib1g-dev libx11-dev x11proto-core-dev \
gcc-multilib g++-multilib libc6-dev-i386 ia32-libs lib32z-dev gcc-4.5 g++-4.5 cpp-4.5 gcc-4.5-multilib g++-4.5-multilib \
uboot-mkimage uuid-dev openjdk-7-jdk ant lib32ncurses5-dev xsltproc
sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config javadoc
  • Download the Android building script for this release from here or from the list of artifacts listed above.
  • Run the script
chmod a+x linaro_android_build_cmds.sh
./linaro_android_build_cmds.sh

Installing Android JB on your board

  • Insert SD card and note the assigned '/dev/sdX' or '/dev/mmcblk0'
dmesg | less

Look for a line that looks like the following at the end of the log

[288582.790722] sdc: sdc1 sdc2 sdc3 sdc4 <sdc5 sdc6 >

Or, if your machine uses ‘dev/mmcblkX’, you may see a line line this:

[10770.938042] mmcblk0: p1 p2 p3 p4 < p5 p6 >

WARNING: In the next step, make sure you use /dev/“whatever you see above”. You can erase your hard drive with the wrong parameter.

  • Create media
cd android/out/target/product/
sudo linaro-android-media-create --mmc /dev/sdX --dev vexpress --boot boot.tar.bz2 --system system.tar.bz2 --userdata userdata.tar.bz2
  • Insert the SD card into your Versatile Express board and reboot it

If UEFI is already configured to boot a Linaro Android image, it will boot from the SD card. If not, follow the instructions in the section: Configure UEFI found on the Linaro wiki.

Compiling and installing your Kernel

Prerequisites

  • Download and install Ubuntu 12.04 64 bit or newer (download)
  • Install the following packages by typing:
sudo apt-get install gcc-arm-linux-gnueabi curl git libncurses5-dev
  • Create a working subdirectory
  • Download the auto build script for this release from the list of artifacts above (the kernel configuration will be automatically downloaded).
  • Run the build script
chmod a+x linaro_kernel_build_cmds.sh
./linaro_kernel_build_cmds.sh

Note: When you run menuconfig, make sure you go to System Type -> Versatile Express platform type and make sure that both options are enabled.

[*] Versatile Express Cortex-A9x4 tile
[*] Device Tree support for Versatile Express platforms

This will mean that the same kernel will run on A5, A9, TC2 and various fast models.

Installing 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):
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs
  • Insert the SD card containing the Linaro disk image
  • Copy the kernel onto the memory card
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/vexpress-v2p-ca5s.dtb /media/boot/v2p-ca5s.dtb
    • For A15 CoreTile (TC1): cp arch/arm/boot/vexpress-v2p-ca15-tc1.dtb /media/boot/v2p-ca15-tc1.dtb
    • For A15_A7 CoreTile: (TC2): cp arch/arm/boot/vexpress-v2p-ca15_a7.dtb /media/boot/v2p-ca15-tc2.dtb
  • Eject the memory card eject /media/boot
  • Insert the memory card into the Versatile Express board and power it on

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://git.linaro.org/arm/vexpress-firmware.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 support@arm.com 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:
http://infocenter.arm.com/help/topic/com.arm.doc.ddi0503e/DDI0503E_v2p_ca15_a7_tc2_trm.pdf

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>;
        interrupt-controller;
        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 release was boot tested on FVP A15×4 and A15×4-A7×4 models. No rigorous testing was carried out. This build is expected to run on other models. No UEFI binary exists for A15-A7 models; in this case, the A15 binary can be used, but the A7 CPUs will not be available

Prerequisites

  • 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 Linaro Image Tools

Linaro Image Tools contain scripts that allow you to combine multiple components into a single Android image. The components are:

  • boot.tar.bz2 – contains the kernel and boot loaders
  • system.tar.bz2 – contains the entire system files and general OS
  • userdata.tar.bz2 – contains sample data and tests

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: Build from source

wget http://releases.linaro.org/14.07/components/platform/linaro-image-tools/linaro-image-tools-2014.07.tar.gz

Create a 2GB image file

Fast Models will only deal with file systems up to 2GB in size, however the Linaro pre-built image for Android requires a 4GB filesystem. Therefore, we will build our own image using the pre-built artifacts (displayed above)

The following command downloads all the Android OS components necessary to make up a complete Android image.

wget https://releases.linaro.org/14.07/members/arm/android/vexpress-lsk/boot.tar.bz2
wget https://releases.linaro.org/14.07/members/arm/android/vexpress-lsk/system.tar.bz2
wget https://releases.linaro.org/14.07/members/arm/android/vexpress-lsk/userdata.tar.bz2

Using the linaro-android-media-create, which is part of the linaro-image-tools, you can combine all the components into a single image.

linaro-android-media-create --image-file linaro.img --image-size 2000M --dev vexpress --boot boot.tar.bz2 --system system.tar.bz2 --userdata userdata.tar.bz2
tar jxvf boot.tar.bz2

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

MODEL=FVP_VE_Cortex-A9_MPx4
UEFI=boot/rtsm/uefi_rtsm_ve-ca9x4.bin

Run A15×1 model with UEFI

MODEL=FVP_VE_Cortex-A15x1
UEFI=boot/rtsm/uefi_rtsm_ve-ca15.bin

Run A15×2 model with UEFI

MODEL=FVP_VE_Cortex-A15x2
UEFI=boot/rtsm/uefi_rtsm_ve-ca15.bin

Run A15×4 model with UEFI

MODEL=FVP_VE_Cortex-A15x4
UEFI=boot/rtsm/uefi_rtsm_ve-ca15.bin

Run the model with UEFI

touch uefi-vars.fd # create the file if it doesn't already exist
$MODEL \
-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

Project: "arm/models/boot-wrapper"
Description: "Project: The boot-wrapper is a fairly simple implementation of a boot loader intended to run under an ARM Fast Model and boot Linux."

Project: "arm/uefi/uefi"
Description: "Project: ARM UEFI repository. Tianocore EDK2 code with Linaro patches."

Project: "device/linaro/common"
Description: "Project: Non AOSP project. Linaro common device configuration support."

Project: "device/linaro/hi4511"
Description: "Project: Non AOSP project. Linaro hi4511 device configuration support."

Project: "device/linaro/pandaboard"
Description: "Project: Non AOSP project. Linaro pandaboard device configuration support."

Project: "device/linaro/vexpress"
Description: "Project: Non AOSP project. Linaro vexpress device configuration support."

Project: "device/samsung/proprietary-open"
Description: "Project: Non AOSP project. Samsung's proprietary but open projects."

Project: "device/samsung_slsi/arndale"
Description: "Project: Non AOSP project. Linaro arndale device configuration support."

Project: "hardware/linaro/common"
Description: "Project: Non AOSP project. Linaro common hardware support e.g. libcamera."

Project: "people/tixy/u-boot"
Description: "Project: u-boot repository for vexpress."

Project: "platform/external/android-input-bridge"
Description: "Project: Non AOSP project. Android Input Bridge. It is a tool to control input devices remotely (over adb derived protocol)."

Project: "platform/external/busybox"
Description: "Project: Non AOSP project. Common busybox utilities built for Android."

Project: "platform/external/cyclictest"
Description: "Project: Non AOSP project. cyclictest is used as a stress test to generate synthetic CPU load for stress testing."

Project: "platform/external/ffmpeg"
Description: "Project: Non AOSP project. ffmpeg, mainly used for MultiMedia testing."

Project: "platform/external/htop"
Description: "Project: Non AOSP project. Htop utility to monitor system and memory load on Linaro builds."

Project: "platform/external/iozone"
Description: "Project: Non AOSP project. iozone is used to benchmark filesystem performance."

Project: "platform/external/libnl"
Description: "Project: Non AOSP project. Supporting obsolete AOSP libnl project"

Project: "platform/external/linaro-android-tools"
Description: "Project: Non AOSP project. Linaro android tools to update uInitrd and boot partition of Linaro Android images."

Project: "platform/external/lrzsz"
Description: "Project: Non AOSP project. Unix communication package providing the XMODEM, YMODEM ZMODEM file transfer protocols. Used to get a file over from minicom before adb and friends are up on a new device."

Project: "platform/external/memtester"
Description: "Project: Non AOSP project. memtester is used to test for faulty memory subsystem."

Project: "platform/external/ncurses"
Description: "Project: Non AOSP project. libncurses for Android."

Project: "platform/external/speex"
Description: "Project: Non AOSP project. Open Source speech codec. Linaro monifications include making project build as a shared library, build resampler plugin and few additional NEON patches."

Project: "platform/external/stress"
Description: "Project: Non AOSP project. stress test used for system wide stress testing."

Project: "platform/external/stressapptest"
Description: "Project: stressapptest tries to maximize randomized traffic to memory from processor and I/O, with the intent of creating a realistic high load situation in order to stress test the device. Also used in cache-coherency testing."

Project: "platform/external/sysbench"
Description: "Project: Non AOSP project. Sysbench tool is a System Evaluation benchmark."

Project: "platform/external/thirdparty-benchmarks"
Description: "Project: Non AOSP project. This project repository is used for storing uiautomator test cases of thirdparty benchmark applications and monkeyrunner scripts for running and parsing the result automatically."

Project: "platform/external/x264"
Description: "Project: Non AOSP project. H.264 software video codec, used by ffmpeg."

Project: "platform/hardware/linaro/tinyhal"
Description: "Project: Non AOSP project. Linaro tiny audio hal support"

Project: "platform/hardware/samsung/origen/gralloc_ump"
Description: "Project: Non AOSP project. Samsung's gralloc implementation based on UMP(Unified Memory Provider)."

Project: "platform/hardware/samsung/origen/ump"
Description: "Project: Non AOSP project. Samsung's UMP(Unified Memory Provider) implementation."

Project: "platform/packages/apps/0xbench"
Description: "Project: Non AOSP project. 0xbench benchmarking suit. It is used for System wide benchmarking."

Project: "platform/packages/apps/DisableSuspend"
Description: "Project: Non AOSP project. DisableSuspend is an app to disable suspend mode in Android. It is used to facilitate automation and testing."

Project: "platform/packages/wallpapers/LinaroWallpaper"
Description: "Project: Non AOSP project. Linaro Wallpaper application."

Project: "platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7-linaro"
Description: "Project: Non AOSP project. Linaro's prebuilt gcc-4.7 toolchain."

Project: "platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8-linaro"
Description: "Project: Non AOSP project. Linaro's prebuilt gcc-4.8 toolchain."

Project: "platform/system/core"
Description: "Project: init.rc changes and bug fixes"