# [Debug Trusted Firmware-A and the Linux kernel on Arm FVP with Arm Development Studio](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/linux-on-fvp/)

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/linux-on-fvp/)
- [Introduction to Arm Fixed Virtual Platforms (FVPs)](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/linux-on-fvp/intro/)
- [Configure Trusted Firmware-A build flags to include cpu_ops support](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/linux-on-fvp/steps/)
- [Modify the device tree for CPU FVPs](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/linux-on-fvp/modify/)
- [Run the Linux software stack on an FVP](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/linux-on-fvp/run/)
- [Debug the software stack](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/linux-on-fvp/debug/)
- [Next steps](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/linux-on-fvp/_next-steps/)

## About this Learning Path

| Skill level:         | Introductory                |
|----------------------|-----------------------------|
| Reading time:        | 1 hr                        |
| Last updated:        | 13 Aug 2026                 |

| Author:              | Qixiang Xu, Arm            |
|----------------------|-----------------------------|
| Arm IP:              | [Cortex-A](https://support.arm.com/?tab=compute-ip&Product%20Type=Application%20Processors) |
| Tags:                | Embedded Linux, Linux, Arm Development Studio, C, Assembly |

### Who is this for?
This topic is for developers who want to run Linux on Arm Fixed Virtual Platforms (FVPs) and debug both Trusted Firmware-A and the Linux kernel using Arm Development Studio.

### What will you learn?
Upon completion of this Learning Path, you will be able to:
- Boot and run a Linux software stack on an Arm Fixed Virtual Platform (FVP).
- Debug Trusted Firmware-A and the Linux kernel using Arm Development Studio.

### Prerequisites
Before starting, you will need the following:
- A Linux-based x86-64 host computer with Arm Development Studio installed.
- Basic understanding of Assembly and C programming.

### Summary
You’ll boot a Linux software stack on an Arm FVP and debug it with Arm Development Studio. First, you’ll configure Trusted Firmware-A for the target CPU, adjust the device tree, and verify build outputs. Then, you’ll launch the FVP, capture UART logs, create a debug configuration, and debug Trusted Firmware-A and the Linux kernel.

### Frequently asked questions

#### How do I know my Trusted Firmware-A build includes the correct `cpu_ops` support?
Enable the `cpu_ops` framework for your target CPU when building TF-A. If `cpu_ops` is missing, Linux might fail to start. Confirm that the build selects the CPU-specific implementation (for example, `cortex_a55` or `cortex_a53`) from `lib/cpus/aarch64`.

#### What should I change in the device tree for an Arm CPU FVP?
Remove PCI and SMMU nodes and ensure CPU affinity values are set correctly. Leaving unsupported PCI or SMMU entries can cause a kernel panic during boot.

#### What result should I expect in the build output before launching the FVP?
Expect an output directory such as `output/aemfvp-a/aemfvp-a` containing items such as `Image` and `Image.defconfig`, as shown by the `tree` command. Proceed when the expected files and symlinks are present.

#### How do I capture and review the FVP boot log?
Use the provided run command with `<PATH_TO_LOG>` to save UART output. Review the log for normal Linux boot messages and confirm there are no PCI or SMMU-related panics.

#### Which Arm Development Studio version should I use, and how do I start it?
Arm DS `v2022.2` or later is recommended to support DWARF 5 debug information used by GCC 11 and later. Start it with `/opt/arm/developmentstudio-2022.2/bin/armds_ide`, then create a debug configuration to debug Trusted Firmware-A and the Linux kernel.
