Last updated: June 23, 2010

Contents

[hide]

[edit]About SysLink

SysLink is the next generation IPC driver developed for OMAP4 and beyond. SysLink is an evolution of both the previous-generation IPC drivers - DSPBridge and DSPLink. It provides a symmetric IPC interface on both the host processor and remote/slave processors. It is easily scalable to support more than 2 processors. SysLink provides features to control and communicate with slave processors enabling parallel processing for multimedia acceleration. SysLink integrates with D-OMX enabling MPU to offload some OMX components to slave processors.

Some of the key features of SysLink are:

  • Messaging: Ability to exchange fixed size control messages with Co-Processors
  • Dynamic memory management: Ability to dynamically map files to Co-Processor's address space
  • Dynamic loading: Ability to dynamically load new components on Co-Processors at run time
  • Power Management: Static and dynamic power management for DSP
  • Zero-copy shared memory: Ability to "pass" data buffers to other processors by simply providing its location in shared memory.
  • TILER-based memory allocation: Allocate 2-D buffers with mirroring and rotation options, suitable for video
  • Remote function calls: One processor can invoke functions on a remote processor.

[edit]SysLink Architecture

The above diagram shows the components found in SysLink. The two processors shown have slightly different components because one plays the role of the host and one plays the role of the slave. The host thus needs to load a system image onto the slave processor (Loader), get it up and running (ProcMgr), handle the slave virtual memory mapping (IOMMU), etc.

The key component of SysLink is the Remote Command Messaging (RCM) module, which handles remote function calls. Using RCM, a host processor can take advantage of slave processors' multimedia acceleration functions. The host can request the slave to run audio or video processing functions on a data buffer. The host can then proceed to other tasks. By delegating this processing to the specialized remote processors, the system can support high-bandwidth audio and video playback without a performance impact on the core.

[edit]SysLink Usage

The above diagram illustrates the process by which an application on a host processor can execute a function on a slave processor. It is simplified and many details of the process are not shown.

  1. Application calls RCM client object on local processor to request execution of a remote function.
  2. RCM client object passes function request message to remote RCM server through local MessageQ.
  3. Local MessageQ puts message in remote MessageQ's list of received messages.
  4. Local MessageQ requests local Notify module to send notification to remote processor that a message has arrived.
  5. Local Notify module notifies remote Notify module.
  6. Remote Notify module tells Remote MessageQ object to check its list of received messages.
  7. Remote MessageQ object gives remote RCM server the function request message it received.
  8. Remote RCM Server calls remote function.

[edit]Getting Started with SysLink

NOTE: These instructions are to compile branch in kernel-syslink dev.omapzoom project.

The latest SysLink that is available on the kernel-syslink git tree along with the userspace files repository(recommended)

Before proceeding, check for the tools:

Set up a tool chain, the tool chain versions commonly used are Code Sourcery ARM Sourcery G++ 2009q1.

Set cross compile variable.

  1. export CROSS_COMPILE=arm-none-linux-gnueabi-
  2.  
  3. export PATH varible to arm codesourcey cross compiler.
  4. export ARCH=arm

Be sure that you have the mkimage tool visible in the exported PATH, this is generated while compiling u-boot under u-boot/tools folder, you can clone u-boot repository from here.

[edit]Building Kernel Image with SysLink Driver Support (git tree approach)

Clone linux-syslink repository with the following command:

  1. git clone git://dev.omapzoom.org/pub/scm/tisyslink/kernel-syslink.git

Checkout syslink_next branch. syslink_next branch is based on the cutting edge Kernel revision. This tree is based on kernel-omap4-base tree on dev.omapzoom.org, any porting to other kernels may require some fetch and merge.

The user-space Syslink has a dependency on Tiler tree, so make sure you fetch the Tiler changes from Tiler tree [1] before building the SysLink Kernel. If you don't care about working with the latest SysLink version then it is recommended to use the Integration kernel. The Integration kernel has all the dependent Multimedia drivers including Tiler driver [2]

  1. cd kernel-syslink
  2. git checkout -b syslink_next --track origin/syslink_next

Configure your board.

  1. make omap_my_board_defconfig

Select any desired kernel options

  1. make menuconfig

Select from menuconfig the option to enable SysLink driver in the Device Drivers section as shown in the figures below:

SysLink driver options menu: Enable the selected SysLink modules.

Make the Kernel Image after saving your changes in menuconfig.

  1. make uImage

At this point, you should have a uImage. At present building syslink as loadable kernel modules is not supported.

[edit]Build Userspace Files

[edit]Need to check for the following before using autotools

[edit]Tools Prequisites

  • Autoconf version: 2.61 and above.
  • Automake version: 1.9.6 and above.
  • libtool version : 1.5.6 and above.

