Using the Juno ARMv8-A Development Platform with DS-5 Ultimate Edition

A couple of months ago I posted this blog discussing how to get started with the Fixed Virtual Platform supplied with DS-5 Ultimate Edition. I'm writing this blog as a follow up, as ARM has just released their first ARMv8 Development Platform, Juno. Furthermore, in DS-5 version 5.19 (and later) there is a ready made debug configuration for the Juno Platform. You can download the latest version of DS-5 here. For more on Juno, see other blogs from my colleagues here and here. Linux and Android ports to this board are available via Linaro, and available here. I used the 14.06 Linaro LAMP file system in the examples below, which was the latest available at the time of writing.

One of the best things about using DS-5 is that the look and feel is very consistent, regardless of the type of target you are using. The only notable difference between using DS-5 with the Juno (or any other) platform vs the Fast Model, is in the Debug Configuration Pane.

If necessary, please ensure that you have a valid DS-5 Ultimate Edition license selected, via the Help ARM License Manager → Select the toolkit that you intend to use pulldown:




Let's start with configuring a JTAG based debug connection using DSTREAM. Connect the DSTREAM hardware to the JTAG port at the rear of the Juno platform. Note that if TPIU ("off-chip") trace is needed, you will need to remove the top of the casing to access the trace connectors.

Launch the Eclipse GUI, and select Run Debug Configurations to launch the pane. On the left hand side, select DS-5 Debugger, and click on the New Configuration Button. Give the configuration a meaningful name. You will see a long list of known targets, in what we call the configuration database. Typing "Juno" in the filter window will jump straight to the required configuration database entry, which you can expand like this:


You will notice a wide variety of options here. You will see options to connect to the individual CPUs present in the platform. You also have options to connect to the distinct Cortex-A53 and Cortex-A57 CPU clusters (in an SMP configuration). Finally you have an option to connect to all six application processors in a big.LITTLE configuration. You will need to understand how the platform boots to know which is available and when. Assuming you are using the platform exactly as supplied by ARM, the initial bootloader and UEFI run on Cortex-A53_0 (as labelled above). The Cortex-A57 cluster is held in reset, during this process, and so any attempt to connect to any of the Cortex-A57 processors, including the big.LITTLE configuration, will result in a debugger error. You should select either the Cortex-A53_0 or the Cortex-A53x4 SMP connections. If you are connecting to a fully booted system, you should be able to select any of the options. Note if running Linux, and debug symbols of your kernel are available, you may wish to use the connections listed under "Linux Kernel and/or Device Driver Debug" for enhanced debugger features.

Click the DTSL Options "Edit" button to show the range of different trace configurations available to you. You can enable trace for any or all CPUs that you wish to connect to.


Click the Browse button to locate your DSTREAM unit. Finally, use the File and Debugger tabs to configure your debug session as necessary. Click Apply to save your setup and then OK, to commence the debug session.

Example 1: Debugging the Cortex-M3


Example 2: Debugging the Cortex-A53 cluster (UEFI running on target)


Example 3: Debugging the entire big.LITTLE cluster (Linux running on target).

UPDATE - note if using a later (14.10 or later) Linaro distribution, see here


For Linux Application Debug, the steps are identical to those in my previous blog. I did however spot a problem with the Linux Application Debug option within the Juno configuration database entry, which refers to a AArch32 gdbserver (code on Juno is highly likely to be running in AArch64).


If you attempt to use this configuration (with AArch64 code) you get an unrecoverable error of the form:


! Failed to read state of device gdbserver

! The address "<address>" is invalid

The solution to this is to use the Linux Application Debug Application Debug Connections via AArch64 gdbserver configuration:



DS-5 Ultimate Edition also has full Streamline support for Cortex-A53 and Cortex-A57, Mali-T624, and other system hardware present on Juno. Linaro images support Streamline by default.


Both DS-5 Ultimate Edition v5.19 and the Juno ARM Development Platform are available to order now. The latest update is available here. Please contact your ARM Representative for more information.

  • Why are the only counters available A53?

  • Dear Ronan,

       How do I share data with juno development platfrom board and host system.

    Weather the communication should be via NFS or adb.

    We tried two things,

    1. We connected the juno board via USB configuration port. Then when we did "adb devices" , the emulator/device is not showing.

    Please letus know how to push data into juno board using adb.

    2. We tried the nfs way too.

    We have gone to root@juno: then given the command #ifconfig eth0.

    it shows error "eth0: Cannot assign requested address".

    Please letus know the procedure to push and run the .axf or cross compiled exe on juno android.



  • Dear Ronan,

       We recently got a Juno board. We sucessfully done the setup for android on that.(using the steps given in Setting up Android on Juno)

    We are working on some multimedia application, which we want to port it to juno and see the performnace.

    We have simple c code and handwritten ARMv8/AArch assembly files,

    We could compile and debug the project  on FVP/VE_AEMv8x4 sucessfully.

    Same project we want to run on the juno board to get the actual performance on the target.

    Please help us how to run without DSTREAM.

    Any procedure to cross compile and send the exe to juno board by USB or NFS, if available please letus know.