Hi everyone,
I'm trying to understand the architecture underneath normal world and realm world.
So in FVP, I can boot the normal world first, then boot the realm world to run application in it. But by doing so, I can't debug the application since I can only do it in Arm DS.
If I want to create a realm VM, I will need to invoke libraries from RME(RMM) to create a realm world VM and then it counts as running an application in realm world.
My question is:
what's the difference between running an application in realm world in FVP and writing a C++ program using RME libraries but I run the application in normal world in FVP.
Do they count as all running applications in realm world or not?
Much appreciated if anyone can help me!
Have you seen the RME and Arm CCA guides in the Learn the Architecture page? If not, you might them useful as introduction to how RME works and how the CCA software stack is structured.
https://www.arm.com/architecture/learn-the-architecture/a-profile
Shizhe Yang said: what's the difference between running an application in realm world in FVP and writing a C++ program using RME libraries but I run the application in normal world in FVP.
This is going to partly depend on what differences you care about.
At the ISA level, to an application Non-secure and Realm state can look the same. You have the same instructions, that execute the same way, available to you.
I say "can" because it's not just a question of hardware. If you're comparing running your application on the host in Non-secure state to running it on a Realmed VM, then the question is more how different the VM is to the host (libraries, etc..). With that caveat, you can develop something in Non-secure/Normal world and then deploy to a Realm.
Thank you!I'll look into that
The important distinction is where the code is actually executing, not whether it uses RME/RMM libraries. An application running in the Realm world is executing inside a Realm VM, with its execution environment managed through the RMM and isolated from the Normal world.
If you write a C++ program that calls RME/RMM-related libraries but the program itself is running in the Normal world, that doesn't make the application a Realm-world application. The Normal-world program may be acting as a client/manager that requests Realm management operations, but its own execution context remains Normal world.
So, in the FVP case, if your application is actually booted inside a Realm VM and executing there, it counts as running in the Realm world. If the C++ application is running directly in the Normal world and only invokes APIs that ultimately manage a Realm, the C++ application itself is still a Normal-world application. The Realm workload created by it would be the part running in Realm world.