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.

New platform fails to link

Other Parts Discussed in Thread: SYSBIOS

I have a project which I have been using with the evm6678 platform. I need to change the platform (mostly to increase the external memory) and I get the following undefined symbols during the link:

CSL_GPIO_open, CSL_PLLC_open, CSL_SRIO_Open, CSL_chipReadReg,

CSL_intcGlobalDisable

Cppi_channelEnable, Cppi_configureRxFlow, Cppi_getFlowId, Cppi_init, Cppi_initDescriptor, Cppi_open, Cppi_rxChannelOpen, Cppi_setCpdmaLoopback,

Cppi_txChannelOpen

Qmss_ackInterrupt, Qmss_getQueueHandle, Qmss_getQueueNumber, Qmss_init, Qmss_insertMemoryRegion, Qmss_programAccumulator, Qmss_queueClose, Qmss_queueOpen, Qmss_setEoiVector, Qmss_setQueueThreshold, Qmss_start

cmHeap

qmssLObj

ti_sysbios_family_c64p_EventCombiner_disableEvent__E ti_sysbios_family_c64p_EventCombiner_dispatchPlug__E ti_sysbios_family_c64p_EventCombiner_enableEvent__E, ti_sysbios_family_c66_tci66xx_CpIntc_disableHostInt__E

ti_sysbios_family_c66_tci66xx_CpIntc_disableSysInt__E, ti_sysbios_family_c66_tci66xx_CpIntc_dispatchPlug__E

ti_sysbios_family_c66_tci66xx_CpIntc_dispatch__E, ti_sysbios_family_c66_tci66xx_CpIntc_enableHostInt__E

ti_sysbios_family_c66_tci66xx_CpIntc_enableSysInt__E, ti_sysbios_family_c66_tci66xx_CpIntc_getEventId__E
ti_sysbios_family_c66_tci66xx_CpIntc_mapSysIntToHostInt__E, ti_sysbios_knl_Semaphore_Object__create__S

ti_sysbios_knl_Semaphore_pend__E, ti_sysbios_knl_Semaphore_post__E, xdc_runtime_Error_init__E

xdc_runtime_Memory_alloc__E, xdc_runtime_Memory_free__E, xdc_runtime_System_printf__E

My new platform at the moment is an unaltered copy of evm6678.

