NameLast modifiedSizeLicense

Parent Directory Parent Directory
image/png FrontPanel.png 25-Aug-2014 06:48 142.0K open
other MANIFEST 28-Aug-2014 08:34 310 open
image/png RearPanel.png 25-Aug-2014 06:48 168.1K open
application/zip board_recovery_image_0.7.5.zip 27-Aug-2014 06:34 4.6M open
application/zip board_recovery_image_0.8.1.zip 08-Sep-2014 17:05 4.6M open
application/x-tar boot.tar.bz2 28-Aug-2014 08:34 5.5M open
other juno.img.bz2 27-Aug-2014 11:44 310.1M linaro
other kernel_config 28-Aug-2014 08:34 65.7K open
text linaro_android_build_cmds.sh 28-Aug-2014 08:34 7.9K open
text linaro_kernel_build_cmds.sh 28-Aug-2014 08:34 1.8K open
application/xml pinned-manifest-ann.xml 28-Aug-2014 08:34 52.2K open
application/xml pinned-manifest.xml 28-Aug-2014 08:34 52.5K open
other ramdisk.img 28-Aug-2014 08:34 731.6K open
application/xml source-manifest-ann.xml 28-Aug-2014 08:34 52.8K open
application/xml source-manifest.xml 28-Aug-2014 08:34 53.1K open
other system.img 28-Aug-2014 08:37 750.0M linaro
application/x-tar system.tar.bz2 28-Aug-2014 08:39 260.0M linaro
other userdata.img 28-Aug-2014 08:42 550.0M open
application/x-tar userdata.tar.bz2 28-Aug-2014 08:42 44.9M open
application/x-tar vendor.tar.bz2 28-Aug-2014 07:54 2.1M linaro


Update on 9th September 2014
A new firmware is available from ARM that addresses the board lock-ups associated with CPUidle. Please install the new board_recovery_image v0.8.1 (for instructions please see the “firmware update” section at the bottom of the binary image installation tab).
You will still need to enable CPUIdle in the kernel config before you can use it. Note that the new firmware held up to constant aggressive CPUidle stress testing for 8 days, but did eventually lock up after that time. If you intend to run an extermely long soak test then you may wish to consider leaving CPUidle disabled.

About the Linaro Android Release for Juno (Multi-arch 64-bit)

The Linaro Android release is based on a snapshot of the Android AOSP master taken on the 13th August 2014. The build contains multi-arch support allowing full use of the 64-bit ARMv8-A architecture and supports both 64-bit and 32-bit applications. Java-only applications will run as 64-bit in the supplied configuration with no modification. The release uses Linaro Stable Kernel version 3.10 and is integrated with ARM Mali drivers for 3D graphics acceleration. The sources are built using Linaro GCC version 4.9 for 64bit and Android (AOSP) GCC 4.8 for 32bit.

The ARMv8-A reference software stack combined with the Juno ARM Development Platform (ADP) provides the ARM ecosystem with a foundation to accelerate Android availability on 64-bit silicon. The availability of this port is the culmination of a broad architecture enablement program carried out by Linaro, ARM and the ARM partnership. ARM partners will now have access to an AOSP file system with support for both 64-bit and 32-bit apps, together with a broad range of supporting material including the ARMv8-A FVP models, open source toolchain from Linaro and supporting documentation.

For those with access to Juno, this release can be used to examine the internals of the Android Open Source Project in a running system. Application developers, particularly those working in Java, will also be able to develop applications via the recently announced Android 'L’ preview SDK.

In this release, the focus has been on two major components: SELinux enabled boot and latest AOSP NDK built with Linaro tool chains.

The release contains Android ARMv8 optimizations for OpenSSL, LibPNG and BIONIC cortex C strings that were submitted by Linaro to AOSP. The release enables ART runtime as default in “compiler” mode. As part of our release validation we have observed a few standard benchmark and generic applications failing to run due to 64 bit compatibility of Android frameworks. The list is included as part of the test report to members. The other known issues and bugs found in this release are captured below.

The Android AOSP software provided in this release is functionally tested with CTS version 4.4 and the CTS results are shared with members. The BIONIC component is validated with Android BIONIC tests. Android Monkey tests were run for stress testing. Multi-arch support has been validated using examples provided in Android NDK.

The Linaro Android releases for Juno appear monthly. Sources are also made available so you can build your own images (see the Building from Source tab). 

Linaro Android NDK

The build process for Linaro NDK has been completely revamped – instead of repackaging the latest upstream release with just a few components replaced, we’re now building the NDK completely from source, allowing us to pick up changes more recent than the latest release. This has also given us the flexibility to merge ndk32 and ndk64 into one ndk that can target any supported processor.

Installation instructions: Download the NDK from tools directory of the release page and uncompress ndk-linaro-2014.08.tar.xz to your location of choice (e.g. /opt). Point the project you wish to compile at the directory created that way (e.g. /opt/ndk-linaro-2014.08). Since Linaro NDK is a drop-in replacement for upstream NDK, there will usually be no need to change anything.

A notable difference that may require some modifications to code using the NDK is that Linaro NDK defaults to using a GCC 4.9 based compiler for every architecture (not just 64 bit). Code that only compiles with older compilers will have to be fixed.

SELinux

The SElinux feature is not enabled in the release by default, user can set the UEFI boot argument to enable SELinux.

In order to use pre-built images from the release and boot Android with SELinux feature, the user can follow either of these options:

a) Download the Android images with .tar extension on a ubuntu 14.04 host machine that includes the tar command with the —selinux option and use the linaro-android-media create utility to create the Android image.

./linaro-image-tools/linaro-android-media-create —image_file mmc.img —dev vexpress —system system.tar.bz2 —userdata userdata.tar.bz2 —boot boot.tar.bz2

b) If the user does not have access to ubuntu 14.04 host machine, then download the files boot.tar.bz2, system.img, userdata.img and use the command linaro-android-media-create to create the Android image. The .img files are quite big in size compared to .tar files, so downloading these .img files might take considerable time.

./linaro-image-tools/linaro-android-media-create —image_file mmc.img —dev vexpress —systemimage system.img —userdataimage userdata.img —boot boot.tar.bz2

Finally, pass selinux=1 as the boot parameter in the UEFI bootargs configuration.

About the Juno ARM Development Platform

The Juno ARM Development Platform (ADP) is a software development platform for ARMv8-A. It includes:

  • The Juno Versatile Express board
  • ARMv8-A reference software ports available through Linaro
  • Optional LogicTile Express FPGA board to extend the Juno system – this adds a large FPGA to Juno that can be used for driver development or prototyping.

The Juno hardware delivers to software developers an open, vendor neutral ARMv8-A development platform with:

  • Cortex® A57 and A53 MPCore™ for ARMv8-A big.LITTLE
  • Mali™-T624 for 3D Graphics Acceleration and GP-GPU compute
  • A SoC architecture aligned with Level 1 (Server) Base System Architecture

The Juno ADP is available from ARM, please visit www.arm.com/juno for details.

About the Linaro Stable Kernel (LSK)

The Linaro Stable Kernel (LSK) is produced, validated and released by Linaro and is based on the Linux stable kernel tree. The LSK focuses on quality and stability and is therefore a great foundation for product development. It also includes backports of commonly desired features, provided they meet the quality requirements, and also any bug fixes.

