Help / Advice On Creating a Kernel Module

Yello,

I'm running a BF561 and what I'm basically trying to do is allow a Linux program on CoreA to read buffers that are being written to by a bare metal encoder running on CoreB. The buffers and varibles I need to be able to access have fixed memory locations in L3 and L2 Cache, the larger buffers and variables will be read on the Linux side, some of the others will need to be able to change bytes.

Now my main question is where or not it's possible to get the kernel process to pass to the Linux process a pointer so the linux process can read the buffer directly rather then have to copy the data. I know that the kernel module can directly address memory but I don't know how to then pass that to the Linux process. So can someone point me in the right direction, thanks

If it helps the bare metal process is a AD's H.264 encoder, and I need to be able to read the output NAL table and Stream buffer from linux, so they can be transmitted on to an end PC. I'm basically writting a mini ICC.

Kind Regards,

Nathan Skidmore

Parents
  • 0
    •  Analog Employees 
    on Jan 17, 2012 7:52 PM

    You can use ICC/MCAPI available in 2011R1 release to transfer buffer pointer and length between Linux application and bare metal code.

    The Linux application usually allocates this uncached buffers via ICC ioctl() /L2 SRAM system call and queues these buffer pointers to bare metal code’s free buffer list via ICC/MCAPI. After bare metal code remove one buffer pointer from free list and finishes filling it, it notifies Linux application via ICC/MCAPI and continue with next free buffer. After Linux application finishes receiving this buffer, it queues this buffer pointer back to bare metal code via ICC/MCAPI. This loop continue until Linux application notifies the bare metal code to stop running.

    Please refer to the ICC/MCAPI example code under uClinux-dist/user/blkfin-apps/icc_utils/example/ .

    From: Skid analog@sgaur.hosted.jivesoftware.com

    Sent: Wednesday, January 18, 2012 12:25 AM

    To: Zhang, Sonic

    Subject: New message: "Help / Advice On Creating a Kernel Module"

    Analog Devices EngineerZone<http://ez.analog.com/index.jspa>

    Help / Advice On Creating a Kernel Module

    created by Skid<http://ez.analog.com/people/Skid> in Linux Distribution for Blackfin - View the full discussion<http://ez.analog.com/message/40507#40507

Reply
  • 0
    •  Analog Employees 
    on Jan 17, 2012 7:52 PM

    You can use ICC/MCAPI available in 2011R1 release to transfer buffer pointer and length between Linux application and bare metal code.

    The Linux application usually allocates this uncached buffers via ICC ioctl() /L2 SRAM system call and queues these buffer pointers to bare metal code’s free buffer list via ICC/MCAPI. After bare metal code remove one buffer pointer from free list and finishes filling it, it notifies Linux application via ICC/MCAPI and continue with next free buffer. After Linux application finishes receiving this buffer, it queues this buffer pointer back to bare metal code via ICC/MCAPI. This loop continue until Linux application notifies the bare metal code to stop running.

    Please refer to the ICC/MCAPI example code under uClinux-dist/user/blkfin-apps/icc_utils/example/ .

    From: Skid analog@sgaur.hosted.jivesoftware.com

    Sent: Wednesday, January 18, 2012 12:25 AM

    To: Zhang, Sonic

    Subject: New message: "Help / Advice On Creating a Kernel Module"

    Analog Devices EngineerZone<http://ez.analog.com/index.jspa>

    Help / Advice On Creating a Kernel Module

    created by Skid<http://ez.analog.com/people/Skid> in Linux Distribution for Blackfin - View the full discussion<http://ez.analog.com/message/40507#40507

Children
No Data