Arm Community
Arm Community
  • Site
  • User
  • Site
  • Search
  • User
Arm Community blogs
Arm Community blogs
Tools, Software and IDEs blog Booting Linux on the ARMv8-A model provided with DS-5 Ultimate Edition
  • Blogs
  • Mentions
  • Sub-Groups
  • Tags
  • Jump...
  • Cancel
More blogs in Arm Community blogs
  • AI blog

  • Announcements

  • Architectures and Processors blog

  • Automotive blog

  • Embedded and Microcontrollers blog

  • Internet of Things (IoT) blog

  • Laptops and Desktops blog

  • Mobile, Graphics, and Gaming blog

  • Operating Systems blog

  • Servers and Cloud Computing blog

  • SoC Design and Simulation blog

  • Tools, Software and IDEs blog

Tags
  • ds-5
  • Armv8-A
  • ds-5_ultimate_edition
  • fvp
  • Linux
Actions
  • RSS
  • More
  • Cancel
Related blog posts
Related forum threads

Booting Linux on the ARMv8-A model provided with DS-5 Ultimate Edition

Ronan Synnott
Ronan Synnott
May 13, 2014
5 minute read time.

Note this blog is only valid for Linaro distributions up to 2014. Newer distributions support AEMv8 Base Model as supplied with DS-5 5.24 and later. For information on this model, see here.

For instructions on using latest distributions, see here.

ARM has recently launched DS-5 Ultimate Edition which adds support for the latest ARMv8-A Architecture and associated ARM Processors. Included in the package is the ARMv8-A Fixed Virtual Platform (FVP) model, giving you a platform to develop code on in advance of hardware availability. In this blog I will attempt to explain the necessary steps to get a working Linux system running on this platform.

If necessary, 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:

license.png

If you are new to DS-5, we provide some bare-metal examples within DS-5, which you can use to quickly ensure that everything is working correctly.

You should be able to use Import... → General → Existing Projects into Workspace from the File menu to import the fireworks example from the \\DS-5\examples\Bare-metal_examples_ARMv8.zip archive. This contains an already configured debug configuration, allowing you to connect via the Debug Control pane, and run this application on the FVP. As this all works "out-of-the-box", it should be a useful first step for learning the GUI, locating register views etc.

Once you are happy that everything is working, we will now move to install a Linaro Linux distribution to the FVP. The latest ARMv8-A distribution is available here, and is updated approximately monthly. If you simply wish to boot Linux on the platform, you will be able to use the pre-built files. You will need to retrieve the img.axf kernel binary, and the appropriate file system image. There are two options used below, which should be unzipped on the host.

vexpress64-openembedded_minimal-armv8-gcc-<version_and_date>.img.gz is a minimal file system (~80MB)

vexpress64-openembedded_lamp-armv8-gcc-<version_and_date>.img.gz is a fully featured file system (~430MB)

We can launch the model either stand alone, or within the debugger GUI. The procedure is similar for both. To launch stand alone, I recommend creating a batch file, that runs the following command line. Note that this needs to be edited to point to the kernel binary and the file system image used:

<path_to>\DS-5\sw\models\bin\FVP_VE_AEMv8A.exe \

-a <path_to>img.axf \

--parameter motherboard.mmc.p_mmc_file="<path_to>\<unzipped_filesystem_image>.img" \

--parameter motherboard.mmc.card_type=eMMC \

--parameter motherboard.smsc_91c111.enabled=true \

--parameter motherboard.hostbridge.userNetworking=true \

--parameter motherboard.hostbridge.userNetPorts="5555=5555,8080=8080,22=22"

For a description of these options, see the latest FVP documentation. From testing on various machines, it takes about 60-120 seconds to boot the minimal file system image, about 4-7 minutes to boot the full LAMP filesystem.

To launch from the DS-5 debugger, select Debug Configurations... from the Run menu, and click the New launch configuration button in the upper left. Give this configuration a name, and then locate the VE_AEMv8 target. I find it easier to enter this in the Filter window, and the tools will automatically jump to it. Navigate down the tree to Linux Kernel debug, and then Debug ARMAEMv8-A_MP_SMP, to connect to all four CPUs in this model.

You then need to paste the same options above (bar the call to the executable itself) into the Model Parameters window.

Click on the Debugger Pane, and select Connect Only. Click on Debug to connect the debugger, click go, and let the system boot as before. You can now also control execution (start/stop etc) with the debugger.

If you have rebuilt the kernel to include debug information (the pre-built images do not contain debug information), you can stop the target, and now use either the Debug Control pane's Load feature

load file.png

or from the CLI:

add-symbol-file <path_to>\vmlinux

and the debugger will now display the status of all threads running on the target:

Note that all below requires use of the above full featured file system (or an equivalent that you have built yourself).

You can create a Remote System View of the file system, by opening the Remote Systems pane, creating a  (right-click) → New Connection → General → Linux, and set the Hostname to LOCALHOST, and give the connection an arbitrary Connection name (FVP Linux in the below). Then click Next, and select ssh.files in the Configuration section. Click Finish. You will then be able to expand the file system view (set username as root if prompted).

New Connection.pngNew Connection2.pngNew Connection3.png

From this view, you can also right-click on Ssh Terminals, and launch a terminal window within the DS-5 GUI, thus eliminating the need to jump back and forth to the telnet window.

Finally, for completeness, you can also use DS-5 to debug an application on the target. I built the hello.c that is present in this image (gcc -g hello.c) directly on the target. Then I started a gdbserver session with "gdbserver :5555 a.out" (you will notice this port was specified in the model parameters when launching the model). I can then create an Application Debug Configuration, as below, and debug the image.

terminal1.pngdebug config.pngdebug control.png

Alternatively, if building the application on the host, you could use the "download and debug" option, and the debugger would write the image to the target, via the remote system connection.

download and debug1.png
Anonymous
Tools, Software and IDEs blog
  • Python on Arm: 2025 Update

    Diego Russo
    Diego Russo
    Python powers applications across Machine Learning (ML), automation, data science, DevOps, web development, and developer tooling.
    • August 21, 2025
  • Product update: Arm Development Studio 2025.0 now available

    Stephen Theobald
    Stephen Theobald
    Arm Development Studio 2025.0 now available with Arm Toolchain for Embedded Professional.
    • July 18, 2025
  • GCC 15: Continuously Improving

    Tamar Christina
    Tamar Christina
    GCC 15 brings major Arm optimizations: enhanced vectorization, FP8 support, Neoverse tuning, and 3–5% performance gains on SPEC CPU 2017.
    • June 26, 2025