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.

DRA7xx IPC 3.xx support.

Expert 1940 points

Hi,

I am new to the entire Yocto build system and just trying to catch up.

In an effort to communicate to DSP, after reading through TI documentation, it looks like I need to add IPC 3.x support for dra7xx processor.

And as I understood ti-glsdk already has IPC 3.x integrated and if I use ti-glsdk I don't need to install IPC 3.x separately.

Currently I am seeing IPC under both meta-ti and meta-ti-glsdk in the yocto build system based repo that I am using. My question is what is the purpose of having two IPC folders and which one should I be using?

In addition to that, are there any advantages/disadvantages of using ti-glsdk vs installing IPC seperately?

Thanks.

  • Hello Girish,

    The Linux GLSDK 7.00.00.04 release package for DRA75x/DRA72x includes IPC 3.x. GLSDK includes makefile targets to ease the process of building IPC and the examples.

    You can directly build the IPU and DSP applications from the root of the GLSDK installation by running

    host $ make ipc_ipu ipc_dsp

    Build the A15 user space libraries requires that linux kernel is built as well. Please ensure the kernel is built by running

    host $ make linux

    and then

    host $ make ipc_mpu

    For more information see in Software Developers Guide - http://processors.wiki.ti.com/index.php/DRA7xx_GLSDK_Software_Developers_Guide#Running_IPC_examples

    See an e2e thread about the topic - http://e2e.ti.com/support/embedded/tirtos/f/355/p/328289/1147425

    About your question: In addition to that, are there any advantages/disadvantages of using ti-glsdk vs installing IPC seperately?

    The advantages of IPC in ti-glsdk is that there are IPC examples and you can running IPC from userspace. Linux services, a few key services from the IPC API (e.g. MessageQ) are provided in user mode.

    See following presentation - http://processors.wiki.ti.com/images/6/69/IPC_Training_2_21.pdf

    The disadvantages of using IPC seperately is that you must use CCS IDE.

    IPC can be used to communicate with the following:

    • Other threads on the same processor
    • Threads on other processors running SYS/BIOS
    • Threads on other processors running an HLOS (e.g., Linux, QNX, Android)

    Best regards,

    Yanko

  • Hi Yanko,

    I'm having some issues with the IPC compilation for Linux with GLSDK, the way you have explained:

    1. host $ make ipc_ipu ipc_dsp

    2. host $ make linux

    3. host $ make ipc_mpu"

    I'm able to perform the first 2 steps, but when I try performing step 3, make does not know what to do for "ipc_mpu". The content of the Makefile, at GLSDK root folder, there is no rule for ipc_mpu.

    I'm using GLSDK 6.10.00.02 on Linux host with Ubuntu 12.04, also all my cross compiler path variables etc are fine. I have also cross verified in GLSDK 7.00.00.04, the Makefile given with the SDK has all the option but ipc_mpu.

    Kindly help me figure out what is going wrong and what am I missing here..

    Thank you,
    Regards,
    Khushwant
  • Hello Khuswant,

    I am surprised that host $ make ipc_mpu". I checked in ti-glsdk_dra7xx-evm_6_10_00_02/Makefile and there are no definitions for ipc_mpu.

    However, you can use Makefile from the latest GLSDK release ti-glsdk_dra7xx-evm_7_00_00_04.

    There is the definition for ipc_mpu:
    $(MAKE) -C $(IPC_INSTALL_DIR) PLATFORM=${PLATFORM_IPC} ti.targets.elf.C66=${CODEGEN_INSTALL_DIR} XDC_INSTALL_DIR=${XDC_INSTALL_DIR} BIOS_INSTALL_DIR=${BIOS_INSTALL_DIR} -f ipc-bios.mak all

    : ipc_mpu: linux_utils
    $(MAKE) -e -C $(IPC_INSTALL_DIR) PLATFORM=${PLATFORM_IPC} \
    CMEM_INSTALL_DIR=${LINUXUTILS_INSTALL_DIR} \

    Best regards,
    Yanko
  • Hi Yanko,

    Thanks for replying! Correct me if I'm wrong, what I understand ipc-bios.mak is a make file for me to compile IPC for SYS/BIOS using xdc tools and gmake for IPU or DSP cores, but my interest is to compile ipc_3_23_00_01 for Linux which is running on a15.

    To be precise I'm compiling MessageQApp in ipc_3_23_00_01/linux/src/tests

    Also, as I mentioned in my previous post, I've already refereed ti-glsdk_dra7xx-evm_7_00_00_04/Makefile, which too does not have ipc_mpu.

    Thank you,
    Regards,
    Khushwant
  • Hello Khushwant,

    #Q: "what I understand ipc-bios.mak is a make file for me to compile IPC for SYS/BIOS using xdc tools and gmake for IPU or DSP cores, but my interest is to compile ipc_3_23_00_01 for Linux which is running on a15."

    - ipc-bios.mak - The SYS/BIOS-side IPC is built with a GNU makefile. The BIOS-side libraries often come pre-built, so in many cases, rebuilding the BIOS-side is not necessary.

    You must compile ipc-linux.mak to use IPC with GLSDK.

    The Linux-side build is provided as a GNU Autotools (Autoconf, Automake, Libtool) project.

    To configure the build using these files, issue the following command:  make -f ipc-linux.mak config

    Then build the Linux side of IPC by issuing the following: make

    You can also specify a PLATFORM to (re)configure for on the command line which overrides any options set in the products.mak file as follows:
    make -f ipc-linux.mak config PLATFORM=DRA7xx

    Note that before reconfiguring for a new Linux toolchain or platform, the autotools-generated files should be clean(ed):

    make distclean


    Please see and follow IPC Linux installation guide: http://processors.wiki.ti.com/index.php/IPC_Install_Guide_Linux#OMAP54XX

    I don't agree with "ti-glsdk_dra7xx-evm_7_00_00_04/Makefile, which too does not have ipc_mpu."

    There is a definition for ipc_mpu in ti-glsdk_dra7xx-evm_7_00_00_04/Makefile, see between lines 145 and 166:

    #==============================================================================
    # Build ipc for dsp. Also, an explicit cleanup target is defined.
    #==============================================================================
    ipc_dsp:
        $(MAKE) -C $(IPC_INSTALL_DIR) PLATFORM=${PLATFORM_IPC} ti.targets.elf.C66=${CODEGEN_INSTALL_DIR} XDC_INSTALL_DIR=${XDC_INSTALL_DIR} BIOS_INSTALL_DIR=${BIOS_INSTALL_DIR} -f ipc-bios.mak all

    ipc_mpu: linux_utils
        $(MAKE) -e -C $(IPC_INSTALL_DIR) PLATFORM=${PLATFORM_IPC} \
            CMEM_INSTALL_DIR=${LINUXUTILS_INSTALL_DIR} \
            TOOLCHAIN_LONGNAME=arm-linux-gnueabihf \
            TOOLCHAIN_PREFIX=${CROSS_COMPILE_PREFIX} \
            KERNEL_INSTALL_DIR=${KERNEL_INSTALL_DIR} \
            -f ipc-linux.mak config
        $(MAKE) -C $(IPC_INSTALL_DIR)

    ipc_clean:
        $(MAKE) -C $(IPC_INSTALL_DIR) $(IPC_BUILD_VARS) -f ipc-bios.mak clean


    #==============================================================================
    # Build ipumm. Also, an explicit cleanup target is defined.
    #==============================================================================

    You can configure MessageQ module for BIOS only.

    Best regards,

    Yanko