4

I am trying investigate various inter-core communication mechanism on my Dual core Arm-Cortex Processor. One of the core is running a baremetal application and another one is running Linux operating system. I just came across the remoteproc framework ( rpmsg) and I could not find much information online. Only information i found was http://lwn.net/Articles/489009/ which is quite less to get started. Is there any one who could help me with this?

Nuetrino
  • 1,099
  • 1
  • 14
  • 32
  • do you need a framework to communicate with a dsp? remoteproc looks like for such purpose. – auselen Sep 26 '13 at 11:04
  • No i have just a baremetal application doing just a real time task on one core and the other core is running linux. I need to communicate some information from the Real time task to the a process running linux on the other. I think the framework can be used for this purpose too. – Nuetrino Sep 26 '13 at 11:22
  • You can use the *bus locking* instructions like `ldrex` and `strex` to implement [tag:lockfree] IPC algorithms, if both CPUs support this. Possibly you can find a framework like this. If both CPUs do not support this, then you need some other hardware mechanism that is particular to the **SOC**; not all **Cortex** chips support `strex` and `ldrex`, so we need to know a little more. – artless noise Sep 26 '13 at 13:37
  • Hi Artless Noise, Could you suggest some IPC algorithms or Frameworks which i should look into. I am actually trying to implement a IPC between 2 cores running completely different programs. One is running linux and another is running a bare metal application. I saw this Remoteproc(rpmsg) based communication is used widely in a Asymmetric Multiprocessing set up widely. But there not much papers explaining the same and also how the performance of the same will be. – Nuetrino Oct 02 '13 at 14:08
  • @artlessnoise `{ldr,str}ex` is used in IPC quite often, but it is so low level that has nothing to do with the remoteproc module in Linux kernel. – Grissiom Nov 27 '13 at 13:01
  • @Grissiom That is correct. I was proposing a `{ldr,str}ex` as an alternative to remoteproc. He has a dual core ARM-Cortex and then says he wants Asymmetric Multiprocessing? For example, [Atomic operations in ARM](http://stackoverflow.com/questions/11894059/atomic-operations-in-arm) has information on *inter-cpu* primatives. A simple ring buffer can be used for some IPC schemes. – artless noise Nov 27 '13 at 15:32

2 Answers2

2

I come across the same issue as well. I found some additional resources:

  1. Doc in the kernel tree as always:

    https://www.kernel.org/doc/Documentation/remoteproc.txt

  2. OMAP wiki that gives the overview of the design:

    http://omappedia.org/wiki/Design_Overview_-_RPMsg

BTW. Thanks for the lwn link. That's quite helpful.

Grissiom
  • 11,355
  • 3
  • 18
  • 23
2

Since Xilinx' Zynq SoC also includes 2 ARM Cortex-A9 cores, they have published an application note in which they make a Linux Kernel communicate with a FreeRTOS system via remoteproc/rpmsg. You can find the document here: PDF

Although the document is quite specific, you might be able to pull out some information. You can download the sources here: Sign in to Download File (a Xilinx account is required). The *.bsp file can be renamed to *.tar.gz which can then be extracted.

If you have any further questions, don't hesitate to ask.

Engr Waseem Arain
  • 1,163
  • 1
  • 17
  • 36
sven
  • 371
  • 2
  • 11