What am I missing? I followed the instructions in the SYS/BIOS user's guide. Is there another step I need to do? Do I need to add a link to a library?

  • Hi John,

    How did you make the new platform? Can you post build output?

    Thanks,

    Todd

  • Todd,

    I imported the evm6678 as the base and modified from there. On my latest try, I didn't even modify the result, but still had the linking problem. What build ouput are you looking for? Nothing ends up going to the console window. I simple get a dialogue box saying the package buils sucessfully in repository.

    John

     

  • Hi John,

    I'm talking about the same console output where you got the unresolved symbols when you build your application. Can you do a clean and then build (or a rebuild) and attach the console output.

    Todd

  • Can you also compare the two linker.cmd files to see the difference? Does the new one look correct. Does the new memory map have enough room for the application?

  • We shouldn't be using the linker.cmd. We have one called unitTest.cmd in the local directory. We are also using a cfg file.

    Here are its contents:

     

    /* THIS FILE WAS GENERATED manually with reference from sample.cfg, and modified as needed. Not using ti.sysbios.genx */

    /* THIS FILE WAS GENERATED BY ti.sysbios.genx */

    /*

    * ======== srio_test.cfg ========

    *

    */

    environment['xdc.cfg.check.fatal'] = 'false';

    /* Load and use the various BIOS modules. */

    var Memory = xdc.useModule('xdc.runtime.Memory');

    var BIOS = xdc.useModule('ti.sysbios.BIOS');

    var HWI = xdc.useModule('ti.sysbios.family.c64p.Hwi');

    var ECM = xdc.useModule('ti.sysbios.family.c64p.EventCombiner');

    var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');

    var HeapBuf = xdc.useModule('ti.sysbios.heaps.HeapBuf');

    var Task = xdc.useModule('ti.sysbios.knl.Task');

    var Idle = xdc.useModule('ti.sysbios.knl.Idle');

    var SEM = xdc.useModule('ti.sysbios.knl.Semaphore');

    var Log = xdc.useModule('xdc.runtime.Log');

    var Diags = xdc.useModule('xdc.runtime.Diags');

    var CpIntc = xdc.useModule('ti.sysbios.family.c66.tci66xx.CpIntc');

    /* Load and use the CPPI, QMSS & CSL packages */

    var cslSettings = xdc.useModule ('ti.csl.Settings');

    cslSettings.useCSLIntcLib = true;

    var Cppi = xdc.loadPackage('ti.drv.cppi');

    var Qmss = xdc.loadPackage('ti.drv.qmss');

    /* Load and use the System Package */

    /* Default is SysMin recommended for the target version, uncomment below for debug */

    /*var System = xdc.useModule('xdc.runtime.System');

    SysStd = xdc.useModule('xdc.runtime.SysStd');

    System.SupportProxy = SysStd; */

    /*

    * Enable Event Groups here and registering of ISR for specific GEM INTC is done

    * using EventCombiner_dispatchPlug() and Hwi_eventMap() APIs

    */

    ECM.eventGroupHwiNum[0] = 7;

    ECM.eventGroupHwiNum[1] = 8;

    ECM.eventGroupHwiNum[2] = 9;

    ECM.eventGroupHwiNum[3] = 10;

     

     

    /* Load and use the IPC packages */

    var Ipc = xdc.useModule('ti.sdo.ipc.Ipc');

    var Settings = xdc.module('ti.sdo.ipc.family.Settings');

    var ListMP = xdc.useModule('ti.sdo.ipc.ListMP');

    var GateMP = xdc.useModule('ti.sdo.ipc.GateMP');

    var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');

    var HeapMemMP = xdc.useModule('ti.sdo.ipc.heaps.HeapMemMP');

    var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');

    /* Create a default system heap using ti.bios.HeapMem. */

    var heapMemParams0 = new HeapMem.Params;

    heapMemParams0.size = 0x13FFFF00;

    heapMemParams0.sectionName = "systemHeap";

    Program.global.heap0 = HeapMem.create(heapMemParams0);

    var heapMemParams1 = new HeapMem.Params;

    heapMemParams1.size = 0x01000000;

    heapMemParams1.sectionName = "systemHeap";

    Program.global.heap1 = HeapMem.create(heapMemParams1);

    var heapMemParams2 = new HeapMem.Params;

    heapMemParams2.size = 0x01000000;

    heapMemParams2.sectionName = "systemHeap";

    Program.global.heap2 = HeapMem.create(heapMemParams2);

    var heapMemParams3 = new HeapMem.Params;

    heapMemParams3.size = 0x01000000;

    heapMemParams3.sectionName = "systemHeap";

    Program.global.heap3 = HeapMem.create(heapMemParams3);

    var heapMemParams4 = new HeapMem.Params;

    heapMemParams4.size = 0x01000000;

    heapMemParams4.sectionName = "systemHeap";

    Program.global.heap4 = HeapMem.create(heapMemParams4);

    var heapMemParams5 = new HeapMem.Params;

    heapMemParams5.size = 0x01000000;

    heapMemParams5.sectionName = "systemHeap";

    Program.global.heap5 = HeapMem.create(heapMemParams5);

    var heapMemParams6 = new HeapMem.Params;

    heapMemParams6.size = 0x01000000;

    heapMemParams6.sectionName = "systemHeap";

    Program.global.heap6 = HeapMem.create(heapMemParams6);

    var heapMemParams7 = new HeapMem.Params;

    heapMemParams7.size = 0x01000000;

    heapMemParams7.sectionName = "systemHeap";

    Program.global.heap7 = HeapMem.create(heapMemParams7);

    var heapMemParamsCM = new HeapMem.Params;

    heapMemParamsCM.size = 0x03000000;

    heapMemParamsCM.sectionName = "systemHeap";

    Program.global.cmHeap = HeapMem.create(heapMemParamsCM);

    /*

    var heapBufParams = new HeapBuf.Params;

    heapBufParams.blockSize = 4096;

    heapBufParams.numBlocks = 8192;

    heapBufParams.align = 128;

    heapBufParams.sectionName = "cmHeap";

    Program.global.cmHeap = HeapBuf.create(heapBufParams);

    */

    /* This is the default memory heap. */

    Memory.defaultHeapInstance = Program.global.heap0;

    /*Program.sectMap["systemHeap"] = Program.platform.stackMemory; */

    /*Program.sectMap["systemHeap"] = "MSMCSRAM";*/

    Program.sectMap["systemHeap"] = "DDR3";

    /*Program.sectMap["cmHeap"] = "DDR3";*/

    /* Configure the shared memory heap for shared memory allocations required by the

    * CPPI and QMSS Libraries */

    SharedRegion.translate = false;

    var memmap = Program.cpu.memoryMap;

    Startup = xdc.useModule('xdc.runtime.Startup');

    Startup.firstFxns.$add('&myStartupFxn');

    MultiProc.setConfig(null, ["CORE0","CORE1","CORE2","CORE3","CORE4","CORE5","CORE6","CORE7"]);

    /* Synchronize all processors (this will be done in Ipc_start) */

    Ipc.procSync = Ipc.ProcSync_ALL;

    /* To avoid wasting shared memory for Notify and MessageQ transports */

    for (var i = 0; i < MultiProc.numProcessors; i++) {

    Ipc.setEntryMeta({

    remoteProcId: i,

    setupNotify: false,

    setupMessageQ: false,

    });

    }

    /* Create a shared memory */

    SharedRegion.setEntryMeta(0,

    { base: 0x0C010000,

    len: 0x00100000,

    ownerProcId: 0,

    isValid: true,

    name: "sharemem",

    });

     

    Program.sectMap[".const"] = "MSMCSRAM";

    Program.sectMap[".cinit"] = "MSMCSRAM";

    Program.sectMap[".switch"] = "MSMCSRAM";

    Program.sectMap[".text"] = "MSMCSRAM";

    var execontextInstance0 = xdc.lookup('xdc.platform.ExeContext.Instance#0');

    execontextInstance0.memoryMap["MSMCSRAM"].base = 0xC000040;

    execontextInstance0.memoryMap["MSMCSRAM"].len = 0x3FFFC0;

    execontextInstance0.memoryMap["L2SRAM"].base = 0x800000;

    execontextInstance0.memoryMap["L2SRAM"].len = 0x40000;

    var extstackParams = new HeapMem.Params();

    extstackParams.size = 0x20000;

    extstackParams.sectionName = ".stack";

    Program.global.sdramstack = HeapMem.create(extstackParams);

    /*Program.sectMap[".stack"] = "DDR3";*/

    Program.sectMap[".stack"] = "L2SRAM";

     

  • One additional note: if I change my platform so the code is placed in MSMCSRAM, the placement problems go away, but the undefined symbols remain.

  • I'm looking into it now. I should have an update later today.

    Todd

  • Todd,

    Thanks for looking into this.  Your help is very appriciated.

    Walter

  • Walter,

    I just validated that the Platform Wizard worked properly with your setup. Have you gone through this demo: http://rtsc.eclipse.org/docs-tip/Demo_of_the_RTSC_Platform_Wizard_in_CCSv4. I want to make sure you've done all the steps.

    Also, what version of MCSDK and SYS/BIOS are you using?

    Todd

  • Todd,

    Yes, I did go back through the demo and believe I followed it correctly. I am using CCS 5.2, MCSDK 1.0.0.17 and SYS/BIOS 6.32.5.54.

    John

  • Todd,

    I upgraded to the latest tools (CCS5.3, MCSDK 1.1.2.5, SYS/BIOS 6.34.2.18) and got the same results.

    John

     

  • Todd,

    Some more information on how our projects are set up. We are building two libraries, one is a static RTSC and one a stand alone. To make the RTSC library build, we ended up cross linking the cfg file from our application, otherwise the library could not find the BIOS, CSL, etc. files. When I look at the linker.cmd file in the Release folder of the library when using the evm6678 platform I see:

    -l"Z:\jgilmour_VSDVideoCODEC_MC\mvp\CommonDSP\6678CommonDSP\Release\configPkg\package\cfg\vceTI6678_pe66e.oe66e"
    -l"C:\Program Files\Texas Instruments\ipc_1_24_00_16\packages\ti\sdo\ipc\lib\instrumented_e66e\ipc\ipc.lib"
    -l"C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_17\packages\ti\drv\cppi\lib\ti.drv.cppi.ae66e"
    -l"C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_17\packages\ti\drv\qmss\lib\ti.drv.qmss.ae66e"
    -l"C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_17\packages\ti\csl\lib\ti.csl.ae66e"
    -l"C:\Program Files\Texas Instruments\pdk_C6678_1_0_0_17\packages\ti\csl\lib\ti.csl.intc.ae66e"
    -l"C:\Program Files\Texas Instruments\bios_6_32_05_54\packages\ti\sysbios\lib\instrumented_e66e\sysbios\sysbios.lib"
    -l"Z:\jgilmour_VSDVideoCODEC_MC\mvp\CommonDSP\RtscModulesDSP\rts\ti\targets\rts6000\lib\ti.targets.rts6000.ae66e"
    -l"Z:\jgilmour_VSDVideoCODEC_MC\mvp\CommonDSP\RtscModulesDSP\rts\ti\targets\rts6000\lib\boot.ae66e"

     

    Using my platform yields:

    -l"Z:\jgilmour_4.0.0.0\mvp\CommonDSP\6678CommonDSP\Release\configPkg\package\cfg\build_pe66e.oe66e"

    -l"Z:\jgilmour_4.0.0.0\mvp\CommonDSP\RtscModulesDSP\rts\ti\targets\rts6000\lib\ti.targets.rts6000.ae66e"

    -l"Z:\jgilmour_4.0.0.0\mvp\CommonDSP\RtscModulesDSP\rts\ti\targets\rts6000\lib\boot.ae66e"

    This would explain the linking problem.

    What I don't understand is why changing the platform caused the loss of these links and how we should be allowing the library to access the BIOS functions.

    John

     

  • Todd,

    I was able to use a newly created platform today. I suspect I had an error in the directory structure before.

    John