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.

XDCTools 'xs xdc.tools.configuro' Advanced LPM feature not available error.

Other Parts Discussed in Thread: DM3730, OMAP3530

Hello All,

I'm new at DSP codec & codec server development and I'm trying create a codec server for the OMAP3530/DM3730 c64+ DSP to remotely use from my  ARM Qt video app.  I was able to successfully create my codec server using the Genserver Wizard (xs ti.sdo.ce.wizards.genserver), but now when I try to statically configure my ARM app with the using the xs xdc.tools.configuro command, I get this error:

Error: Advanced LPM features are not available on this device. Contact your TI representative for additional details.

This is my complete build output:

$ XDCPATH=".;/home/donny3000/workspace/ti/dsp-servers;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-xdctools-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-codec-engine-tree/xdoc;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-framework-components-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-codec-engine-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-xdais-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-codecs-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-linuxutils-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-dmai-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-local-power-manager-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-edma3lld-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-dsplink-tree;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-dspbios-tree/packages" /opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-xdctools-tree/xs xdc.tools.configuro -b ./config.bld dm3730_dsp_test.cfg
making package.mak (because of package.bld) ...
generating interfaces for package dm3730_dsp_test (because package/package.xdc.inc is older than package.xdc) ...
configuring dm3730_dsp_test.x64P from package/cfg/dm3730_dsp_test_p64P.cfg ...
Info: Configuring engine named 'bin/cs' from the info file for DSP server 'bin/cs.x64P',
located in package 'swri.tnc.servers.cs':
Target app will look for the DSP server image 'cs.x64P' in its current directory.
Adding codec 'aachedec' (ti.sdo.codecs.aachedec.ce.AACHEDEC), scratch groupId=2
Adding codec 'i2p' (ti.sdo.codecs.deinterlacer.ce.I2P), scratch groupId=2
Adding codec 'g711dec' (ti.sdo.codecs.g711dec.ce.G711DEC), scratch groupId=2
Adding codec 'g711enc' (ti.sdo.codecs.g711enc.ce.G711ENC), scratch groupId=2
Adding codec 'h264dec' (ti.sdo.codecs.h264dec.ce.H264DEC), scratch groupId=0
Adding codec 'h264enc' (ti.sdo.codecs.h264enc.ce.H264ENC), scratch groupId=0
Adding codec 'jpegdec' (ti.sdo.codecs.jpegdec.ce.JPEGDEC), scratch groupId=1
Adding codec 'jpegenc' (ti.sdo.codecs.jpegenc.ce.JPEGENC), scratch groupId=1
Adding codec 'mpeg2dec' (ti.sdo.codecs.mpeg2dec.ce.MPEG2DEC), scratch groupId=0
Adding codec 'mpeg4dec' (ti.sdo.codecs.mpeg4dec.ce.MPEG4DEC), scratch groupId=0
Adding codec 'mpeg4enc' (ti.sdo.codecs.mpeg4enc.ce.MPEG4ENC), scratch groupId=0
Info: Reading DSP memory map from the info file for DSP server 'bin/cs.x64P',
located in package 'swri.tnc.servers.cs':
js: "/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-local-power-manager-tree/packages/ti/bios/power/package.xs", line 69: Error: Advanced LPM features are not available on this device. Contact your TI representative for additional details.
gmake: *** [package/cfg/dm3730_dsp_test_p64P.xdl] Error 1
js: "/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-xdctools-tree/packages/xdc/tools/Cmdr.xs", line 51: Error: xdc.tools.configuro: configuration failed due to earlier errors (status = 2); 'linker.cmd' deleted.1856.dm3730_dsp_test.cfg

I've been trying to debug this with no resolve.  Has anyone come across this before or know how to resolve this?

I'm currently using the following version of the TI DSP Tools

