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.

CCSv6 TI PRU Cape for Beaglebone Black demo: compilation fails

Other Parts Discussed in Thread: AM3359

I have asked this question on the StarterWare forum but not received an answer as yet...

When I follow the instructions at 

http://processors.wiki.ti.com/index.php/PRU_Cape:_Building_Demos 

to rebuild the PRU_demo project on Win7 using CCSv6 I get the Linking error

fatal error #10183: --abi=eabi is incompatible with file "C:/ti/pru-software-support-package/pru_cape/pru_fw/PRU_Audio/Debug/PRU_Audio_image.obj" (TIABI v0)


Has anyone compiled this demo successfully? Any idea what I need to do to get it to work?

Any help greatly appreciated. If there is some other forum or resource where this question might be answered, please let me know.

Note that I have successfully loaded and run the TI PRU cape demo from a micro SD using the MLO and (already compiled) app that come with the pru-software-support-package.

I need to be able to recompile this demo myself to make progress.

Regards,

Bryan

 

  • Using CCS 6.0.1.00040 under Linux i got the same error when tried to compile the PRU_Demo:

    Building target: PRU_Demo.out
    Invoking: ARM Linker
    "/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/arm_5.1.8/bin/armcl" -mv7A8 --code_state=32 --abi=eabi -me -O2 --define=am3359 --display_error_number --diag_warning=225 --diag_wrap=off -z -m"PRU_Demo.map" --heap_size=0x800 --stack_size=0x800 -i"/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/arm_5.1.8/lib" -i"/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/arm_5.1.8/include" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/drivers/Release/" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/utils/Release/" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/beaglebone/platform/Release/" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/system_config/Release/" --reread_libs --define=A8_CORE=1 --warn_sections --display_error_number --diag_wrap=off --xml_link_info="PRU_Demo_linkInfo.xml" --rom_model -o "PRU_Demo.out" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_Audio/Debug/PRU_Audio_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_HDQ_TempSensor0/Debug/PRU_HDQ_TempSensor0_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_HDQ_TempSensor1/Debug/PRU_HDQ_TempSensor1_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_Hardware_UART/Debug/PRU_Hardware_UART_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_LED0/Debug/PRU_LED0_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_LED1/Debug/PRU_LED1_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_Switch/Debug/PRU_Switch_image.obj" "./pru.obj" "./pru_cape_demo.obj" "../pru_cape_demo.cmd" -l"rtsv7A8_A_le_eabi.lib" -l"drivers.lib" -l"utils.lib" -l"system.lib" -l"platform.lib"
    <Linking>
    fatal error #10183: --abi=eabi is incompatible with file "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_Audio/Debug/PRU_Audio_image.obj" (TIABI v0)
    gmake: *** [PRU_Demo.out] Error 1

    This was using StarterWare v2.0.1.1, TI ARM compiler v5.1.8 and TI PRU compiler v2.1.0. Will try and determine what is causing the error.

  • Chester Gillon said:
    TI ARM compiler v5.1.8 and TI PRU compiler v2.1.0

    Looking at the .ccsproject files in the pru-software-support-package, the projects were created with TI ARM compiler v5.1.8 and TI PRU compiler v2.0.0.B2.

    Tried changing the TI PRU compiler version used from v2.1.0 to v2.0.0.B2, but still got the same linker error.

  • Thanks for your fast response Chester. I am glad to see that my problem has been reproduced with exactly the same error message. I am using (under CCSv6 on Win7) exactly the same software you mention.

    I have only just started using the beaglebone black and TI software tools and so do not yet understand how the pieces all fit together. I don't even see yet why the object file from the PRU_Audio example is called "PRU_LED0_image.obj" and not just "PRU_LED0.obj". Where does that get set? I do notice that the PRU object files in the demo are all constructed using eabi which makes the error message even more confusing!

    Using the AM335X_StarterWare_02_00_01_01 and the pru-software-support-package\pru_cape\pru_demo\ I understand that pru_cape_demo.c runs a console interface on the ARM. When the user chooses e.g. testLEDS the demo loads the PRUs with the corresponding compiled object code. I am guessing that this is controlled by the pru_cape_demo.cmd file. Is there a good description somewhere of how this works?
    For example, what is the detailed meaning of the lines:
    AUDIO_text: {PRU_Audio_image.obj(.text)} load > DDR_MEM run_start(AUDIO_INST)
    AUDIO_data: {PRU_Audio_image.obj(.data)} load > DDR_MEM run_start(AUDIO_DATA)
    where AUDIO_INST and AUDIO_DATA are defined in pru_cape_demo.h as
    extern const unsigned char AUDIO_INST[0x1000];
    extern const unsigned char AUDIO_DATA[0x1000];
    and the load is done in pru_cape_demo.c by
    PRUMemLoad(PRU_ICSS1, PRU1_IRAM, 0, sizeof(AUDIO_INST), (unsigned int*)AUDIO_INST);
    PRUMemLoad(PRU_ICSS1, PRU1_DRAM, 0, sizeof(AUDIO_DATA), (unsigned int*)AUDIO_DATA);
    I have also seen mention of "hexpru bin.cmd <file.out>" to produce text and data files for a pru out file. Could this help?
    Thanks,
    Bryan
  • user4213168 said:
    I don't even see yet why the object file from the PRU_Audio example is called "PRU_LED0_image.obj" and not just "PRU_LED0.obj". Where does that get set?

    Looking at the CCS Project Properties the PRU Hex Utility has been set to use the PRU_HexUtil.cmd file to create a PRU_LED0_image.obj file:

    The PRU_LED0.obj file is created by the PRU compiler which is the result of compiling the PRU_LED0.c source file.

    Whereas the PRU_LED0_image.obj file is created by the PRU Hex Conversion Utility. The PRU_LED0_image.obj is a "host image" intended for linking into the host program, which contains the PRU image (.text and .data segements) which the host program can download to the PRU.

    user4213168 said:
    Is there a good description somewhere of how this works?
     For example, what is the detailed meaning of the lines:

    The ARM Assembly Language Tools v5.2 User's Guide SPNU118M describes the format of the Linker Command File. E.g. see section 8.5.9.7 Address and Dimension Operators for how the RUN_START operator is used by the Linker to define a symbol giving the run time address of a section, where the symbol may be used by the program. In this case the linker defines symbols for where the PRU firmware .text and .data sections have been placed in the ARM program image, so that the program running in the ARM can download the PRU firmware.
    user4213168 said:
    I have also seen mention of "hexpru bin.cmd <file.out>" to produce text and data files for a pru out file. Could this help?
    If you look at the result from building a PRU image, the hexpru is shown as being run:
    **** Build of configuration Debug for project PRU_LED0 ****

    /opt/ti/ti_ccs6_0/ccsv6/utils/bin/gmake -k all
    Building file: ../PRU_LED0.c
    Invoking: PRU Compiler
    "/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/ti-cgt-pru_2.1.0/bin/clpru" -v3 --include_path="/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/ti-cgt-pru_2.1.0/include" --include_path="../../../../include" -g --define=am3359 --define=pru0 --diag_warning=225 --display_error_number --diag_wrap=off --endian=little --hardware_mac=on --preproc_with_compile --preproc_dependency="PRU_LED0.pp" "../PRU_LED0.c"
    "../PRU_LED0.c", line 64: warning #112-D: statement is unreachable
    Finished building: ../PRU_LED0.c

    Building target: PRU_LED0.out
    Invoking: PRU Linker
    "/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/ti-cgt-pru_2.1.0/bin/clpru" -v3 -g --define=am3359 --define=pru0 --diag_warning=225 --display_error_number --diag_wrap=off --endian=little --hardware_mac=on -z -m"PRU_LED0.map" --heap_size=0x100 --stack_size=0x100 -i"/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/ti-cgt-pru_2.1.0/lib" -i"/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/ti-cgt-pru_2.1.0/include" --reread_libs --define=PRU_CORE=1 --warn_sections --xml_link_info="PRU_LED0_linkInfo.xml" --rom_model -o "PRU_LED0.out" "./PRU_LED0.obj" "../link.cmd" -l"libc.a"
    <Linking>
    Finished building target: PRU_LED0.out

    Invoking: PRU Hex Utility
    "/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/ti-cgt-pru_2.1.0/bin/hexpru" --ti_txt -o "PRU_LED0_image.obj" "PRU_LED0.out" /home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_LED0/PRU_HexUtil.cmd
    warning: -memwidth is invalid when using --load_image (ignored)
    Translating to Load Image format...
    "PRU_LED0.out" .text:_c_int00* ==> .text:_c_int00*
    "PRU_LED0.out" .text ==> .text
    Finished building: PRU_LED0_image.obj


    **** Build Finished ****
    The problem appears to be that the <project>_image.obj files created by the hexpru program are not in a format that is accepted by the ARM linker. Trying to work out if this is a problem in the hexpru program, armcl program or the PRU Cape project.

  • Chester Gillon said:
    Trying to work out if this is a problem in the hexpru program, armcl program or the PRU Cape project.

    The problem might be that the hexpru program is not inserting a ".ARM.attributes" section into the generated files - have raised TI ARM linker rejects ARM "host image" ELF format files generated by the hexpru utility

    [I tried a work-around of using arm-none-eabi-objcopy from the GNU ARM compiler to copy a ".ARM.attributes" section into the PRU image.obj files, but couldn't get objcopy to set the Section Type to SHT_ARM_ATTRIBUTES]

  • Hi Chester,

    Thanks for your detailed and very useful response. I will follow up your leads.

    I am looking forward to seeing what is causing the format incompatibility.

    I notice that there is one warning from hexpru:

    warning: -memwidth is invalid when using --load_image (ignored)

    Is that at all significant?

    Cheers,

    Bryan

  • user4213168 said:
    I notice that there is one warning from hexpru:

    warning: -memwidth is invalid when using --load_image (ignored)

    Is that at all significant?

    To prevent that warning I found that you can edit the CCS Project Properties of the PRU firmware projects (PRU_Audio, PRU_Hardware_UART, PRU_HDQ_TempSensor0, PRU_HDQ_TempSensor1, PRU_LED0, PRU_LED1, PRU_Switch) under CCS Build -> PRU Hex Utility -> Output Format Options and change Output Format from "Output TI-TXT hex format (--ti_txt)" to blank.

    However, after re-compiling all the PRU firmware projects with that change, and no warnings from hexpru, the ARM linker still failed with the same "-abi=eabi is incompatible with file" error when tried to compile the PRI_Demo project.

  • Chester Gillon said:
    The problem might be that the hexpru program is not inserting a ".ARM.attributes" section into the generated files - have raised TI ARM linker rejects ARM "host image" ELF format files generated by the hexpru utility

    To investigate that theory I created a program under Linux to post-process the "host image" ELF format files generated by the hexpru utility to add an ".ARM.attributes" section copied from a file generated by the ARM compiler. However, that didn't change the error reported by the ARM linker.

    i.e. that theory has been disproved.

    [but was an exercise in the use of libelf]

  • user4213168 said:
    I am looking forward to seeing what is causing the format incompatibility.

    On further investigation I think the issue is caused by the order the object files are given to the ARM linker. When the PRU_Demo fails to link when built in CCS the command line is the following, which has the objects generated by the hexpru utility before the objects generated by the ARM linker (highlighted in green):

    "/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/ti-cgt-arm_5.2.0/bin/armcl" -mv7A8 --code_state=32 --abi=eabi -me -O2 --define=am3359 --display_error_number --diag_warning=225 --diag_wrap=off -z -m"PRU_Demo.map" --heap_size=0x800 --stack_size=0x800 -i"/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/ti-cgt-arm_5.2.0/lib" -i"/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/ti-cgt-arm_5.2.0/include" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/drivers/Release/" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/utils/Release/" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/beaglebone/platform/Release/" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/system_config/Release/" --reread_libs --define=A8_CORE=1 --warn_sections --display_error_number --diag_wrap=off --xml_link_info="PRU_Demo_linkInfo.xml" --rom_model -o "PRU_Demo.out" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_Audio/Debug/PRU_Audio_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_HDQ_TempSensor0/Debug/PRU_HDQ_TempSensor0_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_HDQ_TempSensor1/Debug/PRU_HDQ_TempSensor1_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_Hardware_UART/Debug/PRU_Hardware_UART_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_LED0/Debug/PRU_LED0_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_LED1/Debug/PRU_LED1_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_Switch/Debug/PRU_Switch_image.obj" "./pru.obj" "./pru_cape_demo.obj" "../pru_cape_demo.cmd" -l"rtsv7A8_A_le_eabi.lib" -l"drivers.lib" -l"utils.lib" -l"system.lib" -l"platform.lib"
    <Linking>
    fatal error #10183: --abi=eabi is incompatible with file "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_Audio/Debug/PRU_Audio_image.obj" (TIABI v0)

    If I run that exact linker command from a shell the linker fails with the same error.

    If the linker command was manually edited to place the object files generated by the ARM compiler first, then the link is successful:

    $ "/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/ti-cgt-arm_5.2.0/bin/armcl" -mv7A8 --code_state=32 --abi=eabi -me -O2 --define=am3359 --display_error_number --diag_warning=225 --diag_wrap=off -z -m"PRU_Demo.map" --heap_size=0x800 --stack_size=0x800 -i"/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/ti-cgt-arm_5.2.0/lib" -i"/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/ti-cgt-arm_5.2.0/include" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/drivers/Release/" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/utils/Release/" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/beaglebone/platform/Release/" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/system_config/Release/" --reread_libs --define=A8_CORE=1 --warn_sections --display_error_number --diag_wrap=off --xml_link_info="PRU_Demo_linkInfo.xml" --rom_model -o "PRU_Demo.out" "./pru.obj" "./pru_cape_demo.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_Audio/Debug/PRU_Audio_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_HDQ_TempSensor0/Debug/PRU_HDQ_TempSensor0_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_HDQ_TempSensor1/Debug/PRU_HDQ_TempSensor1_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_Hardware_UART/Debug/PRU_Hardware_UART_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_LED0/Debug/PRU_LED0_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_LED1/Debug/PRU_LED1_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_Switch/Debug/PRU_Switch_image.obj" "./pru.obj" "./pru_cape_demo.obj" "../pru_cape_demo.cmd" -l"rtsv7A8_A_le_eabi.lib" -l"drivers.lib" -l"utils.lib" -l"system.lib" -l"platform.lib" 
    <Linking>

    To force CCS to pass an object file generated by the ARM compiler to the linker first, under the CCS Project Properties for the PRU_Demo project the Link Order was set to add an entry for "pru.c":

    With this change, CCS generates the following link command which works:

    Building target: PRU_Demo.out
    Invoking: ARM Linker
    "/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/arm_5.1.8/bin/armcl" -mv7A8 --code_state=32 --abi=eabi -me -O2 --define=am3359 --display_error_number --diag_warning=225 --diag_wrap=off -z -m"PRU_Demo.map" --heap_size=0x800 --stack_size=0x800 -i"/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/arm_5.1.8/lib" -i"/opt/ti/ti_ccs6_0/ccsv6/tools/compiler/arm_5.1.8/include" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/drivers/Release/" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/utils/Release/" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/beaglebone/platform/Release/" -i"/opt/ti/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/system_config/Release/" --reread_libs --define=A8_CORE=1 --warn_sections --display_error_number --diag_wrap=off --xml_link_info="PRU_Demo_linkInfo.xml" --rom_model -o "PRU_Demo.out" "./pru.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_Audio/Debug/PRU_Audio_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_HDQ_TempSensor0/Debug/PRU_HDQ_TempSensor0_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_HDQ_TempSensor1/Debug/PRU_HDQ_TempSensor1_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_Hardware_UART/Debug/PRU_Hardware_UART_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_LED0/Debug/PRU_LED0_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_LED1/Debug/PRU_LED1_image.obj" "/home/Mr_Halfword/pru-software-support-package-pru-software-support-package/pru_cape/pru_fw/PRU_Switch/Debug/PRU_Switch_image.obj" "./pru_cape_demo.obj" "../pru_cape_demo.cmd" -l"rtsv7A8_A_le_eabi.lib" -l"drivers.lib" -l"utils.lib" -l"system.lib" -l"platform.lib"
    <Linking>
    Finished building target: PRU_Demo.out

    I don't have a PRU Cape or Beaglebone Black, so am unable to test if the program runs.

  • Hi Chester,

     Fantastic!

    I added pru.c and pru_cape_demo.c to the Link Order of the PRU_Demo as you suggested (how did you work that out?). It now builds successfully and runs on the TI PRU Cape.

    Here is the build output:


    **** Build of configuration Release for project PRU_Demo ****

    "c:\\ti\\ccsv6\\utils\\bin\\gmake" -k all
    'Building target: PRU_Demo.out'
    'Invoking: ARM Linker'
    "c:/ti/ccsv6/tools/compiler/arm_5.1.9/bin/armcl" -mv7A8 --code_state=32 --abi=eabi -me -O2 --define=am3359 --display_error_number --diag_warning=225 --diag_wrap=off -z -m"PRU_Demo.map" --heap_size=0x800 --stack_size=0x800 -i"c:/ti/ccsv6/tools/compiler/arm_5.1.9/lib" -i"c:/ti/ccsv6/tools/compiler/arm_5.1.9/include" -i"C:/TI/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/drivers/Release/" -i"C:/TI/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/utils/Release/" -i"C:/TI/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/beaglebone/platform/Release/" -i"C:/TI/AM335X_StarterWare_02_00_01_01/binary/armv7a/cgt_ccs/am335x/system_config/Release/" --reread_libs --define=A8_CORE=1 --warn_sections --display_error_number --diag_wrap=off --xml_link_info="PRU_Demo_linkInfo.xml" --rom_model -o "PRU_Demo.out"  "./pru.obj" "./pru_cape_demo.obj" "C:/ti/pru-software-support-package/pru_cape/pru_fw/PRU_Audio/Debug/PRU_Audio_image.obj" "C:/ti/pru-software-support-package/pru_cape/pru_fw/PRU_HDQ_TempSensor0/Debug/PRU_HDQ_TempSensor0_image.obj" "C:/ti/pru-software-support-package/pru_cape/pru_fw/PRU_HDQ_TempSensor1/Debug/PRU_HDQ_TempSensor1_image.obj" "C:/ti/pru-software-support-package/pru_cape/pru_fw/PRU_Hardware_UART/Debug/PRU_Hardware_UART_image.obj" "C:/ti/pru-software-support-package/pru_cape/pru_fw/PRU_LED0/Debug/PRU_LED0_image.obj" "C:/ti/pru-software-support-package/pru_cape/pru_fw/PRU_LED1/Debug/PRU_LED1_image.obj" "C:/ti/pru-software-support-package/pru_cape/pru_fw/PRU_Switch/Debug/PRU_Switch_image.obj" "../pru_cape_demo.cmd" -l"rtsv7A8_A_le_eabi.lib" -l"drivers.lib" -l"utils.lib" -l"system.lib" -l"platform.lib"
    <Linking>
    'Finished building target: PRU_Demo.out'
    ' '
    "c:/ti/ccsv6/utils/tiobj2bin/tiobj2bin.bat" "PRU_Demo.out" "PRU_Demo.bin" "c:/ti/ccsv6/tools/compiler/arm_5.1.9/bin/ofd470.exe" "c:/ti/ccsv6/tools/compiler/arm_5.1.9/bin/hex470.exe" "c:/ti/ccsv6/utils/tiobj2bin/mkhex4bin.exe" & "C:/TI/AM335X_StarterWare_02_00_01_01/tools/ti_image/tiimage.exe" "0x80000000" "NONE" "PRU_Demo.bin" "PRU_Demo_ti.bin"

    ' '

    **** Build Finished ****

    Now the PRU Cape demo and the instructions for rebuilding the code finally work.

    I rename PRU_Demo_ti.bin to "app" and copy it, along with pru-software-support-package\pru_cape\bin\MLO to my microSD.

    Thanks for your time and efforts. I truly appreciate it. I will now be able to get on with the real work of understanding the capabilities of this amazing device.

    In addition, I hope that this helps anyone else using the TI  PRU cape, Starterware etc..

    Hopefully TI can modify the PRU_demo files accordingly.

    Cheers,

    Bryan