The PikeOS variants for MMU- and MPU-based processors can be operated in parallel on the Xilinx Ultrascale+ SoC and communicate seamlessly with each other via intercore communication.
MMU- and MPU-supported Processors
This is not trivial with complex SoCs such as the Xilinx Zynq Ultrascale+ MPSoC, because with the Arm Cortex-A53 cores the working memory management is based on a Memory Management Unit (MMU), while with the Arm Cortex-R5F dual core it is based on a Memory Protection Unit (MPU). The difference between these different memory management systems is that an MMU can be used to convert virtual address areas into any physical address areas. The MMU therefore assigns a concrete address area to a process. A controller with MPU does not have this assignment function. The MPU still provides the protection that one process cannot write to the other in the same memory area. However, without an MMU, each process must know exactly where to link. This is conceptually more complex as each process must be allocated a dedicated memory area. So the RTOS system software must provide the memory allocation API.
Two Worlds
In the previous RTOS and real-time hypervisor landscape, there have been no truly homogeneous solutions for managing such heterogeneous SoC with MMU- and MPU-based controllers. Most OS vendors have developed smaller RTOSs for the controllers with MPU, which have completely different APIs than the RTOS for controllers with MMU. This has also not played a major role so far, since these controllers have mostly been implemented discretely. As a result, RTOS for the MPU-based controllers were also trimmed to a slim footprint and minimal memory usage, which is one reason for these incompatibilities. The importance of this is also shown by the fact that these discrete controllers with MPU were often even programmed "bare metal" when multithreading was not required in order to realize ever smaller footprints with the associated benefits such as saving on licenses, lower hardware costs and easier certifiability. However, with homogeneous OS ecosystems for the development of MMU- and MPU-based SoCs and holistically integrated development environments, programming heterogeneous SoCs can be made much more convenient.
Overcoming heterogeneous OS Installations
With the launch of the PikeOS operating system and hypervisor for MPU in September 2021, the embedded software specialist SYSGO, whose focus is on functionally safe and IT-secure solutions, has now for the first time created such a basis, with which heterogeneous SoCs receive a homogeneous RTOS and real-time hypervisor ecosystem, significantly simplifying programming and payload balancing. PikeOS for MPU was developed for this purpose on the code side based on the PikeOS operating system for MMU-based processors. The APIs for programming applications for processors with MMU or MPU are therefore virtually identical. Essentially, only the memory management API was adapted accordingly. However, the change of an application from an MMU-based to an MPU-based core complex can be handled with a few clicks within a few minutes despite the different memory handling. Even more important is the advantage that code for both core variants (MMU and MPU) can be certified in a similar way. Upcoming certifications of PikeOS for MPU based solutions can therefore build on the SIL 4, DAL A and ASIL D certifications of PikeOS for MMU.
Homogeneous OS Ecosystem for MMU and MPU
As both PikeOS and PikeOS for MPU are sharing important core functions, such as the separation kernel or the time and space partitioning mechanisms, functionally could be kept identical. By strictly separating partitions, the separation kernel enables parallel operation of multiple applications - from simple but highly critical control tasks to complex user programs with many functions. In addition, the separation kernel eliminates the risk of application errors affecting other partitions and applications. The use of the same time and space partitioning mechanisms also brings PikeOS for MPU very close to the ARINC 653 specification for which PikeOS for MMUs was originally developed. This makes PikeOS for MPU suitable even for critical space and avionics applications.
A particularly interesting feature for the efficient development of holistic solutions based on heterogeneous system platforms is the ICCOM (Inter-Core Communication) functionality of both PikeOS derivates: This functionality allows PikeOS instances running on different ARM Cortex A and R cores to communicate with each other via message-based communication channels, regardless of whether the cores run different or same OSes. ICCOM is based on a symmetrical full-duplex data transport layer which guarantees the delivery of messages.
One IDE for all Cores
Starting with version 7.2 of the Eclipse-based CODEO IDE, both operating systems can be used in one integrated development environment (IDE). It can manage the entire software stack of heterogeneous SoCs and its inter-core communication within a single workspace, significantly simplifying the software development process for such complex target systems. The entire development cycle is supported from early QEMU-based system emulation and application simulation to remote debugging and software update mechanisms for deployed systems in the field.
Lauterbach's TRACE32 debug environment also supports combined debugging of MMU- and MPU-based targets. This also means that a TRACE32 hardware setup is sufficient to debug the entire Xilinx Zynq Ultrascale+ MPSoC platform with heterogeneous OS setup. However, one should no longer speak of a heterogeneous OS setup when using both PikeOS operating systems in tandem. It is rather a homogeneous ecosystem for heterogeneous SoCs, which also has a real-time Type-1 hypervisor integrated in both variants, so that multiple time- and memory-isolated, functionally safe applications of this or other OSes can be hosted in appropriately encapsulated virtual machines.
By starting an individual GUI for such OS partitions, software architects can also debug both PikeOS variants simultaneously - including synchronized start-and-stop events. This is especially useful when searching for errors in the communication between the individual subsystems. In addition, TRACE32 can trace the entire system and display graphical diagrams of application and function runtimes. Timing is synchronized, allowing the observation of the timing behavior of both PikeOS and PikeOS for MPU and the measurement of latencies between the two systems, thus facilitating performance balancing.