This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

EVMK2HX IPC setup/build issues

Other Parts Discussed in Thread: OMAPL138, SYSBIOS

I've been trying to get IPC up and running on the EVMK2HX board, and I'm having quite a few issues.  My configuration is the following:


     mcsdk_linux_3_0_4_18

     ipc_3_0_4_29

     linux kernel and rootfs built from Arago using configs/mcsdk/mcsdk-03.00.04.18-config.txt

I've built the IPC Linux libraries and transferred them to the target, along with the test apps (MesssageQApp, NameServerApp, ping_rpmsg).  I've also transferred lad_tci6638 to /usr/bin and rebooted to ensure that I'm using it.

After booting the target my lad.txt file contains:

Initializing LAD...
    opening FIFO: /tmp/LAD/LADCMDS

I tried running ping_rpmsg and get this:

ping_rpmsg:  AF_RPMSG is 41      <--  I added this
Connecting to address 0x33 on vprocId 0
connect failed: Invalid argument (22)

I'm using linux kernel 3.10.10, and my rpmsg.h matches the 41 for AF_RPMSG

Running MessageQApp produces this:

Ipc_start: NameServer_setup() failed: -1
Using numLoops: 100; procId : 1
Ipc_start failed: status = -1

And updated lad.txt with this:

Initializing LAD...
    opening FIFO: /tmp/LAD/LADCMDS
Retrieving command...

LAD_CONNECT:
    client FIFO name = /tmp/LAD/1830
    client PID = 1830
    assigned client handle = 0
    FIFO /tmp/LAD/1830 created
    FIFO /tmp/LAD/1830 opened for writing
    sent response
DONE
Retrieving command...
LAD_MULTIPROC_GETCONFIG: calling MultiProc_getConfig()...
MultiProc_getConfig() - 9 procs
    Proc 0 - "HOST"
    Proc 1 - "CORE0"
    Proc 2 - "CORE1"
    Proc 3 - "CORE2"
    Proc 4 - "CORE3"
    Proc 5 - "CORE4"
    Proc 6 - "CORE5"
    Proc 7 - "CORE6"
    Proc 8 - "CORE7"
    status = 0
DONE
Sending response...
Retrieving command...
LAD_NAMESERVER_SETUP: calling NameServer_setup()...
NameServer_setup: entered, refCount=0
NameServer_setup: created send socket: 5
NameServer_setup: connect failed: 22, Invalid argument
    closing send socket: 5

Then I thought that the problem was due to not having any DSP application running.  So I tried to build the IPC DSP test apps, but I can't get them to build.  I updated products.mak:

DEPOT ?= /opt
PLATFORM ?= tci6638
TOOLCHAIN_LONGNAME ?= arm-linux-gnueabihf
TOOLCHAIN_INSTALL_DIR ?= $(DEPOT)/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux
TOOLCHAIN_PREFIX ?= $(TOOLCHAIN_INSTALL_DIR)/bin/$(TOOLCHAIN_LONGNAME)-
KERNEL_INSTALL_DIR ?= /home/bstupar/KeystoneDevelopment/oe-layersetup/build/arago-tmp-external-linaro-toolchain/work/keystone_evm-oe-linux-gnueabi/linux-keystone/3.10.10-r7b+gitrAUTOINC+07176920ed86dfdae97d272f574c3e2760d687ef/image/usr/src/kernel
XDC_INSTALL_DIR ?= $(DEPOT)/ti/xdctools_3_25_05_94
BIOS_INSTALL_DIR ?= $(DEPOT)/bios_6_37_00_20
ti.targets.elf.C66 ?= /opt/ti/ccsv5/tools/compiler/c6000_7.4.4/



And built:   make -f ipc-bios.mak all

But continually get this:

building ipc packages ...
making all: Fri Jul 25 12:03:42 EDT 2014 ...
======== .interfaces [./packages/ti/configs/omap54xx/] ========
======== .interfaces [./packages/ti/configs/vayu/] ========
======== .interfaces [./packages/ti/grcm/] ========
======== .interfaces [./packages/ti/ipc/] ========
======== .interfaces [./packages/ti/ipc/family/omap54xx/] ========
======== .interfaces [./packages/ti/ipc/family/omapl138/] ========
generating interfaces for package ti.ipc.family.omapl138 (because package/package.xdc.inc is older than package.xdc) ...
    translating VirtQueue
"ti/ipc/family/omapl138/VirtQueue.xdc", line 89:  can't find imported unit: ti.sysbios.knl.Swi (ti.sysbios.knl.Swi)
error:  compilation of package.xdc failed: parser failed
gmake[1]: *** [package/package.xdc.inc] Error 1
gmake: *** [packages/ti/ipc/family/omapl138/,.interfaces] Error 2
make: *** [all] Error 2

I also tried building messageq_single.c myself in a CCS project using rpmsg_transport.cfg, but generates linker errors.  I'm clearly not including the right library, but don't know which one that should be:

 undefined           first referenced     
  symbol                 in file          
 ---------           ----------------     
 MessageQ_create     ./messageq_single.obj
 MessageQ_get        ./messageq_single.obj
 MessageQ_getQueueId ./messageq_single.obj
 MessageQ_put        ./messageq_single.obj
 MultiProc_getName   ./messageq_single.obj
 MultiProc_self      ./messageq_single.obj

========


So having said all of that:

1.  Where am I going wrong ?  I've tried to follow the IPC Installation Linux Guide and the IPC User's Guide, but following those gets me the build error above.  I've tried most of what I've found on the forum in other posts, but can't make any progress

2.  Is there a *SIMPLE* was to get communication between ARM and DSP.  I thought IPC would be it, but it seems awfully complicated just to get a simple communication path set up.  I might feel differently if issuing 'make' built the DSP apps, and they "just worked".  All I think I really need is a simple TCP socket connection to send messages on.  Is there a simple way to get that ?

Thanks,