[edit]Set the following environment variables

  1. export ARCH=arm
  2. export CROSS_COMPILE=arm-none-linux-gnueabi-

Also, point your shell(sh) to bash. It is assumed that the references to sh in this README documents is actually pointing to /bin/bash

[edit]To enable DEBUG Option

You can enable the DEBUG option by uncommenting the following line in the build_directions.sh file.:

  1. ENABLE_DEBUG=--enable-debug

You can also enable the DEBUG option by entering:

  1. ./configure --enable-debug.

Note: please check for ./configure --help before running configure.

[edit]Steps to Build Syslink

  • Clean build:
  1. sh build_directions.sh --clean
  • Normal Build:
  1. sh build_directions.sh
  • Enter the Prefix path, e.g.:
  1. /omap_data/development/projects/userspace-syslink
  • Enter the Tiler-Userspace Path, where you cloned [3], e.g.:
  1. /omap_data/development/projects/tiler-userspace
  • Enter the path to kernel-syslink, e.g.:
  1. /omap_data/development/projects/kernel-syslink
  • Enter the Toolchain Path, e.g.:
  1. /omap_data/omapts/arm-2009q1-203/bin
  • The libmemmgr.so is built and installed in $(PREFIX)/target/lib folder.
  • The Syslink APIs, daemons and samples will be built and installed in $(PREFIX)/target/lib and $(PREFIX)/target/syslink folder, respectively.

[edit]Working with SysLink driver

[edit]Bootargs

Set the following bootargs when working with SysLink IPC.

  1. Bootargs: Make sure to set "mem" option in bootargs 49M less than your total RAM size.
  2. Eg: For a 512M Ram size the mem option should be less than or equal to 463M.
  3.  
  4. SysLink IPC is currently using this 49M for IPC purpose.

Boot your kernel, when you receive the console prompt:

[edit]Booting Ducati Cores

[edit]Booting using SysLink Daemon

syslink_daemon binary is used to load and initialize the Ducati Cores. The images to be be loaded on Ducati Cores should be mentioned as the argument to the syslink_daemon.out binary. The first argument is the image to be loaded on SYS-M3 (Core-0) and the second argument is the image to load on App-M3(Core-1)

  1. ./syslink_daemon.out </binaries/sysm_m3_image> </binaries/app_m3_image>

Full path to the images should be provided.

SysLink Daemon apart from loading images also starts MemMgr server.

The MemMgr server handles the Tiler requests coming from Co-processor. MemMgr server interfaces with the Tiler Driver through MemMgr library. Currently there is a design discussion with DOMX team to push move this MemMgr server to DOMX proxy component.

[edit]SysLink Samples

  1. Coming soon ...

[edit]SysLink Driver Code

The latest SysLink source code exists on the dev.omapzoom Git Tree under drivers/dsp/syslink folder.
syslink_next branch holds the latest code

[edit]User space SysLink libraries and samples

Userspace Git Tree

[edit]Ducati/Tesla IPC Source Code

Ducati/Tesla IPC code is available on GIT Ducati code

[edit]Tools

CodeGen tools download
BIOS download 
XDC download

[edit]SysLink User-space Project

The SysLink user-space project is located at sl_bios_ipc. SysLink related Documents along with BIOS sample images would be made available here.

[edit]SysLink Releases

  • SysLink Kernel should be build from the Integrated Kernel

    • git://dev.omapzoom.org/pub/scm/integration/kernel-omap4.git
  • SysLink Userspace should be build from SysLink userspace GIT tree
    • git://dev.omapzoom.org/pub/scm/tisyslink/userspace-syslink.git
  • SysLink Ducati Binaries used for this released should be picked from userspace project releases
  • Tiler Userspace should be build using Tiler tree
    • git://dev.omapzoom.org/pub/scm/tiler/tiler-userspace.git

Following provides the release information of above SysLink repositories

[edit]L24.8

  • Kernel: branch - L24.8
  • Userspace: branch - syslink-2.0; tag - ti-syslink-mpu-rls-24.8
  • Ducati Images: images
  • Tiler userspace: branch - memmgr_1.0; tag - 24.8

[edit]L24.9

[edit]L24.10

  • Kernel: branch - L24.10
  • Userspace: branch - syslink-2.0; tag - ti-syslink-mpu-rls-24.10
  • Ducati BIOS: ti-bios-ipc-rls-2.2-p1.2
  • Tiler userspace: branch - memmgr_1.0; tag - 24.10.1
  • SysLink Release Notes: release notes

[edit]L24.11

  • Kernel: branch - L24.11
  • Userspace: branch - syslink-2.0; tag - ti-syslink-mpu-rls-24.11
  • Ducati BIOS: ti-bios-ipc-rls-2.3
  • Tiler userspace: branch - memmgr_1.0; tag - 24.11
  • SysLink Release Notes: release notes

