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.

Booting SYS-BIOS from microSD in beaglebone black

Other Parts Discussed in Thread: SYSBIOS

I have been successfuly in booting Starterware codes with .init address 0x80000000 from SD card by using the MLO bootloader file bundled along in the Beaglebone patch for Starterware. 

But I noticed that the boot.bin file in Starterware is of bigger size actually(43KB) which means it is not the same as MLO file in the patch which is of 26kB. 

I am facing trouble in booting SYS-BIOS based codes in Beaglebone black. I thought of checking out boot project of starterware to understand the problem. 

I found that it accepts 0x80000000 as starting address explicitly. Hence, I followed http://e2e.ti.com/support/embedded/starterware/f/790/t/326940.aspx?pi199177=2 thread and got my _c_int00 to the same address in .map file.

Yet, the code does not boot. Please help me solve this issue. It is kind of urgent. 

  • Hello,

    Are you using Industrial SDK or Starterware? Where you able to find an info while debugging the bootloader? Also please share the UART logs.

    Thanks,
    Vinesh

  • Hello Vinesh,

    I am using StarterWare AM335x Boot Loader file for booting from uSD card.

    The UART log hangs at the same place "Jumping to Starterware application" which clearly means the application is not being executed. 

    I thought of going through the "boot" project and rebuilding the file but it seems there is some issue. The "boot.bin" file that I obtained was of higher size which means it was not the same.

    Kindly suggest which boot file to use for SYS-BIOS related boot process.

    I have Industrial SDK package also with me. Do you think the boot.bin from the ISDK will help?

  • Any TI people could you please help for the same???

    It is really important for me to get it done asap...

  • Hello,

    You can ignore the size of the binary, as it could be different based on build configurations(debug/release)

    Abhishek Kothari said:
    The UART log hangs at the same place "Jumping to Starterware application" which clearly means the application is not being executed. 

    This can happen due to many reasons

    • c_int is not placed at 0x80000000 (cross-check map file)
    • Application is running, but in some dead loop (Put a UART message at the beginning of application)
    • Application has crashed (Try to debug the application)

    Regards,
    Vinesh

  • Hello Vinesh,

    Thank you for your reply. Will try it and then get back to you.

    As far as I understand, the application is not running at all because the application is configured merely to blink LED using a defined "task" instance.

  • Hello,

    To debug the SD card application, do the following

    • Connect to A8 via CCS
    • Put a "Hardware Breakpoint" at 0x80000000 
    • When the breakpoint is hit(if it doesn't hit, the issue is with Bootloader), click on "Load Symbols"(Not Load Program) and load your .out

    Regards,
    Vinesh

  • Hi I have a huge problem trying to build the boot.bin file in the Am335x starterware I recently applied my BBB patch and when I use the mingw command in the cmd that is in the quick start guide nothing happens and never makes it named _boot.bin I only have the MLO file in the bootloader eMMC directory can anyone pleas explain to me the process for the beaglebone black I cant seem to get around this step

  • I had this problem too, this is my solution (hope it helps because I see this is quite old now).

    If you use the ti compiler then add the following to your .cfg (from here: processors.wiki.ti.com/.../BIOS_with_GCC_%28CortexA%29)

    Program.sectMap[".init  { boot*(.text) }"] = new Program.SectionSpec();

    Program.sectMap[".init  { boot*(.text) }"].loadAddress = 0x80000000;

    if you using the gcc compiler then it is (from here: processors.wiki.ti.com/.../BIOS_with_GCC_(CortexA))

     Program.sectMap[".c_int00"] = new Program.SectionSpec();

    Program.sectMap[".c_int00"].loadAddress = 0x80000000;

    Program.sectMap[".c_int00"].runAddress = 0x80000000;

    Then it is just the case of converting your .out to a .bin, then to a _ti.bi (with: tiimage 0x80000000 NONE xxx.bin xxx_ti.bin) and that worked for me. 

    Hope this helps people who have this problem in the future.

  • Hi Roland,

    I'm trying to   transplant the example projects in am335x_sysbios_ind_sdk_1.1.0.8 to a BeagleBone Black device. Could you please share your MLO and app file that can boot a SYS/BIOS program on BeagleBone Black ?

    Thank you very much!

  • Hi George

    I haven't worked on this for a while now but was planning to get back into it. I will have a look this weekend and see if I have the boot file etc still. Are you working on a linux OS or windows? Are you using the TI toolset or the GCC toolset. After a lot of time spent, I found that the GCC toolset on a linux OS (ubuntu in my case) gave me the most joy.

  • Hi Roland,

    I'm excited for your response!

    I'm using TI arm compiler with CCSv6 on Windows 7. In the past I tried Linux(Ubuntu) on my PC, but it often crashed. CCS seems easy to use, but I agree that Linux is very important for developers.

    I hava an ICEv2 board and a BBB board. I use Teraterm as UART tool.

    I've tested the example projects "enetLwip_sysbios", "profinet_slave_RT", "uartecho" in am335x_sysbios_ind_sdk_1.1.0.8 They can run on the ICEv2 board perfectly.(I hava a Siemens PLC, too). These are finished with CCSv6 on Windows 7.

    To deal with BBB board, firstly I downloaded AM335X_StarterWare_02_00_01_01 and the BBB support patch. I get a MLO from the patch. With this MLO for BBB, all the beaglebone projects in starterware run well on BBB booted with SD card.(I connect an UART-USB cabel on J1 on BBB, and it performs well)

    But the I'm puzzled with the projects in am335x_sysbios_ind_sdk. Today I build the uartecho without modification in ind_sdk and get the .bin file. Renamed it "app". Copy to SD card this "app" file and the MLO file methoned above. The serial port suggests "...Jumping to Starterware application". Then there was no response from the BBB board.

    I guess this behavior means MLO has been loaded. I cannot confirm whether the app is loaded. If app is loaded, it means the app doesn't suit the BBB board(I haven't modified the hardware configuration of the ind_sdk project). If app isn't loaded, it means the MLO can load a starterware app but cannot load a ind_sdk app.

    Next I prepare to modified the hardware configuration, but I have no idea now. I'd appreciate it very much if you could share your experience,:)
  • I haven't worked with the am335x_sysbios_ind_sdk I have only worked with the Starterware HAL type stuff in sysbios.

    It sounds like you having troubles with you linker and specifying where your application begins in memory. In the sysbios projects, there should be a .cfg file. This is the configuration file for the hardware and linker type stuff for the project. You need to specify where the MLO is going to load your application into the RAM in this .cfg file. With the CCS toolset this is done by placing the following anywhere in the .cfg file:

    Program.sectMap[".init { boot*(.text) }"] = new Program.SectionSpec();
    Program.sectMap[".init { boot*(.text) }"].loadAddress = 0x80000000;

    This tells the linker to map your memory segments accordingly and that program initialisation will be at address 0x80000000 in RAM. When you compile your application you need to use ti_image to convert the .bin with the following arguments

    tiimage.exe 0x80000000 NONE xxx.bin app

    This basically provides a header for the bootloader (MLO) so that it knows where to put the application in RAM. The bootloader will then put the application in memory, starting at 0x80000000 and all should run smoothly. Sometimes the project is setup to run the ti_image command for you, so check you post compile steps.

    The .cfg file is very important in sysbios so I suggest you get to know it and its gui functionality in the eclipse plugin. This is where you configure the MMU not to cache certain memory segments so that you can access peripheral registers without the program crashing with memory violations. This is described quite nicely here: e2e.ti.com/.../997664

    Good luck and I hope this helps