Home > On-Demand Archives > Talks >
Developing embedded real-time applications with heterogeneous multiprocessing systems
Sergio Prado - Watch Now - EOC 2020 - Duration: 01:02:10
There are a lot of embedded applications that have conflicting requirements like high throughput and data processing, responsive user interface, low-latency operations and determinism to handle hard real-time events. It is very hard (and most of the times impossible) to meet all these requirements with just a single processor.
A common approach to meet these conflicting requirements is using multiple heterogeneous processors, where a high-end processor takes care of general computing like network communication, user interface and data processing, and a low-end processor is responsible to handle low-latency and real-time events. This type of system is called Heterogeneous Multiprocessing System or HMP.
In this session, we will learn all the theory behind the development of embedded applications using heterogeneous multiprocessing systems and put into practice with hands-on demonstrations based on a board with a heterogeneous multicore SoC containing both a Cortex-A and a Cortex-M processor, capable of running multiple operating systems on the different cores.
In the hands-on demonstration, we will learn how to run an RTOS (FreeRTOS) in the Cortex-M processor to handle deterministic and real-time events and report them back to a full-featured OS (GNU/Linux) running on the Cortex-A. We will study how the communication between the cores works and use an implementation of the OpenAMP standard in the hands-on.
In this session, the attendees will understand how a heterogeneous multiprocessing system works and when to use it. They will also learn how to use a heterogeneous multicore SoC and run multiple operating systems on it, understanding how the communication between the cores are implemented in the hardware level, and learning how this communication is abstracted at the software level with the OpenAMP standard.
Hi Cesar!
Unfortunately I don't know such list of SoC vendors, but nowadays many support AMP. For example, one very know platform with AMP support is the Beagleboard/Beaglebone with Cortex-A processor(s) and PRU microcontroller(s).
A very interesting & informative presentation. Thanks Sergio !
Thanks Mustafa! I'm glad you enjoy it!
Many thanks for this very nice presentation and also the demos, Sergio! Regards from Curitiba. ;)
Thanks Hugo!
Several years ago I used TCP/IP over rpmsg between the A9 and M4 cortex.
Hey tcmichals! That's an interesting idea! How was the configuration in the Linux side? Were you able to get a "virtual network interface" for the communication? On the M4 side, did you use LwIP?
Here is the repo: https://github.com/tcmichals/rpmsg-neo
rpmsg_ethernet.c is the Linux interface and the M4 size was done using lwIP. https://github.com/tcmichals/FreeRTOS-Neo/tree/master/apps/rpmsgLwIPTesting
The reason for using standard networking is to allow multiple communication paths, i.e so several threads now can communicate to different Linux applications.
Hello Burak! If you have any question, please let me know!
Hello Sergio. I want to ask something while watching your presentation. After I asked, you give the answer within your presentation and I decided to delete my question. Thanks for your concern.
It was a great presentation btw. Thanks for your effort, I really enjoyed it.
Understood Burak, thanks!
Very informative and interesting. Thanks!
Thanks zerorunn3r!
How does debugging work for heterogeneous multiprocessing systems? Can you debug both cores simultaneously?
Hi Diego! It depends on the hardware, but usually yes. On the i.MX7 both cores have their own JTAG interface connected in a daisy-chained configuration, so you could debug both at the same time. Anyway, if you already have the Linux kernel running on the microprocessor, what you would do is use gdbserver to debug a Linux process on the microprocessor side and JTAG to debug the firmware on the microcontroller side.
Is the OpenAMP framework in Linux kernel upstream?
I'm thinking it might be useful for the PRU processors in the TI AM3358
Yes, it is. And actually it was TI that started it all. :-)
But to have everything working you will need vendor drivers for hardware blocks that makes it possible the communication and the life cycle management of the cores.
Is Linux in control of managing the heterogeneous cores? Is remoteproc the solution?
Hi Drew! The control of the heterogeneous cores actually depends on the hardware implementation. On i.MX7 for example, the Cortex-A7 can control the Cortex-M4, so in this case the Linux kernel have control over the life cycle of the other core. And yes, remoteproc (part of the OpenAMP standard) defines the API for that: https://www.kernel.org/doc/Documentation/remoteproc.txt
Hello all! If you have any question please let me know!
Hi, Sergio. As usual, a great presentation :)
My question is regarding SoC vendors that support OpenAMP: is there a list somewhere of vendors that provides support to this dual microprocessor-microcontroller architecture, or do you know other vendors than Xilinx and NXP? Thanks in advance