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.

Interprocessor communications in kernel with dsplink

Other Parts Discussed in Thread: OMAPL138

Hallo, we previously implemented interprocessor communications between ARM -DSP  on OMAP l-138 using dsp link,

for ARM-DSP , on ARM side  we use the msgq.h feature e.g. MSGQ-alloc,MSGQ_get, MSGQ_put,,..

                             on the DSP side as the one receive the notification, we use   #include "core/cl_ipc_inbound.h" #include "core/cl_ipc_outbound.h", features.

for DSP-ARM we use the Notify.h features using the   NOTIFY_register and NOTIFY_notify functions.

I understand that the dsplink is being used in user space.

Now , we would like to have interprocessor communications ARM-DSP , DSP-ARM  in kernel space.

Could we link to the dsplink on the kernel space, if not, then how could we implement the ARM-DSP DSP-ARM interprocessor communications, how

can ARM-DSP notifies each other in kernel space.

Regards

Ibrahim Budiarjo

  • Hi Ibrahim,

    SYSlink is the advanced version than DSPlink.

    Give it a try.

    Regards,

    Shankari

    -------------------------------------------------------------------------------------------------------

    Please click the Verify Answer button on this post if it answers your question.

    --------------------------------------------------------------------------------------------------------

  • Hi,
    DSPLINK is the kernel driver (kernel space) which will support memory mapping, communication between DSP to ARM and vice versa.
    You would insert the driver called "dsplink.ko", its kernel module driver.
    Also, SYSLINK is advanced version of DSPLINK and it could support for later kernel versions.
  • I am quite new with kernel programming,

    so i need to generate the dsplink.ko right, and on the Makefile how should i link to it?

  • No, what I meant is already DSP-ARM and ARM-DSP communication is happening through the kernel space only.
    Already "dsplink.ko" might have installed on your system.
    You can checkout with the command "lsmod", you can see "dsplink" module driver there.
  • Hallo Titus, yes i see the dsplinkk with the lsmod command.

    now, if i would like to build codes for kernel e.g. the mac802.11 and on the driver side i include the interprocessor communications using notify_register and MSGQ_alloc, MSGQ_put,

    should i just include the header files such as the Notify.h, msgq.h, ipc_outbound.h, etc,
    is there anything else i should do? e.g in the makefile under the ../linux-davinci-.../Makefile
  • Hi Ibrahim,

    Here's a thread that discusses this topic: https://e2e.ti.com/support/embedded/linux/f/354/p/227319/819656. Basically it is unsupported.

    Best regards,

    Vincent

  • Hi Ibrahim,

    Please refer to the link below for building dsplink

    processors.wiki.ti.com/.../Building_DSPLink

    Regards,
    Shankari

    -------------------------------------------------------------------------------------------------------
    Please click the Verify Answer button on this post if it answers your question.
    --------------------------------------------------------------------------------------------------------
  • Dear All

    Would it be fine, if i just include the header files, and use the API functions, while later i instantiate the dsplinkk.ko, so my codes will be built without being linked to dsplink.lib.

    Regards

    Ibrahim B
  • Hi Ibrahim B,

    You have to see where the source code of the API functions lies ? ( Is it in dsplink.lib ?)

    If the source code of the API functions are built as part of the dsplink.lib, you need to build your code linking to dsplink.lib.

    Regards,

    Shankari

    -------------------------------------------------------------------------------------------------------

    Please click the Verify Answer button on this post if it answers your question.

    --------------------------------------------------------------------------------------------------------

  • after i build, i have the following warning

    Building modules, stage 2.
    MODPOST
    *** Warning: "NOTIFY_register" [module_name] undefined!
    *** Warning: "MSGQ_alloc" [module_name] undefined!
    *** Warning: "MSGQ_locate" [module_name] undefined!

    anyone know how to fix this ?
  • Hi Ibrahim,

    I would recommend you first try the dsplink "as is" on OMAPL138 boards by  following the instructions given in the below TI WIKI. This will give a good start ; then you can go from there on. Reply us exactly at which step you stuck on!!

    And also please refer to the example DSPLIB/DSPLink Application on OMAP-L1x.

    Regards,

    Shankari

    -------------------------------------------------------------------------------------------------------

    Please click the Verify Answer button on this post if it answers your question.
    --------------------------------------------------------------------------------------------------------

  • First of all, when i build the dsp link on gpp side : dsplink/gpp/src
    I am using the option of omapl1xx_, then i modified the 2 mk files :
    omapl1xx_arm.mk, Rules.mk according to the information available on the following web:
    github.com/.../Setting-up-DSPLink-Framework-for-GPP-DSP-Applications

    on the omapl1xx_arm.mk, i change the BASE_BUILDS :, BASE_TOOLCHAIN etc, up to LINKER, while
    on Rules.mk
    i have changed the KERNEL_DIR, and TOOL_PATH, CG_PREFIX, MAKE_OPTS
    according to the directory structure in my computer.

    the result of the build after executing the make -s debug :
    .....
    ....
    [SRC ] ======= TARGETS =============== DEBUG ==============
    [API ] ------- TARGET ---------------- DEBUG --------------
    Generating library : /home/ibudiarjo/sirius/ALDK/firmware/OS/linux/linux-davinci-082803c-current/drivers/net/wireless/zd1211rw/dsplink/gpp/BUILD/API/BIN/DEBUG/dsplink.o...
    Generating library : /home/ibudiarjo/sirius/ALDK/firmware/OS/linux/linux-davinci-082803c-current/drivers/net/wireless/zd1211rw/dsplink/gpp/BUILD/API/BIN/DEBUG/dsplink.lib...
    Generating archive : /home/ibudiarjo/sirius/ALDK/firmware/OS/linux/linux-davinci-082803c-current/drivers/net/wireless/zd1211rw/dsplink/gpp/BUILD/API/BIN/DEBUG/dsplink.a...
    /opt/CodeSourcery/Sourcery_G++_Lite_GNUEABI/bin/arm-none-linux-gnueabi-ar: creating /home/ibudiarjo/sirius/ALDK/firmware/OS/linux/linux-davinci-082803c-current/drivers/net/wireless/zd1211rw/dsplink/gpp/BUILD/API/BIN/DEBUG/dsplink.a

    [SRC ] ======= EXPORTS =============== DEBUG ==============
    [API ] ------- EXPORT ---------------- DEBUG --------------
    Building kernel side code using kbuild
    make[1]: *** No rule to make target `modules'. Stop.
    make: *** [debug] Error 2

    What would be the cause of this error ?
  • Hallo, i manage to build the dsplinkk, and produces dsplinkk.ko
    by using the make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
    command.

    Now, after i build also my part of the code that uses the functions defined in notify.h, msgq.h such as MSQ_put, MSGQ_locate, MSGG_alloc, MSGQ_transportOpen, Notify_register. Producing zd1211rw.ko

    but when i insmod the dsplinkk.ko, and insmod the zd1211rw.ko.

    I get the following errors:
    zd1211rw: Unknown symbol MSGQ_put
    zd1211rw: Unknwon NOTIFY_register
    zd1211rw: MSGQ_locate
    ...

    ...

    insmod:error inserting 'zd1211rw.ko': -1 unknown symbol in module

    I thought, if i insmod the dslplinkk.ko, these functions will be recognized.
  • Hi Ibrahim,

    The error, "unknown symbol in module" may also come if the modules are compiled against different kernl version than the kernel that you are booting.

    Make sure you are booting the right kernel with which those modules were built.

    Regards,

    Shankari

    -------------------------------------------------------------------------------------------------------

    Please click the Verify Answer button on this post if it answers your question.

    --------------------------------------------------------------------------------------------------------

  • I am using the same krnel betsion for booting and compile.  The API funtions i used seems to be part of dsplink.lib. How could i link it with my codes iinkernelpaces . Are there Api to be used in kernel space?