[edit]Documents

http://omappedia.org/wiki/Syslink_Project

dm8127之核间通信syslink的更多相关文章

  1. 【DSP开发】硬件信号量在多核处理器核间通信中的应用

    硬件信号量在多核处理器核间通信中的应用 刘德保1,汪安民1,韩道文2 1.同方电子科技有限公司研究所,九江 332009:2.解放军电子工程学院 摘要: 在多核处理器的软件设计中,核间通信机制是关键所 ...

  2. ZYNQ笔记(5):软中断实现核间通信

    ZYNQ包括一个 FPGA 和两个 ARM,多个 ARM 核心相对独立的运行不同的任务,每个核心可能运行不同的操作系统或裸机程序,但是有一个主要核心,用来控制整个系统以及其他从核心的允许.因此我们可以 ...

  3. java多线程与线程间通信

    转自(http://blog.csdn.net/jerrying0203/article/details/45563947) 本文学习并总结java多线程与线程间通信的原理和方法,内容涉及java线程 ...

  4. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

  5. ucos实时操作系统学习笔记——任务间通信(队列)

    ucos操作系统中的queue机制同样使用了event机制来实现,其实和前面的sem,mutex实现类似,所不同的是对sem而言,任务想获得信号量,对mutex而言,任务想获得的是互斥锁.任务间通信的 ...

  6. ucos实时操作系统学习笔记——任务间通信(互斥锁)

    想讲一下ucos任务间通信中的mutex,感觉其设计挺巧妙,同sem一样使用的是event机制实现的,代码不每一行都分析,因为讲的没邵贝贝老师清楚,主要讲一下mutex的内核是如何实现的.可以理解互斥 ...

  7. ucos实时操作系统学习笔记——任务间通信(信号量)

    ucos实时操作系统的任务间通信有好多种,本人主要学习了sem, mutex, queue, messagebox这四种.系统内核代码中,这几种任务间通信机制的实现机制相似,接下来记录一下本人对核心代 ...

  8. 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题

    调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...

  9. 线程间通信 GET POST

    线程间通信有三种方法:NSThread   GCD  NSOperation       进程:操作系统里面每一个app就是一个进程. 一个进程里面可以包含多个线程,并且我们每一个app里面有且仅有一 ...

随机推荐

  1. Jquery重新学习之三[属性addClass(),removeClass(),toggleClass()]

    1:属性.addClass(class|fn)及.removeClass(class|fn) 1.1 .addClass(class) 参数class一个或多个要添加到元素中的CSS类名,请用空格分开 ...

  2. ibatis 调用存储过程

      ibatis 调用存储过程 CreationTime--2018年8月15日19点38分 Author:Marydon 1.返回系统游标集合 第一步:返回值,将返回值封装到HashMap中 < ...

  3. static 成员变量、static 成员函数、类/对象的大小

    一.static 成员变量 对于特定类型的全体对象而言,有时候可能需要访问一个全局的变量.比如说统计某种类型对象已创建的数量. 如果我们用全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量 ...

  4. 我的SpringMvc学习之路之注解

    用注解取代配置文件可降低编程是不必要的麻烦和错误. @Controller  控制器定义 在一个class的上面写上@controller声明此类为控制器类.在配置中*.dispatcher.xml里 ...

  5. 如何在C++中调用C程序

    注意这里的C调用C++或者C++调用C意思是.c文件中调用.cpp文件中代码,或者相反. C++和C是两种完全不同的编译链接处理方式,如果直接在C++里面调用C函数,会找不到函数体,报链接错误. 要解 ...

  6. Mysql 创建表和删除表

    在数据库中创建一张表的基本语法如下: CREATE TABLE tablename (column_name_1 column_type_1 constraints, column_name_2 co ...

  7. 硬盘Raid

    一.raid什么意思? RAID是“Redundant Array of Independent Disk”的缩写,raid什么意思了?说白了,中文翻译过来通俗的讲就是磁盘阵列的意思,也就是说RAID ...

  8. Redis(十九):Redis压力测试工具benchmark

    redis-benchmark使用参数介绍 Redis 自带了一个叫 redis-benchmark 的工具来模拟 N 个客户端同时发出 M 个请求. (类似于 Apache ab 程序).你可以使用 ...

  9. Spring Cloud(八):分布式配置中心服务化和高可用

    在前两篇的介绍中,客户端都是直接调用配置中心的server端来获取配置文件信息.这样就存在了一个问题,客户端和服务端的耦合性太高,如果server端要做集群,客户端只能通过原始的方式来路由,serve ...

  10. max_int和-1

    #include <stdio.h> int main(int argc, char *argv[]) { unsigned ; ) printf("umax:%u == -1\ ...