TI Bios Utils 1.02.02
TI Code Generation Tools 6x 1.6.1.17
TI Codec Engine 2.26.02.11
TI Codecs OMAP3530
TI DMAI 1.2.10.00.01
TI DSP BIOS 5.41.13.42
TI DSP Lib 1.20
TI DSP Link 1.1.65.00.03
TI EDMA3 01.11.00.03
TI Framework Components 2.26.00.01
TI IPC 1.24.03.32
TI Linux Utils 1.3.22.00.02
TI Local Power Manager 1.1.24.02.09
TI OSAL 1.22.01.09
TI XDAIS 7.23.00.06
TI XDC Tools 3.23.04.60

  • Donald,

    The error is generated because the DSP/BIOS configuration does not have the 'PWRM' module installed. Check your configuration script and make sure to include this module. It will looks something like this in your *.tci file:

    /* power management */
    bios.PWRM.ENABLE = true;
    bios.PWRM.WARMBOOTMEMSEG = DDR2;
    bios.PWRM.CTXBUFMEMSEG = DDR2;

    ~Ramsey

  • Thanks Ramesy for your timely response.  I found a memmap.tci file in my codec server's output directory, which I added the lines you suggested, but I received this error:

    configuring bin/cs.x64P from package/cfg/bin/cs_x64P.cfg ...
    platform = ti.platforms.evm3530
    js: "./memmap.tci", line 10: ReferenceError: "bios" is not defined. (./memmap.tci#10)
    "./server.tcf", line 9
    "./package/cfg/bin/cs_x64P.cfg", line 258
    "./package/cfg/bin/cs_x64P.cfg", line 181
    gmake: *** [package/cfg/bin/cs_x64Pcfg.s62] Error 1
    make: *** [all] Error 2

    So, realizing that it wasn't defined, I thought that I would added the following line preceding the lines you gave me:

    var bios = xdc.useModule('ti.bios');
    bios.PWRM.ENABLE = true;
    bios.PWRM.WARMBOOTMEMSEG = DDR2;
    bios.PWRM.CTXBUFMEMSEG = DDR2;

    But, that resulted in another error:

    configuring bin/cs.x64P from package/cfg/bin/cs_x64P.cfg ...
    platform = ti.platforms.evm3530
    js: "./memmap.tci", line 9: TypeError: Cannot read property "cfgScript" from undefined (/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-xdctools-tree/packages/xdc/cfg/Main.xs#1484)
    "./server.tcf", line 9
    "./package/cfg/bin/cs_x64P.cfg", line 258
    "./package/cfg/bin/cs_x64P.cfg", line 181
    gmake: *** [package/cfg/bin/cs_x64Pcfg.s62] Error 1
    make: *** [all] Error 2

    So, my question is am I editing the right *.tci file? If so, am I correctly modifying the memmap.tci file?  Please pardon my lack of understanding.  I'm still trying to get my feet wet in the area of DSP codec/server development.

  • Donald,

    The syntax for tci files is different than for cfg files. The code you added would be used for cfg files. Somewhere in your tci script you probably have utils.loadPlatform call which would define the bios object. Add the bios reference after this call. Also, the DSP/BIOS configuration starts with a *.tcf file. The tci files are "target configuration include" files. See if you can track down the entire flow.

    If your build starts with a package.bld script, it might have a property called 'cfgScript' which defines the tcf file which starts off the configuration. If you have both a tcf and a cfg by the same name, then the initial configuration happens with the tcf and tci files, the second phase of configuration begins with the cfg file.

    ~Ramsey

  • Thanks again for your input and insight.  I think I'm getting the flow of things now.  I was able to locate the utils.loadplatform call, utils.loadPlatform("ti.platforms.generic", params) in my case, in my server.tcf file (the cfgscript property in my package.bld script defined server.tcf as the starting configuration).The following is the context of the bios.PWRM code in my server.tcf file:

    /*
    * ======== server.tcf ========
    */

    var platform = environment["config.platform"];
    print("platform = " + platform);

    utils.importFile('./memmap.tci');

    var device_regs = {
    l1PMode: "32k",
    l1DMode: "16k",
    l2Mode: "64k",
    l1DHeapSize: 0
    };

    var params = {
    clockRate: 360,
    catalogName: "ti.catalog.c6000",
    deviceName: "3530",
    regs: device_regs,
    mem: mem_ext
    };

    /* Now customize the generic platform with parameters specified above. */
    utils.loadPlatform("ti.platforms.generic", params);

    /* Enable heaps and tasks */
    bios.enableMemoryHeaps(prog);
    bios.enableTskManager(prog);

    /* Create heaps in memory segments that are to have heap */
    bios.DDR2.createHeap = true;
    bios.DDR2.heapSize = 0x20000; // 128K

    bios.DDRALGHEAP.createHeap = true;
    bios.DDRALGHEAP.heapSize = bios.DDRALGHEAP.len;

    /* L1DSRAM */
    bios.L1DSRAM.createHeap = true;
    bios.L1DSRAM.enableHeapLabel = true;
    bios.L1DSRAM["heapLabel"] = prog.extern("L1DHEAP");
    bios.L1DSRAM.heapSize = bios.L1DSRAM.len;

    /* Enable power management, whilst ensuring DSP CPU load reporting accuracy */
    bios.PWRM.ENABLE = true;
    bios.PWRM.IDLECPU = true;
    bios.PWRM.LOADENABLE = true;
    bios.PWRM.USECLKPRD = true;
    bios.PWRM.NUMSLOTS = 10 + 1;
    bios.PWRM.CLKTICKSPERSLOT = 50;
    bios.PWRM.WARMBOOTMEMSEG = bios.DDR2;
    bios.PWRM.CTXBUFMEMSEG = bios.DDR2;

    Where the boldface bios.PWRM code was already in place and the blue bios.PWRM code is the code that you gave that wasn't there (i had to replace DDR2 with bios.DDR2 because it complained about DDR2 not being defined).  So, it seems like the definition is there and I shouldn't get the Advanced LPM features not available for this device error, but when I make clean && make all and then trying rebuilding with configuro the error it still occurs.  What else am I missing?

    If it helps, these are the files generated by the Genserver Wizard, before I execute make all:

    -rw-rw-r-- 1 donny3000 donny3000 7768 Jul 26 11:58 codec.cfg
    -rw-rw-r-- 1 donny3000 donny3000 1140 Jul 26 11:57 config.bld
    -rw-rw-r-- 1 donny3000 donny3000 84 Jul 26 11:57 link.cmd
    -rw-rw-r-- 1 donny3000 donny3000 1019 Jul 26 11:57 main.c
    -rw-rw-r-- 1 donny3000 donny3000 3575 Jul 26 11:59 makefile
    -rw-rw-r-- 1 donny3000 donny3000 1393 Jul 26 13:22 memmap.tci
    -rw-rw-r-- 1 donny3000 donny3000 836 Jul 26 11:57 package.bld
    -rw-rw-r-- 1 donny3000 donny3000 42 Jul 26 11:57 package.xdc
    -rw-rw-r-- 1 donny3000 donny3000 1712 Jul 26 11:57 package.xs
    -rw-rw-r-- 1 donny3000 donny3000 11028 Jul 26 11:57 server.cfg
    -rw-rw-r-- 1 donny3000 donny3000 2439 Jul 26 13:44 server.tcf

  • Donald,

    I will have to look into this some more. I'll get back to you as soon as I discover a new lead.

    ~Ramsey

  • Thanks Ramsey. I will be looking forward to your response.

    -Donald

  • Donald,

    Reading over your initial post again, I'm a little confused. You indicate that the Genserver Wizard was successful in building your codec server but trying to run configuro on your ARM executable is failing. But looking at the error you posted, I think configuro is actually trying to configure the codec server executable. This does not make sense.

    I asked around and my understanding is that the Genserver Wizard is used to generate a package for your DSP codec server executable. You would then build this package with the xdc command to generate your DSP executable. On the ARM side, you would use the configuro command to build and configure the application executable, but the configuro command would be used on a different package, not the same package generated by the Genserver Wizard. In particular, the configuro command would be building an ARM executable, not a DSP executable as your initial post is indicating.

    Would you confirm that the DSP executable built without error and with the xdc command using the package from Genserver Wizard and that you are using the configuro command on a different package for the ARM executable. I'm wondering if you are using the configuro command on the wrong package.

    Regarding tcf vs. cfg configuration. If you are building a package with the xdc command (i.e. using a package.bld script), then my previous post applies. In particular, you must have two scripts by the same name but one with a cfg extension and one with a tcf extension. In the package.bld script, you must specify the tcf file, the cfg file will be used automatically. I think you understood this from your reply. But I failed to tell you that if you are using the configuro command instead of the xdc command, then its different. When using configuro, you must specify the cfg script as the input file and add the --tcf option to process the corresponding tcf script. Your command would look something like this.

    xs xdc.tools.configuro --tcf app.cfg

    ~Ramsey

  • Ramsey,

    I believe that the DSP executable built without error because I didn't receive an error when I executed make all and *.x64P file was generated in the bin/ directory. These are the steps I took to create and build the Codec Server for the Genserver Wizard:

    • I executed the Genserver Wizard with the command XDCPATH="<my_XDCPATH>" xs ti.sdo.ce.wizards.genserver
    • Then after going through the menus and successfully generating the files from the wizard, I get the following files in the output directory

    -rw-rw-r-- 1 donny3000 donny3000 7768 Jul 26 11:58 codec.cfg
    -rw-rw-r-- 1 donny3000 donny3000 1140 Jul 26 11:57 config.bld
    -rw-rw-r-- 1 donny3000 donny3000 84 Jul 26 11:57 link.cmd
    -rw-rw-r-- 1 donny3000 donny3000 1019 Jul 26 11:57 main.c
    -rw-rw-r-- 1 donny3000 donny3000 3574 Jul 26 16:34 makefile
    -rw-rw-r-- 1 donny3000 donny3000 1393 Jul 26 13:22 memmap.tci
    -rw-rw-r-- 1 donny3000 donny3000 836 Jul 26 11:57 package.bld
    -rw-rw-r-- 1 donny3000 donny3000 42 Jul 26 11:57 package.xdc
    -rw-rw-r-- 1 donny3000 donny3000 1712 Jul 26 11:57 package.xs
    -rw-rw-r-- 1 donny3000 donny3000 11027 Jul 26 16:32 server.cfg
    -rw-rw-r-- 1 donny3000 donny3000 2439 Jul 26 13:44 server.tcf

    • Then I execute make all, which generates the server, my bin/cs.x64P file (no errors occur during this process) and a <my_server_name>.zip server package.
    • Once that completes, I go over to the folder where my ARM code is, which has the following files and I execute xs xdc.tools.configuro -b ./config.bld dm3730_dsp_test.cfg

    -rwxrwxr-x 1 donny3000 donny3000 1322 Jul 25 01:06 config.bld
    -rw-rw-r-- 1 donny3000 donny3000 940 Jul 26 16:03 dm3730_dsp_test.cfg
    -rw------- 1 donny3000 donny3000 428 Jul 20 10:56 dm3730-dsp-test.pro
    -rw------- 1 donny3000 donny3000 1400 Jul 24 22:51 main.cpp

    The last step is where I get the error, but maybe I need to create a tcf file and include the --tcf option in addition to the -b option?  If so, I'm not sure what to put in it.

    I wanted to upload my config.bld and dm373_dsp_test.cfg files, but was unsuccessful.  So, I 've copied the contents here of each file here:

    config.bld:

    /*
    * ======== config.bld ========
    * User note: YOU MUST MODIFY THIS FILE TO SPECIFY THE COMPILER TOOL PATHS.
    *
    * Edit this file to specify compiler toolchain paths, and any custom
    * compiler/linker options.
    */

    /* DSP Configuration */
    /* location of your C6000 codegen tools */
    var C64P = xdc.useModule('ti.targets.C64P');
    C64P.rootDir = "/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-cgt6x-tree";
    C64P.platform = "ti.platforms.evm3530";

    Build.targets.$add(C64P);

    /* Generic ARM Configuration */
    var GCArmv5T = xdc.useModule('gnu.targets.arm.GCArmv5T'); /* Name of XDCTools Generic ARM Target */
    GCArmv5T.rootDir = "/opt/embedded/armv7/gumstix/tmp/sysroots/i686-linux/usr/armv7a"; /* Location of toolchain (path) */
    GCArmv5T.LONGNAME = "bin/arm-angstrom-linux-gnueabi-gcc"; /* Each toolchain may have different prefix, this is the actual executable */
    GCArmv5T.platform = "ti.platforms.evm3530"; /* Associate the target with a platform */

    /* remove reference to C++ from opts */
    /*GCArmv5T.lnkOpts.suffix = GCArmv5T.lnkOpts.suffix.replace("-lstdc++", "");*/ /* For example add a linker option */

    Build.targets.$add(GCArmv5T);
    /*
    * ======== Build.targets ========
    * list of targets (ISAs + compilers) to build for
    */
    /*Build.targets = [
    C64P, GCArmv5T,
    ];*/

    dm3730_dsp_test.cfg

    /*
    * Example .cfg snippet for ARM-side Linux app with remote algs
    * (OSAL = Linux, IPC = Link)
    */
    var osalGlobal = xdc.useModule('ti.sdo.ce.osal.Global');
    osalGlobal.runtimeEnv = osalGlobal.DSPLINK_LINUX;

    var os = xdc.useModule('ti.sdo.ce.osal.linux.Settings');
    osalGlobal.os = os;

    /* Configure CE to use it's DSP Link Linux version */
    var ipc = xdc.useModule('ti.sdo.ce.ipc.Settings');
    ipc.commType = ipc.COMM_DSPLINK;

    /*
    * ======== Engine Configuration ========
    */
    var Engine = xdc.useModule('ti.sdo.ce.Engine');
    var myEngine = Engine.createFromServer(
    "bin/cs", // Engine name (as referred to in the C app)
    "bin/cs.x64P", // path to server exe, relative to its package dir
    "swri.tnc.servers.cs" // full server package name
    );

    /* Load support for the DMAI module */
    var DMAI = xdc.loadPackage('ti.sdo.dmai');
    var SCPY = xdc.useModule('ti.sdo.fc.scpy.SCPY');
    var SDMA = xdc.useModule('ti.sdo.linuxutils.sdma.SDMA');

  • If it helps provide some understanding for my steps, I've been using the XDC Consumer User's Guide (Literature Number: SPRUEX4) to help me understand how to use configuro to build my ARM app.  My end goal is to build an ARM app that will use a remote server on the DSP to process streaming video.

  • Donald,

    Your DSP side looks okay. But the config.bld script for the ARM side looks incorrect. It looks like a generated file but I'm guessing that it's been hand edited? Or is this how it was generated?

    In particular, this file should not be building for the C64P target. Please remove the following line:

    Build.targets.$add(C64P);

    There is no wizard for generating the ARM side application. We do provide examples in Codec Engine to help you get started. Have a look at

    codec_engine_2_26_02_11\examples\ti\sdo\ce\examples\apps\video_copy

    This example builds both a local and remote executable. You would be interested in the remote part.

    ~Ramsey

  • Thanks Ramsey for you help.  The config.bld script was autogenerated, but I did had edit it.  I removed the Build.targets.$add(C64P); line and the configuro build finished successfully.

    I also took a look at the video_copy example you mentioned to see how its remote.cfg file looked to get an idea of how I should construct mine, and it looks very similar.  Now that I'm at the point where I need to actually compile my app, I've followed the guidance in the XDC Consumer User's Guide on how to construct a Makefile that will pull in the compiler.opt and the linker.cmd files generated by configuro.  Thus, I have this:

    CC = arm-none-linux-gnueabi-g++

    LNK = arm-none-linux-gnueabi-g++

    RTS = -lstdc++

    CONFIG = dm3730_dsp_test

    %.o : %.cpp # forget built-in rule

    %.o : %.cpp $(CONFIG)/compiler.opt

    $(CC) $(shell cat $(CONFIG)/compiler.opt) -c $<

    main : main.o $(CONFIG)/linker.cmd

    $(LNK) -o $@ main.o -lpthread $(CONFIG)/linker.cmd $(RTS)

    But, when I execute make, I get a lot of undefined reference to Comm_<function_name> compile errors like below:

    /opt/embedded/armv7/gumstix/tmp/sysroots/i686-linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi-g++ -o main main.o -lpthread dm3730_dsp_test/linker.cmd
    /home/donny3000/workspace/ti/dm3730-dsp-test/dm3730_dsp_test/package/cfg/dm3730_dsp_test_pv7A.ov7A: In function `CERuntime_init':
    dm3730_dsp_test_pv7A.c:(.text.CERuntime_init+0xec): undefined reference to `Comm_init'
    dm3730_dsp_test_pv7A.c:(.text.CERuntime_init+0xf4): undefined reference to `Processor_init'
    /opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-codec-engine-tree/packages/ti/sdo/ce/lib/release/ce.av5T(Engine.ov5T): In function `Engine_ctrlNode':
    Engine.c:(.text+0x2b8): undefined reference to `Comm_setSrcQueue'
    Engine.c:(.text+0x2c4): undefined reference to `Comm_put'
    Engine.c:(.text+0x328): undefined reference to `Comm_get'
    /opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-codec-engine-tree/packages/ti/sdo/ce/lib/release/ce.av5T(Engine.ov5T): In function `callServer':
    Engine.c:(.text+0x358): undefined reference to `Comm_setSrcQueue'
    Engine.c:(.text+0x364): undefined reference to `Comm_put'
    Engine.c:(.text+0x390): undefined reference to `Comm_get'
    /opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-codec-engine-tree/packages/ti/sdo/ce/lib/release/ce.av5T(Engine.ov5T): In function `Engine_callWait':
    Engine.c:(.text+0x2074): undefined reference to `Comm_get'
    /opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-codec-engine-tree/packages/ti/sdo/ce/lib/release/ce.av5T(Engine.ov5T): In function `Engine_callAsync':
    Engine.c:(.text+0x20e0): undefined reference to `Comm_setSrcQueue'
    Engine.c:(.text+0x20ec): undefined reference to `Comm_put'
    /opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-codec-engine-tree/packages/ti/sdo/ce/lib/release/ce.av5T(Engine.ov5T): In function `Engine_call':
    Engine.c:(.text+0x2148): undefined reference to `Comm_setSrcQueue'
    Engine.c:(.text+0x2154): undefined reference to `Comm_put'
    Engine.c:(.text+0x2198): undefined reference to `Comm_get'
    /opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-codec-engine-tree/packages/ti/sdo/ce/lib/release/ce.av5T(Engine.ov5T): In function `freeNode':
    Engine.c:(.text+0x2a38): undefined reference to `Comm_delete'

    So after doing some searching on this forum and on google, it seems that I need to add var Mod = xdc.useModule("pkg.name.Mod"); line in my cfg file to pull in the appropriate module for the app and libraries to add to the linker.cmd file, but I'm having a hard time tracking the the right module.  Do you know which one I might need?

  • Ramsey,

    Were you able to find anything out regarding my latest issue or know what I might be running up against here?  I'm still stuck and I don't know where to begin to try and resolve this issue.

  • Donald:

        Could you possibly zip up and post your project (maybe pare down to using the sample codecs that come with Codec Engine as I don't have an SDK), to try to delve into this build issue?

        I will also try to duplicate from my end with a simplified Server.

    Thanks,
    - Gil
  • Donald:

         Looking at the LPM package, it appears the test samples there explicitly include the ti.bios.power package and set the transport to DSPLINK.

         The Codec engine genserver logic appears to search for an LPM installation, and then loads the package.

         Can you check that ti.bios.power is on the package path?

    - Gil

  • Thanks Gil for your assistance.  I was able to resolve my issue by modifiying my ARM side config.bld script.  When I was receiving the errors my script look like this:

    /*
    * ======== config.bld ========
    * User note: YOU MUST MODIFY THIS FILE TO SPECIFY THE COMPILER TOOL PATHS.
    *
    * Edit this file to specify compiler toolchain paths, and any custom
    * compiler/linker options.
    */
    /* Generic ARM Configuration */
    var GCArmv7A = xdc.useModule('gnu.targets.arm.GCArmv7A'); /* Name of XDCTools Generic ARM Target */
    GCArmv7A.rootDir = "/opt/embedded/armv7/gumstix/tmp/sysroots/i686-linux/usr/armv7a"; /* Location of toolchain (path) */
    GCArmv7A.LONGNAME = "bin/arm-angstrom-linux-gnueabi-gcc"; /* Each toolchain may have different prefix, this is the actual executable */
    GCArmv7A.platform = "ti.platforms.evm3530"; /* Associate the target with a platform */
    /* Build.targets.$add(GCArmv7A); */
    /*
    * ======== Build.targets ========
    * list of targets (ISAs + compilers) to build for
    */
    Build.targets = [
    GCArmv7A,
    ];

    Since my target device is the DM3730, I thought that I need to change the module to match the DM3730 because it's an armv7-a device.  But, the gnu.targets.arm.GCArmv7A module pulled in the wrong libraries because all of my other ti packages (codec engine, linuxutils, dspbios etc) had been configured/built with the gnu.targets.arm.GCArmv5T module.  So changing my config.bld script to look like

    /*
    * ======== config.bld ========
    * User note: YOU MUST MODIFY THIS FILE TO SPECIFY THE COMPILER TOOL PATHS.
    *
    * Edit this file to specify compiler toolchain paths, and any custom
    * compiler/linker options.
    */
    /* Generic ARM Configuration */
    var GCArmv7A = xdc.useModule('gnu.targets.arm.GCArmv5T'); /* Name of XDCTools Generic ARM Target */
    GCArmv7A.rootDir = "/opt/embedded/armv7/gumstix/tmp/sysroots/i686-linux/usr/armv7a"; /* Location of toolchain (path) */
    GCArmv7A.LONGNAME = "bin/arm-angstrom-linux-gnueabi-gcc"; /* Each toolchain may have different prefix, this is the actual executable */
    GCArmv7A.platform = "ti.platforms.evm3530"; /* Associate the target with a platform */
    /* Build.targets.$add(GCArmv7A); */
    /*
    * ======== Build.targets ========
    * list of targets (ISAs + compilers) to build for
    */
    Build.targets = [
    GCArmv7A,
    ];

    allow my ARM side app to compile/link successfully.  I guess I have to use the GCArmv5T because that is the module the OpenEmbedded build system uses when building all of the TI packages/utilities.


    -Donald

  • Donald:

      It seems from a previous post the _config.bld already had

           var GCArmv5T = xdc.useModule('gnu.targets.arm.GCArmv5T'); /* Name of XDCTools Generic ARM Target */

      So, maybe there was another change that got the Comm_ symbols to resolve?

      In any case, I'm glad you've succeeded to build!

    - Gil

  • I was going back and forth between the two at the time to find which one works.  I also forgot to mention I changed my makefile too.  I was using the CodeSourcery ARM compiler in the makefile before and then changed to the OpenEmbedded Angstrom ARM compiler.  I think that helped too.  I'll my makefile here to help any other OpenEmbedded devlopers that might encounter the same or similar issue.

    Makefile:

    XDCPATH = ".;/home/donny3000/workspace/ti/dsp-servers;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-xdctools-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-codec-engine-tree/xdoc;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-framework-components-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-codec-engine-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-xdais-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-codecs-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-linuxutils-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-dmai-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-local-power-manager-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-edma3lld-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-dsplink-tree;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-dspbios-tree/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-c6accel-tree/;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-c6accel-tree/soc/packages;/opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-osal-tree/packages"

    XDCXSCMD = /opt/embedded/armv7/gumstix/tmp/sysroots/overo-angstrom-linux-gnueabi/usr/share/ti/ti-xdctools-tree/xs
    CONFIGURO = xdc.tools.configuro
    CC = /opt/embedded/armv7/gumstix/tmp/sysroots/i686-linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi-g++ -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp -mthumb-interwork -mno-thumb --sysroot=/opt/embedded/armv7/gumstix/tmp/sysroots/armv7a-angstrom-linux-gnueabi
    LNK = /opt/embedded/armv7/gumstix/tmp/sysroots/i686-linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi-g++ -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp -mthumb-interwork -mno-thumb --sysroot=/opt/embedded/armv7/gumstix/tmp/sysroots/armv7a-angstrom-linux-gnueabi
    RTS = -lstdc++
    CONFIG = dm3730_dsp_test

    all: configuro main.o main.out

    configuro: config.bld dm3730_dsp_test.cfg
    @echo "Configuring..."
    XDCPATH=$(XDCPATH) $(XDCXSCMD) $(CONFIGURO) -b ./config.bld dm3730_dsp_test.cfg

    %.o : %.cpp $(CONFIG)/compiler.opt
    @echo "Compiling..."
    $(CC) $(shell cat $(CONFIG)/compiler.opt) -c $<

    main.out : main.o $(CONFIG)/linker.cmd
    @echo "Linking..."
    $(LNK) -o $@ $^ -lpthread $(RTS)