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.

Compiler/PROCESSOR-SDK-AM335X: Creating binary file for SD card

Part Number: PROCESSOR-SDK-AM335X
Other Parts Discussed in Thread: SYSBIOS

Tool/software: TI C/C++ Compiler

Hello,

I am back with another issue on loading a binary from an SD card into a BBB.  I have already accomplished it for GCC projects, I understand what's going on and the issues using the pdkAppImageCreate.bat file...  but now I need to do it with the TI compiler.

I am using CCS 7.2, and TI 17.9 compiler... also Sys/Bios 6.46.5.55

I have set the correct step for the post build, and it is generating the {project}.bin without any problem.  I even checked off "Enable ARM HEX utility" in the project properties, but that doesn't seem to affect the the OUT or BIN files. I then manually use "tiimage.exe" to place the header on the file, rename it to "app" and place it on the SD card with MLO.

(With GCC, it ran it's own "tiimage" and was using an incorrect entry address... at least with this I manually run it, so I can control it)

However, it doesn't run.. or doesn't load... or had the wrong entry... or something.

I have tried using a start address of 0x80000000  and also using the start address which appears in the MAP file: ENTRY POINT SYMBOL: "_c_int00"  address: 8038fa34  Neither one has yielded success.

I removed the comment from the batch file in order to get "debug" information, but that is minimal. (line 147 of the batch file).

I am at a loss.  The program works great in both debug and release builds, when loaded via the JTAG XDS100 v2.  But won't run with the SD card.

Here is the linker output stage.  It doesn't run "tiimage", so I manually run it to create the "app" after the build is done.  I have verified that "tiimage" is doing what it is supposed to.

making ../src/sysbios/sysbios.aea8fnv ...
gmake[2]: Nothing to be done for 'all'.
'Building target: RNDIS_NDK.out'
'Invoking: ARM Linker'
"C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.9.0.STS/bin/armcl" -mv7A8 --code_state=32 -me -O2 --opt_for_speed=3 --define=am3359 --define=am335x --define=SOC_AM335x 
--define=bbbAM335x --diag_warning=225 --diag_wrap=off --display_error_number -z -m"RNDIS_NDK.map" --heap_size=0x800 --stack_size=0x800 -i"C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.9.0.STS/lib"
-i"C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.9.0.STS/include" --reread_libs --define=A8_CORE=1 --diag_wrap=off --display_error_number --warn_sections --xml_link_info="RNDIS_NDK_linkInfo.xml"
--rom_model -o "RNDIS_NDK.out" "./main.obj" "./LCD/lcd.obj" "./ti/custom/cpsw_driver_customization.obj" "./ti/ndk/hal/timer_bios/lltimer.obj" *** LONG LIST TRIMMED **** "./ti/starterware/platform/gpio.obj" "./ti/starterware/platform/usb.obj" "./ti/starterware/system/cp15.obj" "./tools/common.obj"
"./usb/rndis.obj" "./usb/stats.obj" "./usb/usbdriver.obj" -l"configPkg/linker.cmd" -llibc.a <Linking> 'Finished building target: RNDIS_NDK.out' ' ' 'Invoking: ARM Hex Utility' "C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.9.0.STS/bin/armhex" -o "RNDIS_NDK.hex" "RNDIS_NDK.out" Translating to Extended Tektronix format... "RNDIS_NDK.out" .text ==> .text "RNDIS_NDK.out" .const.1 ==> .const.1 "RNDIS_NDK.out" .const.2 ==> .const.2 "RNDIS_NDK.out" .init_array ==> .init_array "RNDIS_NDK.out" .vecs ==> .vecs "RNDIS_NDK.out" .cinit ==> .cinit warning: Data is being written to auto-generated file RNDIS_NDK.x1 warning: Data is being written to auto-generated file RNDIS_NDK.x2 warning: Data is being written to auto-generated file RNDIS_NDK.x3 'Finished building: RNDIS_NDK.hex' ' ' "C:/ti/ccsv7/utils/tiobj2bin/tiobj2bin.bat" "RNDIS_NDK.out" "RNDIS_NDK.bin" "C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.9.0.STS/bin/armofd.exe" "C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.9.0.STS/bin/armhex.exe" "C:/ti/ccsv7/utils/tiobj2bin/mkhex4bin.exe" ROMS { all_mem: o = 0x80369838, l = 0x40338 } ' ' **** Build Finished ****

All the other posts I've seen were from people who had errors locating and running these executable.  I don't have any issue running them to make the conversions, only attempting to get it to load to the BBB via and SD card.

Any ideas where I can even start looking?   I have no way to know if it's converting the OUT to BIN correctly. 

I have to assume the MLO is loading this image, but something is configured wrong, or some entry point setting is wrong. 

Thanks.

-CSW

  • The RTOS team have been notified. They will respond here.
  • CSW,

    Looking through the other threads that you mentioned, did you come across this one by chance?
    e2e.ti.com/.../425603

    wondering if this has some info that would move you along.

    Lali
  • Chris,

    As you may know from TI Processor SDK RTOS Release Notes, that the only ARM tools chain that we support for Cortex A8 based platforms is the ARM GCC tool chain that we include along with the Software development Kit.

    Having said that both the TI Compiler and GCC compiler creates a ELF binary file so the post processing steps to create the boot image if the .out has been created correctly will remain the same. you need to create a flat binary using obj-copy utility and then append the TIIMAGE header to the binary as described here:
    processors.wiki.ti.com/.../AM437x

    Note that you need to have the entry point correctly as described in the bootloader Usage notes here:
    processors.wiki.ti.com/.../AM437x

    Regards,
    Rahul
  • Rahul,
    Thanks for your reply, however it is still not working... All my steps are below, but in nutshell I was already following the steps you provided links to, and not having success.

    As a reminder, I do have these boot loader steps working for projects built with the GCC compiler, but our company enterprise wide tool is the TI compiler, so I need to built and test my units in that environment.

    And, I am also able to get a failure just using a newly created project that just blinks the LED using the TI compiler.  Works from JTAG, but doesn't bootload.  So that is a tiny example which still fails.

    First, I know the MLO bootloader works, as it is successfully used to load projects written in GCC. So I have not changed it (does it need to be changed for TI projects?).  It came from the sd_card.img.gz after unpacking the image to the SD card (the file is date 6/25/17 and is 83,028 bytes).

    Also, I routinely open the "app" file in a binary editor to confirm that the header is correctly pre-pended to the file, as performed by "tiimage.exe".

    And I have executed the arm-none-eabi-objcopy, tiimage, mkhex4bin and others,... following the  tiobj2bin.bat as well as pdkAppImageCreate.bat, in an attempt to manually execute the processes, and just to confirm what is happening.

    I consulted the page:
    processors.wiki.ti.com/.../AM437x
    However, the app is relatively small (261K), so I don't think it is an issue with size. But to confirm, I checked the output linker.cmd file.  I see that  MEMORY  ... defines SRAM_LO, SRAM_HI, OCMC_RAM, and DDR, the SECTIONS  only use DDR. So everything is in DDR at address 0x8000000+

    This isn't a "long time to load" problem, as I have waited plenty of time (minutes) and it never comes up.  And to repeat, this failure also occurs with a small LED flash demo program (93k in size)

    ------ Here is the long version of my steps ------

    It's actually much longer considering the other permutations I have tried.  But I don't want to waste too much time telling you all the things I've tried. 

    (I just now tried these again to confirm):
    I tried just using the

    ${TI_PDK_INSTALL_DIR}/packages/pdkAppImageCreate.bat

    and it gave me a failure... which I expected (since I am not linking to any PDK tools, that environment is not set ).

    /packages/pdkAppImageCreate.bat /packages C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.9.0.STS C:/Users/scott/workspace_v7/RNDIS_NDK/Release RNDIS_NDK AM335x arm
    makefile:355: recipe for target 'post-build' failed
    'csv7' is not recognized as an internal or external command,
    operable program or batch file.
    gmake[2]: [post-build] Error 1 (ignored)

    So I went straight to a command prompt to do it manually. I also modified the batch file to turn echo on and changed the forward slashes to back slashes, just to make sure Microsoft Windows wasn't going to complain.

    And it can't find the tool

    'C:\ti\ccsv7\tools\compiler\ti-cgt-arm_17.9.0.STS/bin/arm-none-eabi-objcopy' is not recognized as an internal or external command,

    Again, expected, because the tool is a GCC tool. So I searched and found two of them, and altered the command line to point to the newer one located in: C:\ti\ccsv7\tools\compiler\gcc-arm-none-eabi-6-2017-q1-update\bin

    Then I got this WARNING:

    C:\ti\ccsv7\tools\compiler\gcc-arm-none-eabi-6-2017-q1-update\bin\arm-none-eabi-objcopy: RNDIS_NDK.out: warning: sh_link not set for section `.ARM.exidx'

    I'm not sure about it, because I am not deeply familiar with the ELF formatting. But it moved to the next step.

    It also failed on "tiimage", also not a surprise, so I fixed that path as well.  No big issue there.

    And I finally got a "bin" file and an "app". I manually verified the correct values in the "TI header", so I am confident that "tiimage.exe" is executing properly.
    I loaded it, and got nothing. But I didn't expect to, as the entry address was set to 0x80000000. So I changed it to the value that was listed in the MAP file: 0x80390d30
    I deleted the "bin" and "app" and re-ran the script, but this "app" still doesn't work.

    Next I changed the "arm-none-eabi-objcopy" to use the other location I found in C:\ti\gcc-arm-none-eabi-4_9-2015q3.  I dn=on't know if there is any significant difference.

    I got the same warning, and got the same bin and app file. But that didn't work either.

    in the end, my manual execution of the script looks like this:

    C:\ti\pdk_am335x_1_0_7\packages\pdkAppImageCreate.bat C:\ti\pdk_am335x_1_0_7\packages C:\ti\gcc-arm-none-eabi-4_9-2015q3 C:\Users\scott\workspace_v7\RNDIS_NDK\Release RNDIS_NDK AM335x arm

    Something I noticed that is interesting is that the start of the app file has the 8 byte header, followed by static TEXT, see the screen shot below.  So I know I can't use 0x80000000 as the entry point, because that isn't executable code at the beginning.  Doesn't that mean one of the steps, like "arm-none-eabi-objcopy.exe" is moving the actual entry point?   If so, where do I find out it's been moved to?

    Or how am I supposed to put some kind of "jump" instruction at location 0x00 to jump to the "_c_int00" entry point, when the SYS/BIOS config is doing everything under the covers and out of my control?

    I am thinking the solution to this is some modification to the linker script to change the order of the sections... but I don't know what.

    I hope this helps explain what I'm doing, and helps us figure out how to make this work with the TI compiler environment.

  • Chris,

    Thanks for providing the details. I think, I have a fair idea of what you are trying to do based on the description here.

    You have described most of the steps for creating the app image but haven`t mentioned if you have tried to debug this using the SBL/MLO. The bootloader provided in the SDK is like any other applicatiton code that can be loaded over the emulator and debugged. IF you load the .out of the bootloader from the location <PDK_INSTALL_PATH>\packages\ti\starterware\binary\bootloader\bin and set break point in the source code  in sbl_main.c in the file found under <PDK_INSTALL_PATH>\packages\ti\starterware\bootloader\src

    this will tell you if the bootloader is able to detect the entry point in the application correctly and also see if the application gets loaded in correctly. If it finds the entry point correctly and loads the application correctly then I agree with you that at the entry point you provided using TIIMAGE utility, you need to place Cinit00 at 0x80000000. this is described in the following wiki:

    In your CCS project, the link order will be critical. In CCS Project "Build settings", configure the link order such that c_int00 is placed first at the base of DDR before the other sections are linked from the linker command file generated by SYSBIOS. For GCC builds, the RTOS seems to be placing this at 0x80000000 as expected by the bootloader:

    the other thing to check to confirm this placement, would be to look at the .map file that is generated at the end of the build and confirm the entry point is placed at location 0x80000000

    Regards,

    Rahul

    PS: Refer to the Common debug steps for debugging boot issues.where we have highlighted the need to check configuration of entry points.

    http://processors.wiki.ti.com/index.php/Processor_SDK_RTOS_Boot#Common_Steps_to_debug_application_boot 

  • Ah...
    That was something else. I was going to bring it up later, as I didn't think it would help with this...
    After debugging only using the JTAG loading process, I don't even know how to attach CCS to a running BBB and tell it to pause. CCS seems to insist that it load and replace everything via the XDS100v2 debugger. So whatever the MLO had loaded is now gone.

    I spent about thirty minutes trolling about CCS and wen sites trying to figure out how to attach to a running program in the BBB without loading it. No luck. I change the "perspective" to debug, but all the menu options are greyed out until I tell CCS to load the program.

    I will study this in depth, and try it this weekend (have other things taking my attention right now). But I want to confirm that I see what you are talking about, so it opens another avenue to understanding this and figuring out what is going on.

    Thanks. I will followup with a "success" or a request for more assistance in a few days.

    -CSW
  • While I haven't done this with the Sitara device, I have done this with other devices. The key here is that you cannot use the "Debug" toolbar button as that will, as you point out, replace the program already in memory. 

    The "Debug" toolbar button accomplishes a number of steps:

    • Builds the active project.
    • Launches a debug configuration (.ccxml) and switches to the Debug perspective
    • Connects to the Target processor
    • Loads the program code from the active project

    To connect with a program that is already resident on the target board, you need to do each of these steps independently. In the case where the program is already resident, you shouldn't need to rebuild it, so we'll skip that step.

    1. Open the "Target Configurations" window (View->Target Configurations)
    2. In the "Edit" perspective, find your .ccml file in the Target Config window and right-click to "Launch Selected Configuration"
      • At this point, you should be in the "Debug" perspective
    3. Connect to your target (Run->Connect Target)
      • At this point, you should be connected to your target board
    4. You don't want to load your program, but you will probably want to load the debug symbols from your program
      • Run->Load->Load Symbols... and then select your executable file from your project

    Hopefully, this will get you started.

    -Scott

  • Scott, Rahul,

    None of this is working...

    1.  I tried to create a Target config and open it.  It seemed to work, until I did a "connect to target"  It tells me the device is held in reset.

    WHAT??  It's a bare board, even the EEMC has been erased.  The board is dead until I load it with something.  There are no connectors hanging off of it except for the JTAG.  Where does it think it's being HELD in a reset condition?

    But, with my project open, it downloads and runs my "Blink LED" test program.  So why will it REFUSE to let me connect to the device with this one-off target config file??

    So I can forget trying to attach to the MLO bootloader or to my code.  However, as I said when I started this, the whole thing works when built in GNU, except I have to manually change the entry point to match what the map files told me it was.  Therefore, I conclude that the MLO is working just fine.

    2.  I tried to follow the link Rahul provided:

    processors.wiki.ti.com/.../Accessing_c_int00

    There is a statement "To place the .text symbol at an explicit address, add a custom linker command (.cmd) file to your project"...  Really?  Named what?  Where?  I just created a CUSTOM.CMD file, and it made NO DIFFERENCE in my output.  The map file is completely unchanged whether the file is there or not.

    If it would tell me something substantially less vague, this actually might solve my problem.  Then again, it might not.  I tried to manually assign the _c_init00 to location 0x8000000, and the linked said it wouldn't fit.  Duh.  I need a "jump to _c_int00" instruction there.  Not the whole entry point.  With Sys/Bios doing everything behind my back, I have no idea how this would be done.

    -CSW

  • Scott, Rahul,

    Update... but it's still broken. 

    But I did manage to get it to connect and load...  The problem was I didn't highlight the A8 core when I selected "Connect".  It apparently thought I wanted to connect to the M3 core.  (when I debug a project the FIRST time, it asks me which core.  Then it remembers.  I imported the same "ccxml" file from a project, but it didn't know I wanted to connect to the A8.  WHY??  Why doesn't it know which core to use from the "ccxml" when it remember for my project.  Truly VERY annoying.  But I digress...)

    Okay, step ONE.  A brutally simply "Flash the LED" program works when written in GNU, but doesn't work when written in TI compiler. Identical code.

    The GNU version has a map file that says:

     .c_int00       0x80000000       0xb4 C:\ti\bios_6_46_05_55\packages\gnu\targets\arm\rtsv7A\lib\boot.aa8fg(boot.oa8fg)
                    0x80000000                _c_int00

    So, we can see that the entry point is at the beginning of the memory location, where we would expect.  On the other hand, the TI version map files says:

    OUTPUT FILE NAME:   <TI_BLinkTest.out>
    ENTRY POINT SYMBOL: "_c_int00"  address: 80008698

    So, we can see it does't match.  And I know of no way to FORCE it to match.  The Sys/Bios is providing this stuff...

    So, put the GNU version of APP on the SD card, along with the "bootloader_boot_mmcsd_a8host_debug_ti.bin"  which I renamed to MLO. 

    I inserted the CD card, then I connected the JTAG, loaded the "bootloader_boot_mmcsd_a8host_debug.out" loader, which should match the MLO of the code.  Stopped at the beginning, loaded the "sbl_main.c" file, and was able to step through the bootloader.  So, that is all good.  It loaded the "APP" and read the TI header, loaded the program to address 0x8000000 as expected.  All works.

    I repeated this with the APP set to the entry point of 0x80008698  because that is what the map file tells me. And it did load the image, and I could see the address of 0x80008698. But, here's the problem.  The MLO is assuming the the entry point and the base address ARE THE SAME.  Well, that will NEVER work.

    Here's the code from the MLO  sbl_mmcsd.c, line 221:

            pDestAddr = (uint8_t *)imageHdr.load_addr;
            *pEntryPoint = imageHdr.load_addr;
        }

    So, how am I supposed to set an entry point for the "_c_int00" location that is DIFFERENT from the destination address?  Because that is what the TI version of the tools did to me!

    Or... how am I supposed to tell the TI version of the compiler tools to place the "_c_int00" function (or it's equivalent BL instruction) at the location 0x80000000 to match the load address??  I'll be happy to just add a miniature assembler code with a BL instruction, if I could tell the build system where to place it.  But alas, the Sys/Bios doesn't let me do that that I can find.

  • Chris,

    For this mechanism to work, your load address and entry point needs to align. My recommendation is still to use the guidance provided in the wiki but modify this to match your linker output
    processors.wiki.ti.com/.../Accessing_c_int00

    that guidance seems to be provided for DSP/C28x devices where the entry point is .text:_c_int00. since you are using TI ARM compiler and your entry point is being placed in section .c_int00. Try and use the following syntax that is provided by the TI ARM compiler team here and let us know if you still see this issues.
    e2e.ti.com/.../2209073


    Regards,
    Rahul

    PS: Note that the TI ARM compiler for Cortex A8 is not TI supported use case for this device, so this is a custom setup that can`t be expected to work out of the box with the SDK setup.
  • Rahul Prabhu said:
    Chris,

    For this mechanism to work, your load address and entry point needs to align. My recommendation is still to use the guidance provided in the wiki but modify this to match your linker output
    processors.wiki.ti.com/.../Accessing_c_int00

    Rahul,

    I've read this. And I've tried it,  But this doesn't provide me enough information... "add a custom linker command (.cmd) file to your project "

    WHAT linker cmd file??   I will repeat:  The Sys/Bios build environment ERASES AND REWRITES the build scripts.  So how am I supposed to put in my own??

    I just arbitrarily created a "command.cmd" file, and just tossed it into the project.  There was no difference.

    Rahul Prabhu said:


    that guidance seems to be provided for DSP/C28x devices where the entry point is .text:_c_int00. since you are using TI ARM compiler and your entry point is being placed in section .c_int00. Try and use the following syntax that is provided by the TI ARM compiler team here and let us know if you still see this issues.
    e2e.ti.com/.../2209073

    Per one of the replies, it clearly DOES NOT SAY where to stick that piece of text.  So I just added it to the CFG script:

     I added ".c_int00 { boot.aea8f<boot.oea8f>(.text) } : load > 0x80000000, run > 0x80000000" to the script.  And of course the XDC barfed all over it.

    js: "C:/Users/scott/workspace_v7/TI_BLinkTest/app.cfg", line 1: Compilation produced 1 syntax errors.
    js: "./package/cfg/app_pea8fnv.cfg", line 195: Compilation produced 1 syntax errors. (C:/Users/scott/workspace_v7/TI_BLinkTest/app.cfg#1)
    gmake.exe: *** [package/cfg/app_pea8fnv.xdl] Error 1

    So my question remains:  How do I coerce the build environment to set these values to what I want, when it doing all this stuff behind my back, and under the covers?

    I know WHERE the load and entry point needs to be.  I know WHAT ADDRESS the entry point needs to be. I know WHAT SYMBOL needs to be set to that address.  I know what SECTION NAME needs to be set to that address...  How do I do it when XDC and Sys/BIOS are running everything behind my back and don't let me control it?  

  • Chris,

    The syntax from the other E2E needs to be added in the custom.cmd file that you had added to your project and not in the .cfg file. The .cmd file will not be used by the XDC tools. It will only be consumed by the TI ARM Linker utility when it is making the decision of placing symbols.

    Regards,
    Rahul

  • Rahul,

    Can you spell this out??  All I am doing it throwing random changes because nothing is specific.

    In my "custom.cmd" file:

    .c_int00 { boot.aea8f<boot.oea8f>(.text) } : load > 0x80000000, run > 0x80000000

    Error:

    <Linking>
    "../custom.cmd", line 1: error #10008-D: cannot find file ".c_int00"
    "../custom.cmd", line 1: error #10021-D: expecting filename, option, MEMORY, or SECTIONS instead of "{"
    "../custom.cmd", line 1: error #10021-D: expecting filename, option, MEMORY, or SECTIONS instead of ":"
    error #10010: errors encountered during linking; "TI_BLinkTest.out" not built

    Then I changed the label:

    ._c_int00 { boot.aea8f<boot.oea8f>(.text) } : load > 0x80000000, run > 0x80000000

    Error:

    <Linking>
    "../custom.cmd", line 1: error #10008-D: cannot find file "._c_int00"
    "../custom.cmd", line 1: error #10021-D: expecting filename, option, MEMORY, or SECTIONS instead of "{"
    "../custom.cmd", line 1: error #10021-D: expecting filename, option, MEMORY, or SECTIONS instead of ":"
    error #10010: errors encountered during linking; "TI_BLinkTest.out" not built

    And again, change the label:

    _c_int00 { boot.aea8f<boot.oea8f>(.text) } : load > 0x80000000, run > 0x80000000

    Still:

    <Linking>
    "../custom.cmd", line 1: error #10008-D: cannot find file "_c_int00"
    "../custom.cmd", line 1: error #10021-D: expecting filename, option, MEMORY, or SECTIONS instead of "{"
    "../custom.cmd", line 1: error #10021-D: expecting filename, option, MEMORY, or SECTIONS instead of ":"
    error #10010: errors encountered during linking; "TI_BLinkTest.out" not built

    Okay... enough of this...  lets try making a "linker" looking script:

     SECTIONS {
       .text:c_int00 > 0x80000000
     }

    No error, but the entry point is still 0x80008698.  Tried "._c_int00"  "_c_int00"  etc...  

    Try sticking that text from the E2E posing inside a "section"

     SECTIONS {
       .text:.c_int00 { boot.aea8f<boot.oea8f>(.text) } : load > 0x80000000, run > 0x80000000
     }

    Nope. Error:

    <Linking>
    "../custom.cmd", line 2: error #10008-D: cannot find file "boot.aea8f"
    "../custom.cmd", line 2: error #10026-D: expecting output section, GROUP, or UNION instead of ":"
    "../custom.cmd", line 2: warning #10068-D: no matching section
    error #10010: errors encountered during linking; "TI_BLinkTest.out" not built

    ( boot.aea8f is the startup entry generated by XDC??  But not in this case.  So what is it in this case?  And where is that documented?)

    So I tried removing that file, and using "_c_int00"  "._c_int00"  ".c_int00"  ".c_int00"...

    SECTIONS {
       .text:c_int00  : load > 0x80000000, run > 0x80000000
    }

    No build errors, but the entry point in the map file is STILL

    OUTPUT FILE NAME:   <TI_BLinkTest.out>
    ENTRY POINT SYMBOL: "_c_int00"  address: 80008698

    It is not working.

  • It works now...

    I have a "custom.cmd" file in the root level of the project.  After carpet bombing a bunch of different things, I dug into the MAP file to find out where this mystery SYSBIOS library was providing the 
    "_c_int00".  Based on the address of 80008698, I looked at the map file, and it turns out is it something called boot.aea8fnv...  and, if I am reading the map file correctly, that was pulled from object file boot.oea8fnv.

    ENTRY POINT SYMBOL: "_c_int00"  address: 80008698
    
          800085a0    0000007c     sysbios.aea8fnv : arm_TaskSupport_asm.obj (.text:_ti_sysbios_family_arm_TaskSupport_buildTaskStack)
          8000861c    0000007c     ti.targets.arm.rtsarm.aea8fnv : Assert.oea8fnv (.text:xdc_runtime_Assert_raise__I)
    --->> 80008698    00000074     boot.aea8fnv : boot.oea8fnv (.text)
          8000870c    00000074     sysbios.aea8fnv : BIOS.obj (.text:ti_sysbios_family_arm_a8_intcps_Hwi_dispatchFIQC__I)
    

    So, next I had to create the "SECTION" in my custom.cmd file to tell it to load that at address 80000000:

    SECTIONS {
        .text:_c_int00 { boot.aea8fnv<boot.oea8fnv>(.text) } > 0x80000000
    }

    But this one failed as "file not found".  (Why??  The linker knows where that file is when it linked...?).  So I seached the bios_xx_yy_yy_aa folder for that file, and found it. Then I put the absolute path into the script:

    SECTIONS {
        .text:_c_int00 { C:\ti\bios_6_46_05_55\packages\ti\targets\arm\rtsarm\lib\boot.aea8fnv<boot.oea8fnv>(.text) } > 0x80000000
    }

    Re-ran the build, and got the entry point where it's supposed to be.

    ENTRY POINT SYMBOL: "_c_int00"  address: 80000000
    output                                  attributes/
    section   page    origin      length       input sections
    --------  ----  ----------  ----------   ----------------
    .text:_c_int00 
    *          0    80000000    0000008c     
                    80000000    00000074     boot.aea8fnv : boot.oea8fnv (.text)
                    80000074    00000008     rtsv7A8_A_le_n_v3_eabi.lib : args_main.obj (.tramp._args_main.1)

    Then I could create the "app" using the "arm-none-eabi-objcopy.exe" and the "tiimage.exe" programs, load it on the SD card, and it worked.  My little batch file to do that is

    C:\ti\ccsv7\tools\compiler\gcc-arm-none-eabi-6-2017-q1-update\bin\arm-none-eabi-objcopy.exe -O binary TI_BLinkTest.out TI_BLinkTest.bin
    
    C:\ti\pdk_am335x_1_0_7\packages\ti\starterware\tools\ti_image\tiimage.exe 0x80000000 NONE TI_BLinkTest.bin app

    Where (in this case) the compiler output file name was "TI_BlinkTest.out" and it generates the file named "app".

  • thanks for sharing the solution here Chris and glad to see you resolve your boot issue when using the TI ARM compiler.
  • No problem.
    Personally I find it annoying when people post things like "I solved it by changing that -E setting"... without giving specifics. I think they should put in details for the rest of us.

    OTOH, I'm rather offended that the forum has me profiled as "expert" with 2315 points. I'm more "lost and annoyed" than "expert"...