Brian

  • As an update, I managed to get messageq_single.c to build.  I ran it on DSP0 using mpmcl, then ran MessageQApp again.  This time it produced:

    Initializing LAD...
        opening FIFO: /tmp/LAD/LADCMDS
    Retrieving command...

    LAD_CONNECT:
        client FIFO name = /tmp/LAD/1869
        client PID = 1869
        assigned client handle = 0
        FIFO /tmp/LAD/1869 created
        FIFO /tmp/LAD/1869 opened for writing
        sent response
    DONE
    Retrieving command...
    LAD_MULTIPROC_GETCONFIG: calling MultiProc_getConfig()...
    MultiProc_getConfig() - 9 procs
        Proc 0 - "HOST"
        Proc 1 - "CORE0"
        Proc 2 - "CORE1"
        Proc 3 - "CORE2"
        Proc 4 - "CORE3"
        Proc 5 - "CORE4"
        Proc 6 - "CORE5"
        Proc 7 - "CORE6"
        Proc 8 - "CORE7"
        status = 0
    DONE
    Sending response...
    Retrieving command...
    LAD_NAMESERVER_SETUP: calling NameServer_setup()...
    NameServer_setup: entered, refCount=0
    NameServer_setup: created send socket: 5
    NameServer_setup: created recv socket: 6
    NameServer_setup: created send socket: 7
    NameServer_setup: connect failed: 22, Invalid argument
        closing send socket: 7

    That seems to *maybe* rule out not having a DSP app running to send to. 

  • Brian Stupar said:
    "ti/ipc/family/omapl138/VirtQueue.xdc", line 89:  can't find imported unit: ti.sysbios.knl.Swi (ti.sysbios.knl.Swi)
    error:  compilation of package.xdc failed: parser failed

    That error is telling me the IPC build scripts can't find BIOS, so your BIOS_INSTALL_DIR is probably incorrect.  Do you have BIOS installed in /opt/bios_6_37_00_20?  If not, be sure to set BIOS_INSTALL_DIR correctly.

    Let's get the IPC tests built and loaded first, and go from there.

    Chris

  • Chris,

    I'm reading this from home, but I can see the first problem based on your reply.  My BIOS is installed in /opt/ti/bios_6_37_00_20, not /opt/bios_6_37_00_20.  I'll fix that first thing Monday morning, then re-run the IPC tests to see if that makes a difference.  I'll post back the results on Monday morning.

    Thanks,

    Brian

  • Chris,


    After fixing the BIOS path in my products.mak file I'm able to build all of the IPC examples and libraries.  I then did the following:


    make -f ipc-linux.mak prefix=/opt/ti_ipc

    scp <all files in /opt/ti_ipc/bin> <target>:/home/root

    scp <all files in /opt/ti_ipc/lib> <target>:/usr/lib

    scp /opt/ti_ipc/lad_tci6638 <target>:/usr/bin

    After rebooting the target and re-running the tests I get this:

    root@keystone-evm:~# mpmcl load dsp0 messageq_single.xe66
    load succeeded
    root@keystone-evm:~# mpmcl run dsp0
    run succeeded
    root@keystone-evm:~# cat /sys/kernel/debug/remoteproc/remoteproc0/trace0
    3 Resource entries at 0x800000
    messageq_single.c:main: MultiProc id = 1
    registering rpmsg-proto service on 61 with HOST
    tsk1Fxn: created MessageQ: SLAVE_CORE0; QueueID: 0x10000
    Awaiting sync message from host...

    root@keystone-evm:~# ./MessageQApp
    Ipc_start: NameServer_setup() failed: -1
    Using numLoops: 100; procId : 1
    Ipc_start failed: status = -1
    root@keystone-evm:~# cat /var/volatile/tmp/LAD/
    1834     LADCMDS  lad.txt  
    root@keystone-evm:~# cat /var/volatile/tmp/LAD/lad.txt

    Initializing LAD...
        opening FIFO: /tmp/LAD/LADCMDS
    Retrieving command...

    LAD_CONNECT:
        client FIFO name = /tmp/LAD/1834
        client PID = 1834
        assigned client handle = 0
        FIFO /tmp/LAD/1834 created
        FIFO /tmp/LAD/1834 opened for writing
        sent response
    DONE
    Retrieving command...
    LAD_MULTIPROC_GETCONFIG: calling MultiProc_getConfig()...
    MultiProc_getConfig() - 9 procs
        Proc 0 - "HOST"
        Proc 1 - "CORE0"
        Proc 2 - "CORE1"
        Proc 3 - "CORE2"
        Proc 4 - "CORE3"
        Proc 5 - "CORE4"
        Proc 6 - "CORE5"
        Proc 7 - "CORE6"
        Proc 8 - "CORE7"
        status = 0
    DONE
    Sending response...
    Retrieving command...
    LAD_NAMESERVER_SETUP: calling NameServer_setup()...
    NameServer_setup: entered, refCount=0
    NameServer_setup: created send socket: 5
    NameServer_setup: created recv socket: 6
    NameServer_setup: created send socket: 7
    NameServer_setup: connect failed: 22, Invalid argument
        closing send socket: 7
    NameServer_setup: created recv socket: 7
    NameServer_setup: bind failed: 22, Invalid argument
        closing recv socket: 7
    NameServer_setup: created send socket: 7
    NameServer_setup: connect failed: 22, Invalid argument
        closing send socket: 7
    NameServer_setup: created recv socket: 7
    NameServer_setup: bind failed: 22, Invalid argument
        closing recv socket: 7
    NameServer_setup: created send socket: 7
    NameServer_setup: connect failed: 22, Invalid argument
        closing send socket: 7
    NameServer_setup: created recv socket: 7
    NameServer_setup: bind failed: 22, Invalid argument
        closing recv socket: 7
    NameServer_setup: created send socket: 7
    NameServer_setup: connect failed: 22, Invalid argument
        closing send socket: 7
    NameServer_setup: created recv socket: 7
    NameServer_setup: bind failed: 22, Invalid argument
        closing recv socket: 7
    NameServer_setup: created send socket: 7
    NameServer_setup: connect failed: 22, Invalid argument
        closing send socket: 7
    NameServer_setup: created recv socket: 7
    NameServer_setup: bind failed: 22, Invalid argument
        closing recv socket: 7
    NameServer_setup: created send socket: 7
    NameServer_setup: connect failed: 22, Invalid argument
        closing send socket: 7
    NameServer_setup: created recv socket: 7
    NameServer_setup: bind failed: 22, Invalid argument
        closing recv socket: 7
    NameServer_setup: created send socket: 7
    NameServer_setup: connect failed: 22, Invalid argument
        closing send socket: 7
    NameServer_setup: created recv socket: 7
    NameServer_setup: bind failed: 22, Invalid argument
        closing recv socket: 7
    NameServer_setup: creating listener thread
    NameServer_setup: exiting, refCount=1
        status = -1
    listener_cb: Entered Listener thread.
    NameServer: waiting for unblockFd: 2, and socks: maxfd: 7
    DONE
    Sending response...
    Retrieving command...
        EOF detected on FIFO, closing FIFO: /tmp/LAD/LADCMDS

        opening FIFO: /tmp/LAD/LADCMDS

    =======================

    What should I check next ?

    Brian

  • I also tried adding rproc_mem=16M@0xC3000000 to the kernel boot args in u-boot - no change.

    Also, I get the following output on the serial port if it helps:

    keystone-evm login: [   59.151946]  remoteproc0: powering up 2620040.dsp0
    [   59.156774] virtio_rpmsg_bus virtio0: rpmsg host is online
    [   59.156805] virtio_rpmsg_bus virtio0: creating channel rpmsg-proto addr 0x3d
    [   59.156869] rpmsg_proto rpmsg0: inserting rpmsg src: 1024, dst: 61
    [   59.172088]  remoteproc0: registered virtio0 (type 7)

  • And a little more information:

    MessageQBench also fails with (the same as MessageQApp):

    root@keystone-evm:~# ./MessageQBench
    Ipc_start: NameServer_setup() failed: -1
    Using numLoops: 1000; payloadSize: 8, procId : 1
    Ipc_start failed: status = -1

    If I run NameserverApp after MessageQApp or MessageQBench it fails with:

    root@keystone-evm:~# ./NameServerApp
    Entered NameServerApp_startup
    LAD_connect() failed: 4
    Entered NameServerApp_execute
    Leaving NameServerApp_execute

    Entered NameServerApp_shutdown()
    Leave NameServerApp_shutdown()

    But if I run NameserverApp first:

    root@keystone-evm:~# ./NameServerApp
    Entered NameServerApp_startup
    LAD_connect() succeeded: ladHandle=0
    Calling NameServer_setup()...
    params.maxValueLen=0
    params.maxNameLen=16
    params.checkExisting=1
    Created NameServer 'MyNS'
    Created NameServer 'MyNS2'
    NameServer_addUInt32() returned 0x18598
    Trying to add same key (should fail)...
        ...got expected Failure from NameServer_addUInt32()
    NameServer_getUInt32() returned 0, val=0xdeadbeef (was 0x00c0ffee)
    Removing 0xdeadbeef w/ NameServer_remove()...
    NameServer_addUInt32(0xdeadc0de) succeeded
    NameServer_getUInt32() returned 0, val=0xdeadc0de (was 0x00c0ffee)
    Removing 0xdeadc0de w/ NameServer_removeEntry()...
    NameServer_addUInt32(0x0badc0de) succeeded
    NameServer_getUInt32() returned 0, val=0xbadc0de (was 0x00c0ffee)
    NameServer_remove(Key) succeeded
    NameServer_addUInt32(foobar0, 0xbadc0de) succeeded
    NameServer_getUInt32(foobar0) returned 0, val=0xbadc0de (was 0x00c0ffee)
    NameServer_addUInt32(foobar1, 0xbadc0df) succeeded
    NameServer_getUInt32(foobar1) returned 0, val=0xbadc0df (was 0x00c0ffee)
    NameServer_addUInt32(foobar2, 0xbadc0e0) succeeded
    NameServer_getUInt32(foobar2) returned 0, val=0xbadc0e0 (was 0x00c0ffee)
    NameServer_addUInt32(foobar3, 0xbadc0e1) succeeded
    NameServer_getUInt32(foobar3) returned 0, val=0xbadc0e1 (was 0x00c0ffee)
    NameServer_addUInt32(foobar4, 0xbadc0e2) succeeded
    NameServer_getUInt32(foobar4) returned 0, val=0xbadc0e2 (was 0x00c0ffee)
    NameServer_addUInt32(foobar5, 0xbadc0e3) succeeded
    NameServer_getUInt32(foobar5) returned 0, val=0xbadc0e3 (was 0x00c0ffee)
    NameServer_addUInt32(foobar6, 0xbadc0e4) succeeded
    NameServer_getUInt32(foobar6) returned 0, val=0xbadc0e4 (was 0x00c0ffee)
    NameServer_addUInt32(foobar7, 0xbadc0e5) succeeded
    NameServer_getUInt32(foobar7) returned 0, val=0xbadc0e5 (was 0x00c0ffee)
    NameServer_addUInt32(foobar8, 0xbadc0e6) succeeded
    NameServer_getUInt32(foobar8) returned 0, val=0xbadc0e6 (was 0x00c0ffee)
    NameServer_addUInt32(foobar9, 0xbadc0e7) succeeded
    NameServer_getUInt32(foobar9) returned 0, val=0xbadc0e7 (was 0x00c0ffee)
    NameServer_remove(foobar0) succeeded
    NameServer_remove(foobar1) succeeded
    NameServer_remove(foobar2) succeeded
    NameServer_remove(foobar3) succeeded
    NameServer_remove(foobar4) succeeded
    NameServer_remove(foobar5) succeeded
    NameServer_remove(foobar6) succeeded
    NameServer_remove(foobar7) succeeded
    NameServer_remove(foobar8) succeeded
    NameServer_remove(foobar9) succeeded
    NameServer_addUInt32() returned 0x18820
    Trying to add same key (should fail)...
        ...got expected Failure from NameServer_addUInt32()
    NameServer_getUInt32() returned 0, val=0xdeadbeef (was 0x00c0ffee)
    Removing 0xdeadbeef w/ NameServer_remove()...
    NameServer_addUInt32(0xdeadc0de) succeeded
    NameServer_getUInt32() returned 0, val=0xdeadc0de (was 0x00c0ffee)
    Removing 0xdeadc0de w/ NameServer_removeEntry()...
    NameServer_addUInt32(0x0badc0de) succeeded
    NameServer_getUInt32() returned 0, val=0xbadc0de (was 0x00c0ffee)
    NameServer_remove(Key) succeeded
    NameServer_addUInt32(foobar0, 0xbadc0de) succeeded
    NameServer_getUInt32(foobar0) returned 0, val=0xbadc0de (was 0x00c0ffee)
    NameServer_addUInt32(foobar1, 0xbadc0df) succeeded
    NameServer_getUInt32(foobar1) returned 0, val=0xbadc0df (was 0x00c0ffee)
    NameServer_addUInt32(foobar2, 0xbadc0e0) succeeded
    NameServer_getUInt32(foobar2) returned 0, val=0xbadc0e0 (was 0x00c0ffee)
    NameServer_addUInt32(foobar3, 0xbadc0e1) succeeded
    NameServer_getUInt32(foobar3) returned 0, val=0xbadc0e1 (was 0x00c0ffee)
    NameServer_addUInt32(foobar4, 0xbadc0e2) succeeded
    NameServer_getUInt32(foobar4) returned 0, val=0xbadc0e2 (was 0x00c0ffee)
    NameServer_addUInt32(foobar5, 0xbadc0e3) succeeded
    NameServer_getUInt32(foobar5) returned 0, val=0xbadc0e3 (was 0x00c0ffee)
    NameServer_addUInt32(foobar6, 0xbadc0e4) succeeded
    NameServer_getUInt32(foobar6) returned 0, val=0xbadc0e4 (was 0x00c0ffee)
    NameServer_addUInt32(foobar7, 0xbadc0e5) succeeded
    NameServer_getUInt32(foobar7) returned 0, val=0xbadc0e5 (was 0x00c0ffee)
    NameServer_addUInt32(foobar8, 0xbadc0e6) succeeded
    NameServer_getUInt32(foobar8) returned 0, val=0xbadc0e6 (was 0x00c0ffee)
    NameServer_addUInt32(foobar9, 0xbadc0e7) succeeded
    NameServer_getUInt32(foobar9) returned 0, val=0xbadc0e7 (was 0x00c0ffee)
    NameServer_remove(foobar0) succeeded
    NameServer_remove(foobar1) succeeded
    NameServer_remove(foobar2) succeeded
    NameServer_remove(foobar3) succeeded
    NameServer_remove(foobar4) succeeded
    NameServer_remove(foobar5) succeeded
    NameServer_remove(foobar6) succeeded
    NameServer_remove(foobar7) succeeded
    NameServer_remove(foobar8) succeeded
    NameServer_remove(foobar9) succeeded
    Deleting nsHandle and nsHandle2...
    params.maxValueLen=0
    params.maxNameLen=16
    params.checkExisting=1
    Created NameServer 'MyNS'
    Created NameServer 'MyNS2'
    NameServer_addUInt32() returned 0x18598
    Trying to add same key (should fail)...
        ...got expected Failure from NameServer_addUInt32()
    NameServer_getUInt32() returned 0, val=0xdeadbeef (was 0x00c0ffee)
    Removing 0xdeadbeef w/ NameServer_remove()...
    NameServer_addUInt32(0xdeadc0de) succeeded
    NameServer_getUInt32() returned 0, val=0xdeadc0de (was 0x00c0ffee)
    Removing 0xdeadc0de w/ NameServer_removeEntry()...
    NameServer_addUInt32(0x0badc0de) succeeded
    NameServer_getUInt32() returned 0, val=0xbadc0de (was 0x00c0ffee)
    NameServer_remove(Key) succeeded
    NameServer_addUInt32(foobar0, 0xbadc0de) succeeded
    NameServer_getUInt32(foobar0) returned 0, val=0xbadc0de (was 0x00c0ffee)
    NameServer_addUInt32(foobar1, 0xbadc0df) succeeded
    NameServer_getUInt32(foobar1) returned 0, val=0xbadc0df (was 0x00c0ffee)
    NameServer_addUInt32(foobar2, 0xbadc0e0) succeeded
    NameServer_getUInt32(foobar2) returned 0, val=0xbadc0e0 (was 0x00c0ffee)
    NameServer_addUInt32(foobar3, 0xbadc0e1) succeeded
    NameServer_getUInt32(foobar3) returned 0, val=0xbadc0e1 (was 0x00c0ffee)
    NameServer_addUInt32(foobar4, 0xbadc0e2) succeeded
    NameServer_getUInt32(foobar4) returned 0, val=0xbadc0e2 (was 0x00c0ffee)
    NameServer_addUInt32(foobar5, 0xbadc0e3) succeeded
    NameServer_getUInt32(foobar5) returned 0, val=0xbadc0e3 (was 0x00c0ffee)
    NameServer_addUInt32(foobar6, 0xbadc0e4) succeeded
    NameServer_getUInt32(foobar6) returned 0, val=0xbadc0e4 (was 0x00c0ffee)
    NameServer_addUInt32(foobar7, 0xbadc0e5) succeeded
    NameServer_getUInt32(foobar7) returned 0, val=0xbadc0e5 (was 0x00c0ffee)
    NameServer_addUInt32(foobar8, 0xbadc0e6) succeeded
    NameServer_getUInt32(foobar8) returned 0, val=0xbadc0e6 (was 0x00c0ffee)
    NameServer_addUInt32(foobar9, 0xbadc0e7) succeeded
    NameServer_getUInt32(foobar9) returned 0, val=0xbadc0e7 (was 0x00c0ffee)
    NameServer_remove(foobar0) succeeded
    NameServer_remove(foobar1) succeeded
    NameServer_remove(foobar2) succeeded
    NameServer_remove(foobar3) succeeded
    NameServer_remove(foobar4) succeeded
    NameServer_remove(foobar5) succeeded
    NameServer_remove(foobar6) succeeded
    NameServer_remove(foobar7) succeeded
    NameServer_remove(foobar8) succeeded
    NameServer_remove(foobar9) succeeded
    NameServer_addUInt32() returned 0x18820
    Trying to add same key (should fail)...
        ...got expected Failure from NameServer_addUInt32()
    NameServer_getUInt32() returned 0, val=0xdeadbeef (was 0x00c0ffee)
    Removing 0xdeadbeef w/ NameServer_remove()...
    NameServer_addUInt32(0xdeadc0de) succeeded
    NameServer_getUInt32() returned 0, val=0xdeadc0de (was 0x00c0ffee)
    Removing 0xdeadc0de w/ NameServer_removeEntry()...
    NameServer_addUInt32(0x0badc0de) succeeded
    NameServer_getUInt32() returned 0, val=0xbadc0de (was 0x00c0ffee)
    NameServer_remove(Key) succeeded
    NameServer_addUInt32(foobar0, 0xbadc0de) succeeded
    NameServer_getUInt32(foobar0) returned 0, val=0xbadc0de (was 0x00c0ffee)
    NameServer_addUInt32(foobar1, 0xbadc0df) succeeded
    NameServer_getUInt32(foobar1) returned 0, val=0xbadc0df (was 0x00c0ffee)
    NameServer_addUInt32(foobar2, 0xbadc0e0) succeeded
    NameServer_getUInt32(foobar2) returned 0, val=0xbadc0e0 (was 0x00c0ffee)
    NameServer_addUInt32(foobar3, 0xbadc0e1) succeeded
    NameServer_getUInt32(foobar3) returned 0, val=0xbadc0e1 (was 0x00c0ffee)
    NameServer_addUInt32(foobar4, 0xbadc0e2) succeeded
    NameServer_getUInt32(foobar4) returned 0, val=0xbadc0e2 (was 0x00c0ffee)
    NameServer_addUInt32(foobar5, 0xbadc0e3) succeeded
    NameServer_getUInt32(foobar5) returned 0, val=0xbadc0e3 (was 0x00c0ffee)
    NameServer_addUInt32(foobar6, 0xbadc0e4) succeeded
    NameServer_getUInt32(foobar6) returned 0, val=0xbadc0e4 (was 0x00c0ffee)
    NameServer_addUInt32(foobar7, 0xbadc0e5) succeeded
    NameServer_getUInt32(foobar7) returned 0, val=0xbadc0e5 (was 0x00c0ffee)
    NameServer_addUInt32(foobar8, 0xbadc0e6) succeeded
    NameServer_getUInt32(foobar8) returned 0, val=0xbadc0e6 (was 0x00c0ffee)
    NameServer_addUInt32(foobar9, 0xbadc0e7) succeeded
    NameServer_getUInt32(foobar9) returned 0, val=0xbadc0e7 (was 0x00c0ffee)
    NameServer_remove(foobar0) succeeded
    NameServer_remove(foobar1) succeeded
    NameServer_remove(foobar2) succeeded
    NameServer_remove(foobar3) succeeded
    NameServer_remove(foobar4) succeeded
    NameServer_remove(foobar5) succeeded
    NameServer_remove(foobar6) succeeded
    NameServer_remove(foobar7) succeeded
    NameServer_remove(foobar8) succeeded
    NameServer_remove(foobar9) succeeded
    Deleting nsHandle and nsHandle2...
    Calling NameServer_destroy()...
    LAD_disconnect() succeeded
    Leaving NameServerApp_startup: status = 0x0
    Entered NameServerApp_execute
    Leaving NameServerApp_execute

    Entered NameServerApp_shutdown()
    Leave NameServerApp_shutdown()

  • Hi,

    You can also go through the wiki for RM and IPC based test project. 

    http://processors.wiki.ti.com/index.php/MCSDK_UG_Chapter_Developing_System_Mgmt#Running_RM_Test_Projects 

    http://processors.wiki.ti.com/index.php/MCSDK_UG_Chapter_Developing_System_Mgmt#Resource_Manager

  • I can try that, but I don't see how it addresses the problems I'm seeing.  I'm using the TI provided examples, built using the TI provided makefiles and libraries.  When I run them they don't work properly - or at all in some cases.  Going through the Resource Manager wiki - which is a completely separate product from the IPC - doesn't seem to address the fact that the provided IPC examples don't run properly. 

    My end product requires communication between DSP and ARM.  I really want that to be IPC - as simple as possible - without having to include RM into the picture as well.  I'd even be happy with a simple socket connection between DSP and ARM. 

    My concern is that a big part of the reason we selected the Keystone part was the support libraries that came with it to hopefully shorten our development effort. We're having a hard time justifying that decision given that we can't even get the factory-supplied examples to run without significant effort.

    Brian

  • OK, so I managed to get the examples working.  I discovered that when using the combination of MessageQApp on ARM and messageq_single.xe66 on DSP, you have to have ALL 8 DSPs loaded and running messageq_single.xe66.  If only some DSPs are loaded, when MessageQApp calls Ipc_start(), Ipc_start() fails because it's trying to connect to ALL 8 DSPs.


    In my final application I need to have the ARM boot Linux and run a control app, with no DSPs executing.  Then I need to dynamically download and run DSP applications that use IPC to talk to the control app, using mpmcl, on demand.  Is this even possible ?  It seems like the ARM control app is going to call Ipc_start(), see no DSP apps present, then fail.

    It looks to me like the underlying assumptions are that:

    1.  the LAD daemon need to know how many DSPs will be using IPC, and which ones

    2.  that number of DSPs must be running and registered with IPC/LAD before the ARM calls Ipc_start()

    That makes me think that I can't have DSP apps coming and going dynamically, and also use IPC to communicate with them from ARM to DSP.  Is that the case ?

    Brian

  • Brian Stupar said:

    OK, so I managed to get the examples working.  I discovered that when using the combination of MessageQApp on ARM and messageq_single.xe66 on DSP, you have to have ALL 8 DSPs loaded and running messageq_single.xe66.  If only some DSPs are loaded, when MessageQApp calls Ipc_start(), Ipc_start() fails because it's trying to connect to ALL 8 DSPs.

    Brian,

    The Ipc version that you are using (3.00.04.29) does indeed suffer from the situation that you describe - all 8 DSP cores must be running NameServer, else NameServer_setup() fails.

    The current GA Ipc release (3.22.02.11) does not have this problem (it was fixed a ways back, your version is fairly old).  NameServer_setup() is quite happy to connect to just one core.

    Your ARM control app should avoid calling Ipc_start() until at least one DSP core is running.  Perhaps it can be written to tolerate initial failure of Ipc_start() and retry calling Ipc_start() just before it needs to actually do Ipc with a DSP core.  However, when NameServer_setup() is eventually called, it's going to record all the connection information then and there, so if a DSP is not running at that point then NameServer will forever think that that DSP is not connected and will never be able to communicate with it.

    FYI, you can start LAD without any DSP cores running.  It's not until LAD is asked to do the NameServer_setup() (via the ARM Linux app that calls Ipc_start()) that the DSPs need to be loaded/running.

    Unfortunately, your use case (DSP cores coming and going under a long-standing Linux app) does not fit the Ipc design model, but I would expect that some "creative" architecting could make it work.

    Regards,

    - Rob

  • Hi Brian,

    This might already be a bit late for your purposes but there are some reference implementations available for dynamically loading DSP libraries. The actual library files can be hosted by ARM Linux.

    http://processors.wiki.ti.com/index.php/C6000_Dynamic_Loader
    http://processors.wiki.ti.com/index.php/C6000_Dynamic_Linking

    regards,
    Marko