LSK releases appear monthly. Sources are also made available so you can build your own images (see the 'Building from Source’ tab).

License

The use of Juno software is subject to the terms of the Juno End User License Agreement.

Support

Please send any ARM support enquiries to juno-support@arm.com. Engineers at Linaro Members can receive support for Juno by sending support requests to support@linaro.org or visiting http://support.linaro.org.

Functionality Listed by Software Component

AOSP Filesystem

  • Snapshot of the AOSP Master at 13th July 2014
  • ART Runtime enabled as default in compiler mode and booting in 64-bit primary mode
  • Optimizations submitted by Linaro for OpenSSL, LibPNG, BIONIC Cortex C strings are now part of this release
  • Linaro Android user space and kernel test repositories are part of the release
  • GPU support. The driver itself is believed performant but issues with HDLCD driver impact on-screen performance
  • HDLCD is fully supported, but is currently only single-buffered leading to visual artefacts

Linux Kernel

  • Support for the ARM Juno Development Platform
  • Limited set of peripherals present on the Juno development board: on-chip USB, non-secure UART, HDMI output, keyboard and mouse functionality over PS/2 connector, ethernet support is provided via on-board SMSC ethernet chip.
  • Full USB driver support in Linux, for access to mass storage and input devices.
  • big.LITTLE MP support for all 6 cores.
  • DVFS stable operating points are enabled for nominal and overdrive

UEFI

  • Booting an Operating System from NOR Flash or USB mass storage
  • Support for Ethernet and PXE boot
  • Version: v1.0-rc0

ARM Trusted Firmware

  • The ARM Trusted Firmware provides an open source framework enabling easy integration of secure OS and run-time services to ARMv8-A platforms
  • Loads the System Control Processor(SCP) firmware into the SCP
  • Initializes the Trusted World before transitioning into Normal World.
  • Services CPU hotplug requests coming from Normal World
  • Provides a standard Power State Coordintion Interface (PSCI) implementation
  • Version: v0.4-Juno-0.5-rc1

SCP Firmware

  • System configuration
  • DDR initialization
  • Basic power state management for frequency and C-states
  • SCPI commands (Ready, Set/Get Clocks, Set/Get CPU power states)
  • Thermal protection (shutdown at 85C, Linux will receive a warning at 75C)
  • DVFS support
  • Version: 1.0.0-rc3

Known Limitations Listed by Software Component

AOSP Filesystem

  • The Juno baseport integration with AOSP is at an early stage and not all applications using the NDK will work at this time.
  • Lack of audio support may cause apps using audio to hang
  • Webkit is work in progress in AOSP. We observe few failures with webkit for 64-bit primary mode, apps using this functionality may not work.
  • HDLCD issues include a lack of double buffering meaning tearing can be seen
  • HDLCD compatibility with monitors is variable at this time
  • OpenCL support is not present at this time and will be enabled in a future release

Linux Kernel

  • The big.LITTLE support is functional but has not yet been tuned for efficiency and performance.
  • The CPUIdle framework is present but disabled in the kernel config due to firmware issues which will be addressed in a future release.

UEFI

  • No display controller support
  • No USB OHCI support. Only EHCI is supported

ARM Trusted Firmware

  • Does not support changing the primary core using SCC General Purpose Register 1.
  • Does not support bringing up secondary cores using PSCI CPU_ON when they have been enabled at boot time by SCP using SCC General Purpose Register 1.

Android AOSP Patch Summary

The following list of patches developed by ARM and Linaro engineering teams were applied to Android AOSP dated 13th July 2014 to get Android booting to UI on the ARMv8-A Juno development platform. These patches can be found on Linaro’s Android Git repositories. Some of these patches have been submitted to AOSP and are being tracked for acceptance.

Known Issues

The following known issues are present in this release. Please contact support@linaro.org if you wish to know more information about these issues or have access problems when attempting to view them.

Bug ID Bug title Bug summary
Bug 135 Juno: Android fails to boot when board has a date in the future When the board default date is set beyond 19.01.2038 Android fails to boot. This is most likely a bug in generic Android code. As a workaround, the date on the board needs to be set to something before 2038 cut off date.
Bug 279 Stock browser freezes on 64/64 build Webkit compomponent does not work well in this release causing crashes and timeouts. As a result the stock browser does not function either.
Bug 271 juice_evtest.sh reports errors Suspend/Resume does not seem to work through EVDEV in this SW release
Bug 269 Wave Blazer app crashes on startup 3rd party application crash – under investigation.
Bug 268 FREEdi YT Player 2.5.7 freezes on startup 3rd party application crash – under investigation.
Bug 267 Chrome browser crashes on startup Chrome browser form AOSP does not work in this configuration
Bug 266 Castle Builder crashes on startup 3rd party application crash – under investigation.
Bug 265 Truck Parking 3D game crashes on startup 3rd party application crash – under investigation.
Bug 264 Adobe Reader freezes on startup Adobe Reader freezes in this configuration. The issue has not been analyzed yet.
Bug 263 Geekbench 3 crashes on 64/64 build 3rd party application crash – under investigation.
Bug 262 Background images not displayed in AngryBirds The issue with missing/black textures has been visible in several applications in this release. Issue with Mali drivers possible cause and will be tested when we update to newer drivers.
Bug 242 Apps don’t detect connectivity on Juno Several applications rely on WiFi for their connectivity needs and with no WiFi on our target platform this leads to failures. The issue will not be fixed.
Bug 241 Iron Man 3 (com.gameloft.android.ANMP.GloftIMHM in APK list) crashes after showing splash screen on Juno 3rd party application crash – under investigation.
Bug 239 Anomaly2Benchmark crashes on startup 3rd party application crash – under investigation.
Bug 238 Gears crashes on startup on Juno 3rd party application crash – under investigation.
Bug 237 glmark2 crashes on startup on Juno 3rd party application crash – under investigation.
Bug 236 Castle Master crashes on startup on Juno 3rd party application crash – under investigation.
Bug 235 AnTuTu crashes on startup 3rd party application crash – under investigation.
Bug 230 Volcano Island doesn’t work on Juno Application starts but fails to launch the actual game. Possibly issue with Mali drivers or other part of the system.
Bug 228 Vellamo freezes when hitting the Pixel Blender benchmark on Juno 3rd party application freezing in particular part of the execution – under investigation
Bug 227 Temple Run crashes on startup 3rd party application crash – under investigation.
Bug 224 Corrupted png files can cause crashes in gallery The stock Gallery application crashes when displaying known corrupt PNG files.
Bug 222 Dev Tools crashes on startup Dev Tools app fails to instantiate com.android.development.Development class from /system/app/Development.apk
Bug 80 CTS errors – jank package does not run at all The jank test package has been run locally with success and we believe this is issue we see happening only in our test automation in LAVA.
Bug 64 Test test_pthread_rwlock from bionic libc test suite fails on Juno build – LAVA
Bug 23 backtrace_test reports failures on 64/64 build Failures reported with local trace and threads
Bug 12 Intermittent HDMI failures There is a problem with HDMI sync for monitors that don’t support FullHD resolution. The board works with some monitors and doesn’t work with others. The monitors known to work are: ASUS VS247 H-P, Samsung S22A300H, HP LP2475w
Bug 23 backtrace_test reports failures on 64/64 build There are failures in libbacktrace unit tests. They only happen on 64bit root filesystem
ARM JSW-749 Linux [Juno-Beta-rc3] Performance is degraded with idle enabled With cpuidle enabled android 64 bit fs shows performance degradation
ARM JSW-748 Linux [Juno-Beta-rc1] Periodic black screen flash Screen blanking is seen at a regular frequency of one in 10 sec
ARM JSW-746 USB Drive failure at maximum OPP With the overdrive operating point enabled, some USB hard drives don’t work (causes kernel panic)
ARM JSW-743 HDMI monitor incompatibilities HDMI video out fails to display Android home screen on one out of 4 monitor types tried
ARM JSW-742 No HDMI HDMI video out does not work on both the ports
ARM JSW-741 UEFI – missing boot options UEFI bootmanager fails to list TFTP and PXE boot options if a live network cable not connected
ARM JSW-727 'Trace’ does not work in UEFI While configuring DS-5 to trace UEFI execution, an error was returned when connecting DS-5 to the debugger
ARM JSW-711 Reset failure Reset fails if button is pressed during NOR flash write

License

The use of Juno software is subject to the terms of the Juno End User License Agreement.

Installation

Linaro Android releases are made up of the following components.

*.img.bz2 pre-built Android disk image
kernel kernel binary
bl1.bin ARM Trused Firmware BL1 binary
fip.bin ARM Trused Firmware Firmware Image Package (FIP) binary
juno.dtb Device Tree Binary
ramdisk.img Ramdisk image
linaro_android_build_cmds.sh Build script for the complete Android release
board_recovery_image_0.7.5.zip Juno board firmware recovery image

Other files such as manifest, *.txt and *.html provide information such as package contents or MD5SUMs about the files they share a common filename with.

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 board has the latest firmware installed. Please see Juno Board Recovery Image and MCC firmware update below for the latest updates and installation instructions. The 14.08 release has been formally QA tested with Firmware version 0.7.1 and sanity tested with Firmware version 0.7.5, but we always recommend that users install the latest version available.

Using pre-built image

Prerequisites

Installation Steps

  • Unzip the downloaded pre-built image
  • Insert USB drive into your PC and note the assigned '/dev/sdX'
dmesg
DRIVE=/dev/sdX # USB drive found from dmesg above
  • Unmount all partitions on the drive
    • If you do not unmount all of the USB drive’s partitions, you run the risk that the image will not be created successfully.
  • Write the image to the drive
bunzip2 juno.img.bz2
sudo dd if=juno.img of=$DRIVE

After you have created the disk image and before you remove the USB drive from your system, you should make sure you wait for all writes to the USB drive to complete.

The following commands may help with this:

$ sync
$ sudo eject $DRIVE

You should also ensure that you have written the image to the USB drive correctly. To do this, after running the eject command, physically remove the USB drive from the system and re-connect the USB drive again. You must unmount all partitions on the USB drive at this point. Note, due to disconnecting and reconnecting the drive, the device path /dev/sdX may have changed. You should check the dmesg output again to ensure that you know the correct path of your USB drive.

Once you are ready, run the following commands:

$ sudo cmp /dev/sdX juno.img
$ sync
$ sudo eject /dev/sdX

When you are confident that the image was created successfully, 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 your board. 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
  • Get 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

wget http://releases.linaro.org/14.08/components/platform/linaro-image-tools/linaro-image-tools-2014.08.tar.gz
  • Insert the USB drive and note the assigned '/dev/sdX'
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 >

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

After you have created the disk image and before you remove the USB drive from your system, you should make sure you wait for all writes to the USB drive to complete.

The following commands may help with this:

$ sync
$ sudo eject /dev/sdX

Where /dev/sdX is the device node for the USB drive as discovered in the instructions above.

Booting the image

After the media create tool has finished executing, remove the USB drive from your PC and insert it into the board.

Before you can boot the image you will need to install the latest firmware on the board. The instructions below provide information on how to do this.

Once you have the latest firmware installed, you will need to configure UEFI to boot the kernel from the “boot” partition of the USB stick. See the steps directly below for instructions on how to configure UEFI.

UEFI Configuration

The example below shows how a test system was configured. Please note: some of the menu option numbers may be different on your board. In particular, the menu option used to choose the boot partition may change number over a reboot. In the example below, the partition named “boot” was option 4. Please be careful that you choose the correct option that corresponds to the menu options you see on your board.

Also take care that the USB partitions are showing in the menu before selecting a menu option. There is a known bug in UEFI where the partitions on USB drives does not show the first time the menu is displayed. To overcome this, as shown in the example below, the user should enter the menu option "[1] Add Boot Device Entry", by pressing 1 followed by the enter key. Then, when the list display and the USB partitions are missing, please press the ESC key once. This will exit out of the current menu prompt and leave you back at the Boot Menu again. At this point, please press 1 again to re-enter the menu option "[1] Add Boot Device Entry" and continue by selecting the partition named “boot” on the USB drive.

UEFI outputs to UART0 on the board. UART0 uses 115200 baud with 8 bits and no stop bit. Please see the “UARTs” section on the Getting Started tab for more details on the UART configuration of the board.

Example UEFI Configuration

When booting your system, after a short time, you be presented by a boot countdown from 10, thus:

The default boot selection will start in  10 seconds

When you see this prompt, please press the enter key to interrupt the countdown. You will then be presented with a menu, thus:

[1] Linux from NOR Flash
[2] Shell
[3] Boot Manager
Start:

Depending on the configuration of your board, the menu option called “Boot Manager” may not be option 3. In this example, we can see that the Boot Menu is indeed option “3”, so we choose it by pressing the “3” key and pressing enter. You will then be presented with a boot menu, thus:

[1] Add Boot Device Entry
[2] Update Boot Device Entry
[3] Remove Boot Device Entry
[4] Update FDT path
[5] Return to main menu
Choice:

The first thing we need to do is to delete all of the existing Boot Device Entries. Deleting a Boot Device Entry is achieved by pressing the 3 key and pressing enter:

[1] Linux from NOR Flash
Delete entry:

In our example, using the default config from the first time you boot the board, there is only 1 Boot Device Entry: “Linux from NOR Flash”. You must delete this entry by pressing the 1 key and pressing enter. After this, you will be returned to the Boot Menu where you should continue by deleting all Boot Device Entries that are configured.

Once you have done this, you should continue by creating a new Boot Device Entry by selecting option 1 from from the Boot Menu. After selecting the menu option by pressing the 1 key folllowed by enter, you will see a list of available Boot Devices, thus:

[1] Add Boot Device Entry
[2] Update Boot Device Entry
[3] Remove Boot Device Entry
[4] Update FDT path
[5] Return to main menu
Choice: 1
[1] Firmware Volume (0 MB)
[2] Firmware Volume (0 MB)
[3] NOR Flash (63 MB)
[4] VenHw(E7223039-5836-41E1-B542-D7EC736C5E59)
[5] VenHw(02118005-9DA7-443A-92D5-781F022AEDBB)
[6] PXE on MAC Address: 00:02:F7:00:57:DD
[7] TFTP on MAC Address: 00:02:F7:00:57:DD
Select the Boot Device:  

As you will see in the example above, there is no partition named “boot” available to the user. At this point, the user must press the ESC key to exit the “Select the Boot Device” option and return to the Boot Menu. From the Boot Menu, please select option 1 again. The example below shows how this looked on our test system, your results may differ:

[1] Add Boot Device Entry
[2] Update Boot Device Entry
[3] Remove Boot Device Entry
[4] Update FDT path
[5] Return to main menu
Choice: 1
[1] Firmware Volume (4068 MB)
[2] Firmware Volume (4068 MB)
[3] NOR Flash (63 MB)
[4] boot (131 MB)
[5] sdcard (13585 MB)
[6] VenHw(E7223039-5836-41E1-B542-D7EC736C5E59)
[7] VenHw(02118005-9DA7-443A-92D5-781F022AEDBB)
[8] PXE on MAC Address: 00:02:F7:00:57:DD
[9] TFTP on MAC Address: 00:02:F7:00:57:DD
Select the Boot Device:

As you will see, the menu option "boot" has now appeared, allowing us to select the partition named “boot” on the USB drive. In the example above, the partition named “boot” is option 4. Your system may show a different option for the partition named boot on your USB drive. Please examine the menu and choose the appropriate option.

Once you have choosen the Boot Device, you will be prompted for the configuration of that Boot Device.

The first quesion will ask for the file path of the kernel, thus:

File path of the EFI Application or the kernel:

When configuring a system to boot Android, you enter the file path of the kernel as “kernel” without the quotes and followed by the enter key, for this is the filename of the kernel in the boot partition on the USB drive.

Next you will be prompted if the kernel has Flattened Device Tree support:

Has FDT support? [y/n]

The answer is yes, so please press the “y” key followed by enter. Next you will be asked if you wish to configure an “initrd” for your system:

Add an initrd: [y/n]

The answer is yes, so please press the “y” key followed by enter. Next you will be asked for the file path of the initrd on your USB drive:

File path of the initrd:

The file is called “ramdisk.img”, so please type “ramdisk.img” without the quotes, followed by the enter key.

After this you will be asked to supply the arguments required to boot the kernel:

Arguments to pass to the binary:

Please note, copy and paste does not work well over the serial terminal. The user is advised to type the commandline arguments by hand, character at a time, followed by the enter key. The commandline used is shown below:

console=ttyAMA0,115200 earlyprintk=pl011,0x7ff80000 root=/dev/ram0 verbose debug

Finally, after entering the commandline, the final question is simply asking for a title that will appear in the Boot Menu:

Description for this new Entry:

You may enter a simple string of alphanumberic characters use to represent the name of this Boot Device. On our example system, we chose to type the string “Linux on USB”, without the quotes, followed by pressing the enter key.

After entering the description string, you will then be returned to the boot menu:

[1] Add Boot Device Entry
[2] Update Boot Device Entry
[3] Remove Boot Device Entry
[4] Update FDT path
[5] Return to main menu

It may take a long time, perhaps over a minute for UEFI to save the Boot Device Entry.

After you have configured the Boot Device Entry, next you must configure the Flattened Device Tree (FDT) path. You do this by selecting the option “Update FDT path” by pressing the 4 key and pressing enter. As with the Add Boot Device Entry option, next you will be presented with a list of Boot Devices that can host the FDT file. On our test system, the list looked like this:

[1] Firmware Volume (4068 MB)
[2] Firmware Volume (4068 MB)
[3] NOR Flash (63 MB)
[4] boot (131 MB)
[5] sdcard (13585 MB)
[6] VenHw(E7223039-5836-41E1-B542-D7EC736C5E59)
[7] VenHw(02118005-9DA7-443A-92D5-781F022AEDBB)
[8] PXE on MAC Address: 00:02:F7:00:57:DD
[9] TFTP on MAC Address: 00:02:F7:00:57:DD

Choose the option that corresponds to the partition named “boot” on your system. In the example above, this is option 4. Enter the option number and press the enter key. You will then be prompted for the file path for the FDT file:

File path of the FDT blob:

At this prompt, type the filename “juno.dtb” and press the enter key. The system may take some time to save the configuration. After which, you will be returned to the Boot Menu:

[1] Add Boot Device Entry
[2] Update Boot Device Entry
[3] Remove Boot Device Entry
[4] Update FDT path
[5] Return to main menu

At this point, we have completed our configuration and we can return to the main menu by selecting option 5 “Return to main menu”. To select option 5, press the 5 key and press enter.

Once you are back at the main menu, you will see that the selection of Boot Devices has now changed. On our test system, the selection looked like this:

[1] Linux on USB
[2] Shell
[3] Boot Manager
Start:

Where option 1, “Linux on USB” was the Boot Device Entry that we created by following the instructions above.

You should now choose this option to boot from your USB drive. When booting, you will see output similar to this:

[1] Linux on USB
[2] Shell
[3] Boot Manager
Start: 1
   PEI    217 ms
   DXE     48 ms
   BDS   3086 ms
Total Time = 3352 ms
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 3.10.52-05409-g95383ee (jenkins-build@ip-10-37-163-123) (gcc version 4.9.2 20140811 (prerelease) (Linaro GCC 4.9-2014.08) ) #1 SMP Wed Aug 20 10:11:03 UTC 2014
[    0.000000] CPU: AArch64 Processor [410fd030] revision 0
[    0.000000] Machine: Juno

One important part of the output is the Linux version, shown above as 3.10.52-05409-g95383ee. It is critical that you ensure you are booting Linux version 3.10.52-05409-g95383ee. If you are not, it may be that you have mis-cofigured your system and you should revise your configuration by repeating the steps above.

note: it is normal for the BDS to show a excessively long time to load the images. This is a known intermittent bug. It did not take such a long time to load.

Restoring the default UEFI configuration

If you wish to restore UEFI to a clean default configuration:

1. Start the board into the “ARM V2M-Juno Boot loader”. Either:

  • Turn on the power.
  • If the board was already powered on, press the black HW RESET button.

The bootloader is accessible on the UART0 port (the top UART port on the back panel). The UART settings are 115200 bauds, 8 bits data, no parity, 1 bit for stop.

2. Run the following commands:

Cmd> flash
Flash> areas
Base      Area Size Blocks Block Size
----      --------- ------ ----------
0x08000000    65280K    255      256K
0x0BFC0000      256K      4        64K
Flash> eraserange 0x0BFC0000
Erasing Flash

DS-5 Configuration Files for Juno

As an optional step, you may wish to install DS-5 configuration files that will allow you to debug Juno. The procedure is as follows:

1. Extract the DS-5 config files anywhere on your host PC.

2. Start DS-5 and select "Preferences" from the "Window" menu.

3. In the window that opens, expand the "DS-5" heading and select "Configuration Database"

4. In the dialogue that opens, fill in:

  a. Name, which can be any string you like e.g. "Juno".

  b. Location, which must be the directory that you extracted the DS-5 config files to. Note this is not the "boards" directory, but the parent directory that now contains "boards".

5. Click Ok to close the dialogue

6. Back in the "Configuration Database" screen, click on "Rebuild database" then click Ok.

 

Firmware update

This section describes how to update the firmware on the Juno board.

The configuration of the Juno Development Platform board is determined by a set of files stored on a flash memory device on the board. The flash memory can be accessed via a USB-B socket on the rear panel of the board. When connected to a host computer, the flash memory will appear as a USB mass storage device with a FAT16 filesystem. The files in this filesystem are edited to control the configuration of the board.

The configuration of the Juno Development Platform board can be returned to factory default by extracting the Juno board recovery image onto the flash memory device, replacing any files already in the flash memory.

To install firmware images that you have built yourself, the procedure is the same except that you will overwrite the contents of the /SOFTWARE/ directory with your own images.

To update the MCC firmware only, the procedure is the same except that the MCC firmware update bundle will contain only a subset of the files contained in the full recovery image.


To carry out a system recovery, update the MCC firmware, or install your own custom firmware images, follow these steps:

1. Connect a serial terminal to the top 9-pin UART0 connector on the rear panel (115200 baud, 8, n, 1).

2. Connect a USB cable between the USB-B connector on the rear panel and a USB port of your host computer.

3. Connect the 12 volt power supply to the board.

The serial terminal will show the command prompt Cmd>

4. At the Cmd> prompt on the serial terminal, issue the command usb_on

Cmd> usb_on

The configuration flash memory should now be visible on the host computer as a mass storage device.

5. Save to the host PC any of the existing files in the configuration flash memory that you wish to retain for future use.

6. If you wish to update one or more of the firmware components then skip to step 7. Otherwise, for a full system recovery, format the configuration flash memory (FAT16).

7. Extract the board recovery image (board_recovery_image_0.7.5.zip) to the root directory of the configuration flash memory, preserving the directory structure.

Update: A new firmware is available from ARM that addresses the board lock-ups associated with CPUidle. Please install the new board_recovery_image v0.8.1.
You will still need to enable CPUIdle in the kernel config before you can use it. Note that the new firmware held up to constant aggressive CPUidle stress testing for 8 days, but did eventually lock up after that time. If you intend to run an extermely long soak test then you may wish to consider leaving CPUidle disabled.

8. If you are performing a system recovery or installing an update from ARM then skip to step 9. Otherwise if you wish to install firmware images that you have built yourself then delete the bl1.bin and fip.bin from the /SOFTWARE/ directory in the configuration flash memory, and copy your own bl1.bin and fip.bin images into that directory to replace them.

9. Safely eject the mass storage device, giving it time to write the files to the internal storage.

10. Press the red ON/OFF button on the rear panel of the board and wait for reprogramming to complete.

The board will load the default configuration and boot up.

Attaching ADB

ADB on Juno is supported over ethernet. Follow the instructions on https://wiki.linaro.org/Platform/Android/SetupAdbOverTcp to connect adb over the network.

License

The use of Juno software is subject to the terms of the Juno End User License Agreement.

Accessing Source Code

Linaro Android Source Code

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

The pinned and source manifests can be found here:

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 \
uuid-dev openjdk-7-jdk ant lib32ncurses5-dev xsltproc
sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config javadoc
  • Accept the EULA and download the Mali graphics (vendor.tar.bz2) libraries from here
  • 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 -o $PWD/vendor.tar.bz2 -t

Installing Android on your board

  • Insert a USB drive 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/juno
sudo linaro-android-media-create --mmc /dev/sdX --dev vexpress --boot boot.tar.bz2 --system system.tar.bz2 --userdata userdata.tar.bz2
  • Insert the USB drive into your board and reboot it

You must configure UEFI exach time you create a new disk image.

Building Firmware From Source

Prerequisites

The following tools and environment are required:

  • Ubuntu desktop OS and the following packages. ARM have only tested with Ubuntu 12.04.02 (64-bit).
    • `git` package to obtain source code
    • `ia32-libs` package
    • `build-essential` and `uuid-dev` packages for building the UEFI and Firmware Image Package (FIP) tool
  • The instructions on this page below assume that the environment variable $JUNO_ROOT_DIR has been initialised to a working directory.
$ export JUNO_ROOT_DIR=<path-to-working-dir>/<name-of-working-dir>

SCP Firmware

The SCP Firmware is only available as a pre-built binary.

 

ARM Trusted Firmware

The ARM trusted firmware consists of the following images:

Filename Image Type Image Name
bl1.bin BL1 ARM Trusted ROM image
bl2.bin BL2 ARM Trusted Firmware
bl31.bin BL3-1 EL3 runtime
bl32.bin (optional) BL3-2 Test Secure Payload

The bl2.bin, bl31.bin and bl32.bin images are inputs to the process of creating a Firmware Image Package.

Obtaining sources

Clone the ARM Trusted Firmware repository from GitHub:

$ cd $JUNO_ROOT_DIR
$ git clone https://github.com/ARM-software/arm-trusted-firmware.git
$ cd arm-trusted-firmware
$ git checkout v0.4-Juno-0.5

Configuration

Set the compiler path

$ export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-none-elf-

Building

1. Change to the trusted firmware directory:

$ cd $JUNO_ROOT_DIR/arm-trusted-firmware

2. Build the different firmware images:

$ make PLAT=juno all

To build the optional bl3-2 Test Secure Payload component, use the following commands instead (the 'make realclean’ is important):

$ make realclean
$ make PLAT=juno SPD=tspd all

By default the preceding commands produce a release version of the build. To produce a debug version instead and make the build more verbose use:

$ make PLAT=juno DEBUG=1 V=1 all

The build process creates products in a `build` directory tree, building the objects for each boot loader stage in separate sub-directories. The following boot loader binary files are created:

  • build/juno/<build-type>/bl1.bin
  • build/juno/<build-type>/bl2.bin
  • build/juno/<build-type>/bl31.bin
  • build/juno/<build-type>/bl32.bin (if the 'SPD=tspd’ flag is used)

... where <build-type> is either `debug` or `release`.

To clean the ARM Trusted Firmware source tree (warning, this will remove the binaries too):

$ make realclean

 

UEFI

UEFI is a single bl33.bin image that is an input to the process of creating a Firmware Image Package.

Obtaining sources

Clone the Juno UEFI Github repository:

$ cd $JUNO_ROOT_DIR
$ git clone https://github.com/ARM-software/edk2.git -b juno
$ cd edk2
$ git checkout v1.0-rc0

 

Configuration

1. Define the AArch64 GCC toolchain:

$ export GCC48_AARCH64_PREFIX=<path-to-aarch64-gcc>/bin/aarch64-none-elf-

2. Configure Tianocore environment:

$ cd $JUNO_ROOT_DIR/edk2
$ . edksetup.sh
$ make -C BaseTools

Building

1. Change to the EDK2 directory:

$ cd $JUNO_ROOT_DIR/edk2

2. To build DEBUG version of UEFI firmware:

$ make -f ArmPlatformPkg/ArmJunoPkg/Makefile

The build produces the binary $JUNO_ROOT_DIR/edk2/Build/ArmJuno/DEBUG_GCC48/FV/BL33_AP_UEFI.fd that should be used as 'bl33.bin’ when generating the Firmware Image Package binary.

To build RELEASE version of UEFI firmware:

$ make -f ArmPlatformPkg/ArmJunoPkg/Makefile EDK2_BUILD=RELEASE

Use the release binary $JUNO_ROOT_DIR/edk2/Build/ArmJuno/RELEASE_GCC48/FV/BL33_AP_UEFI.fd as bl33.bin when generating the Firmware Image Package binary.

To clean EDK2 source tree:

$ make -f ArmPlatformPkg/ArmJunoPkg/Makefile clean

 

Packaging the binaries

ARM Trusted Firmware uses the Firmware Image Package (FIP) binary blob to load images into the system, so that the firmware can avoid managing lots of smaller images. The FIP will contain:

  • BL2 and BL3-1 boot loader images
  • Test Secure Payload (BL3-2 image – optional)
  • UEFI firmware (BL3-3 image)
  • SCP firmware (BL3-0 image)

Note: BL1 image is NOT part of the FIP.

Building a FIP binary

The steps to create a FIP are as follows:

1. Build the 'fip_create’ tool.

$ cd $JUNO_ROOT_DIR/arm-trusted-firmware
$ make fiptool

2. Define the FIP environment. Specifically, include the FIP tool in the path.

$ export PATH=$JUNO_ROOT_DIR/arm-trusted-firmware/tools/fip_create:$PATH

3. Download the firmware image artefacts and extract to a working directory (hereafter referred to as "<path to prebuilt binary>").

4. Gather the binary files (the following example is for release builds only).

$ cd $JUNO_ROOT_DIR
$ mkdir fip
$ cd fip
$ cp <path to prebuilt binary>/bl30.bin .
$ cp $JUNO_ROOT_DIR/arm-trusted-firmware/build/juno/release/bl2.bin .
$ cp $JUNO_ROOT_DIR/arm-trusted-firmware/build/juno/release/bl31.bin .
$ cp $JUNO_ROOT_DIR/arm-trusted-firmware/build/juno/release/bl32.bin .
$ cp $JUNO_ROOT_DIR/edk2/Build/ArmJuno/RELEASE_GCC48/FV/BL33_AP_UEFI.fd  bl33.bin

If you wish to use the pre-built ARM trusted firmware and UEFI EDK2 images instead of building them from source, then the last four lines of the above block can independently be replaced with the following:

$ cp <path to prebuilt binary>/bl2.bin .
$ cp <path to prebuilt binary>/bl31.bin .
$ cp <path to prebuilt binary>/bl32.bin .
$ cp <path to prebuilt binary>/bl33.bin .

5. Create the FIP file:

$ fip_create --dump          \
             --bl2 bl2.bin   \
             --bl30 bl30.bin \
             --bl31 bl31.bin \
             --bl32 bl32.bin \    (if the optional bl32 image is present)
             --bl33 bl33.bin \
             fip.bin

The previous command will display the FIP layout:

Firmware Image Package ToC:
---------------------------
- Trusted Boot Firmware BL2: offset=0xD8, size=0x5268
- SCP Firmware BL3-0: offset=0x5340, size=0x9C64
- EL3 Runtime Firmware BL3-1: offset=0xEFA4, size=0x82A0
- Non-Trusted Firmware BL3-3: offset=0x17244, size=0xF0000
---------------------------
Creating "fip.bin";

6. Optional: the `fip_create` tool can be used in the exact same way to update individual images inside an existing FIP file. For example, to update the SCP Firmware BL3-0 image:

$ fip_create --dump --bl30 new_bl30.bin fip.bin

The previous command will again display the FIP layout:

Firmware Image Package ToC:
---------------------------
- Trusted Boot Firmware BL2: offset=0xD8, size=0x5268
- SCP Firmware BL3-0: offset=0x5340, size=0x9C64
file: 'new_bl30.bin'
- EL3 Runtime Firmware BL3-1: offset=0xEFA4, size=0x82A0
- Non-Trusted Firmware BL3-3: offset=0x17244, size=0xF0000
---------------------------
Updating "fip.bin"

For more details and options about the `fip_create` tool:

$ fip_create --help

Installing the binaries

Please refer to the section titled “Firmware update” on the Binary Image Installation tab.

License

The use of Juno software is subject to the terms of the Juno End User License Agreement.

Juno ports

 

Back panel

Front panel

UARTs

There are 4 UARTs on the Juno board:

UART Location Used by Baud Data bits Stop bits *Parity
SoC UART0 back panel The motherboard, UEFI and the Linux kernel. 115200 8 1 None
SoC UART1 back panel SCP firmware 115200 8 1 None
FPGA UART0 Corresponds to the J55 header on the board. Please contact ARM for more information about this type of header. AP Trusted Firmware 115200 8 1 None
FPGA UART1 Corresponds to the J56 header on the board. Please contact ARM for more information about this type of header Unused at the moment - - - -

Quick Start

If you have just unpacked a new Juno board and would like to get it booting straight away, you may wish to skip ahead to the Set up and boot the Juno board section.

 

Juno software stack overview

There are several pieces of software that make up the complete Juno software stack, and a description of each one follows below.

Juno MCC Microcontroller Firmware

The MCC is a microcontroller on the motherboard that takes care of early setup before the SCP or applications processors are powered on. The MCC is also responsible for managing firmware upgrades.

System Control Processor (SCP) Firmware

The Juno System Control Processor (SCP) is an on-chip Cortex-M3 that provides low level power management and system control for the Juno platform.

Application Processor (AP) Trusted Firmware

The Juno AP Trusted Firmware provides low-level Trusted World support for the Juno platform.

Unified Extensible Firmware Interface (UEFI)

The Juno UEFI implementation provides Linux loader support for the Juno platform. It is based on the open source EFI Development Kit 2 (EDK2) implementation from the Tianocore sourceforge project.

Linux Kernel

The Linaro Stable Kernel (LSK) for Juno.

Linux filesystem

An Openembedded filesystem from Linaro can be mounted via USB (recommended) or NFS over Ethernet.

Android kernel and AOSP

The LSK image contains Android patches and has a unified defconfig, so the same kernel binary will work with a Linux filesystem or an AOSP filesystem (available from Linaro).

 

Software preloaded on new Juno boards

New Juno boards arrive preloaded with MCC firmware, SCP firmware, AP trusted firmware, UEFI, and a Linux kernel. The Juno board does not contain a Linux filesystem or Android AOSP filesystem anywhere in onboard storage.

Please note that early batches of Juno boards contained an SCP firmware image that limits the CPU clock to 50 MHz. ARM strongly recommends that you immediately upgrade to the latest firmware image hosted on this website by following the instructions in the section titled “Firmware update” on the Binary Image Installation tab.

When the power is first turned on, it should boot straight through to Linux. UEFI offers a 10 second window during which you can interrupt the boot sequence by pressing a key on the serial terminal, otherwise the Linux kernel will be launched. In order to reach the Linux shell you must attach a Linux filesystem via USB. If no filesystem is attached then Linux will boot as far as it can and then announce that it is waiting for a filesystem to be attached.

New Juno boards do not contain any Android software pre-installed.

 

Set up and boot the Juno board

You are strongly recommended to update to the latest firmware before doing anything productive with your Juno board.

The steps to set up and boot the board are:

  1. Connect a serial terminal to the UART0 connector (settings).
  2. Connect the 12 volt power, then press the red ON/OFF button on the back panel.

Getting Juno to boot to the Linux shell

If you have just received a new board and powered it on for the first time, you will not reach the Linux shell. Juno will boot Linux to the point where it looks for a filesystem, and when it can’t find one it will sit and wait for one to be attached. To boot all the way to the Linux shell you will need to attach a root filesystem.

Setting the Real Time Clock (required for Android)

New Juno boards do not have the correct time programmed into the real time clock. Some software (notably Android) will not operate correctly until a sensible time is programmed. To set the time, start a terminal session with UART0 connector (settings). Ensure there is power to the board, but the SoC must be powered off (if it is not, then press the black “Hardware Reset” button).

Execute the following:

ARM V2M-Juno Boot loader v1.0.0
HBI0262 build 596
ARM V2M_Juno Firmware v1.1.7
Build Date: May 27 2014
Time :  11:52:35 
Date :  09:07:2060 
Cmd> debug
Debug> date
09/07/2060
Change Date? Y\N >y
D:>23
M:>6
Y:>2014
Debug> time
15 : 51 : 58
Change Time? Y\N >y
s:>0 
m:>08
h:>14
Debug> 
 

Enabling Texture Compression Formats

The Mali GPU in Juno is able to use a variety of texture compression formats, many of which are subject to license from third parties. It is the responsibility of the end user to obtain a license for each texture that will be used on Juno. Once such licenses are obtained, the textures can be enabled by the following procedure:

1. Connect a serial terminal to the top 9-pin UART0 connector on the rear panel (115200 baud, 8, n, 1).

2. Connect a USB cable between the USB Configuration Port on the rear panel and a USB port of your host computer.

3. Connect the 12 volt power supply to the board.

The serial terminal will show the command prompt Cmd>

4. At the Cmd> prompt on the serial terminal, issue the command usb_on

Cmd> usb_on

The configuration flash memory should now be visible on the host computer as a mass storage device.

5. Open the file SITE1/HBI0262B/board.txt for editing.

6. Consult table 1 below to determine the correct value that should be programmed into the GPU texture format register to enable only the registers that you have licensed for use with Juno. To reset to factory settings, the value to program should be 0×00FE001E.

7. In the [SCC REGISTERS] section, below the “TOTALSCCS” line, insert the following line:

SCC: 0x05C <value from step 6 above>         ;Optional comment to explain which texture you have enabled

8. Update the TOTALSCCS count (increment it by one) so that it now reflects the total number of SCC registers that are programmed.

9. Press the red ON/OFF button on the rear panel of the board and wait for reprogramming to complete.

The board will load the default configuration and boot up.



Table 1. Bit mappings for the CONFIG_TEX_COMPRESSED_FORMAT_ENABLE register.

    Please ensure you have obtained the appropriate license(s) before enabling these texture compression formats

Bit Texture compression format Direct X 9 DirectX 10 DirectX 11 OpenGL ES 1.1 OpenGL ES 2.0 OpenGL ES 3.0 OpenGL 2.0 – 2.1 OpenGL 3.0 – 3.1 OpenGL 3.2 – 4.1 OpenGL 4.2
0 Invalid format
1 ETC2 x[a] x[a] x
2 EAC, 1 component x
3 ETC2 + EAC x
4 EAC, 2 components x
5 Reserved
6 NXR
7 BC1_UNORM (DXT1) x x x x[b] x[b] x[b] x[f] x[f] x[f] x[f]
8 BC2_UNORM (DXT3) x x x x[c] x[c] x[f] x[f] x[f] x[f]
9 BC3_UNORM (DXT5) x x x x[d] x[d] x[f] x[f] x[f] x[f]
10 BC4_UNORM (RGTC1_UNORM) x x x[g] x x x
11 BC4_SNORM (RGTC1_SNORM) x x x[g] x x x
12 BC5_UNORM (RGTC2_UNORM) x x x[g] x x x
13 BC5_SNORM (RGTC2_SNORM) x x x[g] x x x
14 BC6H_UF16 x x[h] x
15 BC6H_SF16 x x[h] x
16 BC7_UNORM x x[h] x
17 EAC_SNORM, 1 component x
18 EAC_SNORM, 2 components x
19 ETC2 + punch-through alpha x
20 ASTC 3D LDR
21 ASTC 3D HDR
22 ASTC 2D LDR x[e] x[e] x[e]
23 ASTC 2D HDR
24 – 31 Reserved

Key
   [a]   Enable for GL_OES_compressed_ETC1_RGB8_texture
   [b]   Enable for GL_EXT_texture_compression_dxt1
   [c]   Enable for GL_ANGLE_texture_compression_dxt3
   [d]   Enable for GL_ANGLE_texture_compression_dxt5
   [e]   Enable for GL_KHR_texture_compression_astc_ldr
   [f]   Enable for GL_EXT_texture_compression_s3tc
   [g]   Enable for GL_EXT_texture_compression_rgtc
   [h]   Enable for GL_ARB_texture_compression_bptc

Additional documentation

For further details, please see the following documents.

THIS END USER LICENCE AGREEMENT (“LICENCE”) IS A LEGAL AGREEMENT BETWEEN YOU (EITHER A SINGLE INDIVIDUAL, OR SINGLE LEGAL ENTITY) AND ARM LIMITED (“ARM”) FOR THE USE OF THE DELIVERABLES ACCOMPANYING THIS LICENCE. ARM IS ONLY WILLING TO LICENSE THE DELIVERABLES TO YOU ON CONDITION THAT YOU ACCEPT ALL OF THE TERMS IN THIS LICENCE. BY CLICKING “I AGREE” OR BY INSTALLING OR OTHERWISE USING OR COPYING THE DELIVERABLES YOU INDICATE THAT YOU AGREE TO BE BOUND BY ALL THE TERMS OF THIS LICENCE. IF YOU DO NOT AGREE TO THE TERMS OF THIS LICENCE, ARM IS UNWILLING TO LICENSE THE DELIVERABLES TO YOU AND YOU MAY NOT INSTALL, USE OR COPY THE DELIVERABLES, BUT YOU SHOULD PROMPTLY RETURN THE DELIVERABLES TO YOUR SUPPLIER AND ASK FOR A REFUND OF ANY LICENCE FEE PAID.

“Juno ARM Development Platform” means a hardware development board purchased directly from ARM or its authorised distributors.

“Deliverables”; means any software, firmware, boardfiles, data and documentation accompanying this Licence, any printed, electronic or online documentation supplied with it, and any updates, patches and modifications ARM may make available to you under the terms of this Licence, in all cases relating to the supporting deliverables for the Juno ARM Development Platform.

“Separate Files” means the separate files identified in Part D of the Schedule.

1. LICENCE GRANTS.

(i) DELIVERABLES: ARM hereby grants to you, subject to the terms and conditions of this Licence, a non-exclusive, non-transferable licence solely for use on a Juno ARM Development Platform and only for the purposes of your internal development, testing and debugging of software applications that are designed to run solely on microprocessors manufactured under licence from ARM, to:

(a) use and copy the Deliverables identified in Part A of the Schedule;

(b) use, copy and modify the Deliverables identified in Part B and Part C of the Schedule;

(c) distribute and sub-license to third parties the right to use, copy and modify the Deliverables identified in Part C(i) of the Schedule, or your derivatives thereof, as part of your own products (“Licensed Products”) provided you comply with the terms of Clause 1(ii);

(d) permit either or both your customers and your authorised distributors to redistribute the Deliverables identified in Part C(i) of the Schedule, or your derivatives thereof, solely as part of Licensed Products developed by you or your permitted users (identified in clause 2 paragraph three below).

Except as permitted by clause 1(i)(b) above, you shall not modify the Deliverables. Except as permitted by clauses 1(i)(c) and 1(i)(d) above, you shall not redistribute any of the Deliverables.

(ii) FURTHER CONDITIONS APPLICABLE TO REDISTRIBUTION AND SUB-LICENSING: If you choose to redistribute the Deliverables identified in Part C(i) of the Schedule (“Example Code”) you agree: (a) to ensure that they are licensed for use only as part of Licensed Products and only on microprocessors manufactured or simulated under licence from ARM; (b) not to use ARM’s or any of its licensors names, logos or trademarks to market the Licensed Products; (c) to include valid copyright notices on the Licensed Products, and preserve any copyright notices which are included with, or in, the Example Code; (d) to comply with all the other terms of this Licence; and (e) to ensure that any further redistribution is limited to redistribution by either or both your customers and your authorised distributors only as part of Licensed Products developed by you or your permitted users and only for use on microprocessors manufactured or simulated under licence from ARM and that your customers and authorised distributors comply with the terms of this clause 1(ii).

2. RESTRICTIONS ON USE OF THE DELIVERABLES.

COPYING: You shall not use or copy the Deliverables except as expressly authorised in this Licence. You may make one additional copy of the delivered Deliverables media or image for backup or archival purposes.

PERMITTED USERS: The Deliverables shall be used only by your employees, or by your bona fide sub-contractors for whose acts and omissions you hereby agree to be responsible to ARM to the same extent as you are for any acts and omissions of your employees, and provided always that such sub-contractors; (i) work only onsite at your premises; (ii) comply with the terms of this Licence; (iii) are contractually obligated to use the Deliverables only for your benefit, and (iv) agree to assign all their work product and any rights they create therein in the supply of such work to you. Only the single individual, company or other legal entity to whom ARM is supplying this Licence may use the Deliverables. Except as provided in this clause, you shall not allow third parties (including but not limited to any subsidiary, parent or affiliated companies, or offsite contractors you may have) to use the Deliverables unless ARM specifically agrees otherwise with you on a case by case basis.

NO REMOTE USE: The Deliverables shall only be used onsite at your premises and only for your benefit.

MULTIPLE VERSIONS: The media on which the Deliverables resides may contain more than one version of the Deliverables, each of which is compatible with a different operating system (such as Microsoft Windows XP Professional and Red Hat Linux).

ACADEMIC OR EDUCATIONAL USERS ONLY: If you or your employer or institution paid academic or educational pricing for the Deliverables, or the Deliverables are identified as an academic or educational version (together “Academic Software”), then notwithstanding anything else in this Licence, YOU AGREE TO USE THE ACADEMIC SOFTWARE ONLY FOR ACADEMIC, NON-COMMERCIAL PURPOSES, AND ARM DOES NOT GRANT YOU ANY RIGHTS TO DISTRIBUTE OR SUB-LICENSE ANY APPLICATIONS DEVELOPED USING THE ACADEMIC SOFTWARE UNDER THIS LICENCE.

REVERSE ENGINEERING: Except to the extent that such activity is permitted by applicable law you shall not reverse engineer, decompile or disassemble any of the Deliverables. If the Deliverables were provided to you in Europe you shall not reverse engineer, decompile or disassemble any of the Deliverables for the purposes of error correction.

BENCHMARKING: This licence does not prevent you from using the Deliverables for internal benchmarking purposes. However, you shall treat any and all benchmarking data, and any other results of your use or testing of the Deliverables which are indicative of performance, efficacy, reliability or quality, as confidential information and you shall not disclose such information to any third party without the express written permission of ARM.

RESTRICTIONS ON TRANSFER OF LICENSED RIGHTS: The rights granted to you under this Licence may not be assigned, sublicensed or otherwise transferred by you to any third party without the prior written consent of ARM. An assignment shall be deemed to include, without limitation; (i) any transaction or series of transactions whereby a third party acquires, directly or indirectly, the power to control the management and policies of you, whether through the acquisition of voting securities, by contract or otherwise; or (ii) the sale of more than fifty percent (50%) of the your assets whether in a single transaction or series of transactions. You shall not rent or lease the Deliverables. You shall not share the Deliverables with contractors (except as identified in the 'PERMITTED USERS’ clause above) or other third parties.

COPYRIGHT AND RESERVATION OF RIGHTS: The Deliverables are owned by ARM or its licensors and are protected by copyright and other intellectual property laws and international treaties. The Deliverables are licensed not sold. You acquire no rights to the Deliverables other than as expressly provided by this Licence. You shall not remove from the Deliverables any copyright notice or other notice and shall ensure that any such notice is reproduced in any copies of the whole or any part of the Deliverables made by you or your permitted users.

3. SUPPORT AND MAINTENANCE.

If you purchased the Deliverables directly from ARM, and you are not receiving them as an update or upgrade or as Academic Software (defined in Clause 2), you are entitled to reasonable support and maintenance for the Deliverables for the period of one (1) year from the date of purchase. The support will be provided on any version of the Deliverables which, at the date of your support request, are either; (a) the current version made generally available by ARM; or (b) the previous version made generally available by ARM at some time during the previous ninety (90) days.

Support will be provided by telephone, email or other written format designated by ARM, prioritised at ARM’s discretion, and may not be used as a substitute for training or as additional resource for your programming projects. Maintenance will be provided in the form of upgrades, updates and patch releases to the Deliverables as and when they are made generally available from ARM.

ARM’s obligation under this Clause 3 is limited to the provision of support and maintenance to you and ARM is under no obligation to provide any support and maintenance to any third parties under this Licence. If you purchase support and maintenance for additional years it will be provided pursuant to this Clause 3 and will be subject to the terms and conditions of this Licence.

If; (i) you obtained the Deliverables from an ARM authorised reseller or other third party; (ii) Deliverables were provided free of charge or for evaluation; or (iii) it is Academic Software, you are not entitled to any support for the Deliverables from ARM, but ARM may, at its sole discretion provide limited support to you. The vendor of the Deliverables may or may not offer support to you for the Deliverables. Please refer to the Technical Support area of http://www.arm.com for contact details for ARM’s support service and (if applicable) other authorised support channels. ARM shall be under no obligation to provide support in respect of any modifications (where permitted) to the Deliverables.

4. CONFIDENTIALITY.

You acknowledge that the Deliverables and any benchmarking data and related information mentioned in Clause 2 contains trade secrets and confidential material, and you agree to maintain all such information in confidence and apply security measures no less stringent than the measures which you apply to protect your own like information, but not less than a reasonable degree of care, to prevent their unauthorised disclosure and use. Subject to any restrictions imposed by applicable law, the period of confidentiality shall be indefinite. You agree that you shall not use any such information other than in normal use of the Deliverables under the licences granted in this Licence.

Notwithstanding the foregoing you may disclose the Deliverables identified in Part C(i) of the Schedule to third parties solely in exercise of the licence rights contained in Clause 1(i)(c) of this Licence.

5. LIMITED WARRANTIES.

For the period of ninety (90) days from the date of receipt by you of the Deliverables, ARM warrants to you that (i) the media on which the Deliverables are provided shall be free from defects in materials and workmanship under normal use; and (ii) the Deliverables will perform substantially in accordance with the accompanying documentation (if any). ARM’s total liability and your exclusive remedy for breach of these limited warranties shall be limited to ARM, at ARM’s option; (a) replacing the defective Deliverables; or (b) using reasonable efforts to correct material, documented, reproducible defects in the Deliverables and delivering such corrected Deliverables to you. Any replacement Deliverables will be warranted for the remainder of the original warranty period or thirty (30) days, whichever is the longer.

EXCEPT AS PROVIDED ABOVE, YOU AGREE THAT THE DELIVERABLES ARE LICENSED “AS IS”, AND THAT ARM EXPRESSLY DISCLAIMS ALL REPRESENTATIONS, WARRANTIES, CONDITIONS OR OTHER TERMS, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON- INFRINGEMENT, SATISFACTORY QUALITY, AND FITNESS FOR A PARTICULAR PURPOSE.

YOU EXPRESSLY ASSUME ALL LIABILITIES AND RISKS, FOR USE OR OPERATION OF SOFTWARE APPLICATIONS, INCLUDING WITHOUT LIMITATION, APPLICATIONS DESIGNED OR INTENDED FOR MISSION CRITICAL APPLICATIONS, SUCH AS PACEMAKERS, WEAPONARY, AIRCRAFT NAVIGATION, FACTORY CONTROL SYSTEMS, ETC. SHOULD THE DELIVERABLES PROVE DEFECTIVE, YOU ASSUME THE ENTIRE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

6. LIMITATION OF LIABILITY.

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL ARM BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING LOSS OF PROFITS) ARISING OUT OF THE USE OR INABILITY TO USE THE DELIVERABLES WHETHER BASED ON A CLAIM UNDER CONTRACT, TORT OR OTHER LEGAL THEORY, EVEN IF ARM WAS ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

ARM does not seek to limit or exclude liability for death or personal injury arising from ARM’s negligence or ARM’s fraud and because some jurisdictions do not permit the exclusion or limitation of liability for consequential or incidental damages the above limitation relating to liability for consequential damages may not apply to you.

NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED IN THIS LICENCE, THE MAXIMUM LIABILITY OF ARM TO YOU IN AGGREGATE FOR ALL CLAIMS MADE AGAINST ARM IN CONTRACT TORT OR OTHERWISE UNDER OR IN CONNECTION WITH THE SUBJECT MATTER OF THIS LICENCE SHALL NOT EXCEED THE GREATER OF; (I) THE TOTAL OF SUMS PAID BY YOU TO ARM (IF ANY) FOR THIS LICENCE; AND (II) $10 USD.

THE EXISTENCE OF MORE THAN ONE CLAIM WILL NOT ENLARGE OR EXTEND THE LIMIT.

7. THIRD PARTY RIGHTS.

The Separate Files are delivered subject to and your use is governed by their own separate licence agreements. This Licence does not apply to such Separate Files and they are not included in the term “Deliverables” under this Licence. You agree to comply with all terms and conditions imposed on you in respect of such Separate Files including those identified in the Schedule (“Third Party Terms”).

ARM HEREBY DISCLAIMS ANY AND ALL WARRANTIES EXPRESS OR IMPLIED FROM ANY THIRD PARTIES REGARDING ANY SEPARATE FILES, ANY THIRD PARTY MATERIALS INCLUDED IN THE DELIVERABLES, ANY THIRD PARTY MATERIALS FROM WHICH THE DELIVERABLES ARE DERIVED (COLLECTIVELYOTHER CODE”), AND THE USE OF ANY OR ALL THE OTHER CODE IN CONNECTION WITH THE DELIVERABLES, INCLUDING (WITHOUT LIMITATION) ANY WARRANTIES OF SATISFACTORY QUALITY OR FITNESS FOR A PARTICULAR PURPOSE.

NO THIRD PARTY LICENSORS OF OTHER CODE SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND WHETHER MADE UNDER CONTRACT, TORT OR OTHER LEGAL THEORY, ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE OTHER CODE OR THE EXERCISE OF ANY RIGHTS GRANTED UNDER EITHER OR BOTH THIS LICENCE AND THE LEGAL TERMS APPLICABLE TO ANY SEPARATE FILES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

8. GOVERNMENT END USERS.

US Government Restrictions: Use, duplication, reproduction, release, modification, disclosure or transfer of the Deliverables is restricted in accordance with the terms of this Licence.

9. TERM AND TERMINATION.

This Licence shall remain in force until terminated by you or by ARM. Without prejudice to any of its other rights if you are in breach of any of the terms and conditions of this Licence then ARM may terminate this Licence immediately upon giving written notice to you. You may terminate this Licence at any time. Upon termination of this Licence by you or by ARM you shall stop using the Deliverables and confidential information and destroy all copies of the Deliverables and confidential information in your possession together with all documentation and related materials. Notwithstanding the foregoing, except where ARM has terminated this Licence for your breach, your rights to distribute the Example Code as part of Licensed Products developed prior to termination shall survive termination of this Licence, subject to the terms of this Licence. The provisions of Clauses 4, 6, 7, 8, 9 and 10 shall survive termination of this Licence.

10. GENERAL.

This Licence is governed by English Law. Except where ARM agrees otherwise in; (i) a written contract signed by you and ARM; or (ii) a written contract provided by ARM and accepted by you, this is the only agreement between you and ARM relating to the Deliverables and it may only be modified by written agreement between you and ARM. This Licence may not be modified by purchase orders, advertising or other representation by any person. If any clause or sentence in this Licence is held by a court of law to be illegal or unenforceable the remaining provisions of this Licence shall not be affected thereby. The failure by ARM to enforce any of the provisions of this Licence, unless waived in writing, shall not constitute a waiver of ARM’s rights to enforce such provision or any other provision of this Licence in the future.

The Deliverables provided under this Licence are subject to U.S. export control laws, including the U.S. Export Administration Act and its associated regulations, and may be subject to export or import regulations in other countries. You agree to comply fully with all laws and regulations of the United States and other countries (“Export Laws”) to assure that the Deliverables, are not (1) exported, directly or indirectly, in violation of Export Laws, either to any countries that are subject to U.S.A. export restrictions or to any end user who has been prohibited from participating in the U.S.A. export transactions by any federal agency of the U.S.A. government; or (2) intended to be used for any purpose prohibited by Export Laws, including, without limitation, nuclear, chemical, or biological weapons proliferation.

To the extent that the provisions contained in this Licence conflict with any provisions of any other licence you have entered with ARM governing the Deliverables the provisions contained in this Licence shall prevail over and shall supersede any such conflicting provisions.

SCHEDULE

Part A

Hardware Binaries:

FPGA bitstream file for any or all of the Hardware Source identified below in this Part A

Software Binaries:

Motherboard configuration controller

Daughterboard configuration controller

Daughterboard Application note SelfTest

SCP firmware

Mali GPU Driver

Documentation:

Documentation, provided as PDF

Hardware Source:

Hardware netlists of the ARM CoreLink peripheral technology and components known as TLX-400, NIC-400, and PL330

Header Files:

Provided as part of and with the Mali GPU Driver

Part B

Wrapper:

Application Note wrapper file provided as hardware source files and netlists.

Part C: Example Code

(i) Platform specific libraries and source code.

(ii) ARM source code of Application note SelfTest.

Part D: Separate Files

A. UEFI firmware, including drivers for third party components licensed to you under BSD 3-Clause.

B. Linux kernel licensed to you under the GNU General Public License version 2.0

To the extent that ARM is obliged to do so, ARM hereby offers to supply the files which are subject to the GNU General Public Licence version 2 (identified above), in source code form, subject to the terms of the GNU General Public License version 2, upon request. This offer is valid for three (3) years from the date of your acceptance of this Licence.

C. ARM Trusted Firmware licensed to you under BSD 3-Clause.

D. ARM Gator Profile driver and daemon licensed to you under the GNU General Public License version 2.0

To the extent that ARM is obliged to do so, ARM hereby offers to supply the files which are subject to the GNU General Public Licence version 2 (identified above), in source code form, subject to the terms of the GNU General Public License version 2, upon request. This offer is valid for three (3) years from the date of your acceptance of this Licence.

/end

ARM contract references: LES-PRE-20435 JUNO ARM DEVELOPMENT PLATFORM DELIVERABLES

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

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/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."