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/TMS320F28069M: Merging bootloader and application projects

Part Number: TMS320F28069M

Tool/software: TI C/C++ Compiler

Hi,

I have two projects. One project for bootloader and another for my application(motor_controller). I want to merge  bootloader.out and motor_controller.out files to create a single .out file, which I can flash.

I referred to this link  http://processors.wiki.ti.com/index.php/Combining_executable_files .

I have followed the Example 3: Build boot loader with embedded boot image

ofd2000.exe motor_controller.out 

Output seen:

Step 1
Create the boot image of the application: 

hex2000.exe motor_controller.out --section_name_prefix = 'app_image' --load_image -o app_image.obj

Output seen:

ofd2000.exe app_image.obj

output seen:

 

Step2 :

lnk2000.exe c2000_bootloader.obj app_image.obj F28069_bl.cmd -o boot.out /*  here F28069_bl.cmd is the linker command script i am using */

Output seen :

I am also attaching my linker( attached F28069_bl.txt changed the format to .txt as cmd was unable to attach)

Can anybody help me understand this problem and help me merge the out files.

F28069_bl.txt
Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*
//###########################################################################
//
// FILE: F28069.cmd
//
// TITLE: Linker Command File For F28069 Device
//
//###########################################################################
// $TI Release: F2806x Support Library v2.04.00.00 $
// $Release Date: Mon May 27 06:46:38 CDT 2019 $
// $Copyright:
// Copyright (C) 2009-2019 Texas Instruments Incorporated - http://www.ti.com/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the
// distribution.
//
// Neither the name of Texas Instruments Incorporated nor the names of
// its contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// $
//###########################################################################
*/
/* ======================================================
// For Code Composer Studio V2.2 and later
// ---------------------------------------
// In addition to this memory linker command file,
// add the header linker command file directly to the project.
// The header linker command file is required to link the
// peripheral structures to the proper locations within
// the memory map.
//
// The header linker files are found in <base>\headers\cmd
//
// For BIOS applications add: F2806x_Headers_BIOS.cmd
// For nonBIOS applications add: F2806x_Headers_nonBIOS.cmd
========================================================= */
/* ======================================================
// For Code Composer Studio prior to V2.2
// --------------------------------------
// 1) Use one of the following -l statements to include the
// header linker command file in the project. The header linker
// file is required to link the peripheral structures to the proper
// locations within the memory map */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 

Thanks

Nandini

  • You made a syntax error in your linker command file.  On this line ...

       .app_image          : {*(image_1)} > LOAD=APP_FLASH, RUN=RAML01234    
    

    Remove the character ">".  Then it will work.

    The linker should do a better job of telling you about this syntax error.  So, I filed the entry CODEGEN-6499 in the SDOWP system to have this investigated.  You are welcome to follow it with the SDOWP link below in my signature.

    Thanks and regards,

    -George

  • Hello George,

    Thanks a lot for quick reply. I did remove the character ">", this resolved the first 3 errors. I still do have errors. These errors must be because of my placement of the sections and grouping them in boot loader and application. I am attaching my both linker files for reference. 

    4431.F28069_bl.txt
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    /*
    //###########################################################################
    //
    // FILE: F28069.cmd
    //
    // TITLE: Linker Command File For F28069 Device
    //
    //###########################################################################
    // $TI Release: F2806x Support Library v2.04.00.00 $
    // $Release Date: Mon May 27 06:46:38 CDT 2019 $
    // $Copyright:
    // Copyright (C) 2009-2019 Texas Instruments Incorporated - http://www.ti.com/
    //
    // Redistribution and use in source and binary forms, with or without
    // modification, are permitted provided that the following conditions
    // are met:
    //
    // Redistributions of source code must retain the above copyright
    // notice, this list of conditions and the following disclaimer.
    //
    // Redistributions in binary form must reproduce the above copyright
    // notice, this list of conditions and the following disclaimer in the
    // documentation and/or other materials provided with the
    // distribution.
    //
    // Neither the name of Texas Instruments Incorporated nor the names of
    // its contributors may be used to endorse or promote products derived
    // from this software without specific prior written permission.
    //
    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    // $
    //###########################################################################
    */
    /* ======================================================
    // For Code Composer Studio V2.2 and later
    // ---------------------------------------
    // In addition to this memory linker command file,
    // add the header linker command file directly to the project.
    // The header linker command file is required to link the
    // peripheral structures to the proper locations within
    // the memory map.
    //
    // The header linker files are found in <base>\headers\cmd
    //
    // For BIOS applications add: F2806x_Headers_BIOS.cmd
    // For nonBIOS applications add: F2806x_Headers_nonBIOS.cmd
    ========================================================= */
    /* ======================================================
    // For Code Composer Studio prior to V2.2
    // --------------------------------------
    // 1) Use one of the following -l statements to include the
    // header linker command file in the project. The header linker
    // file is required to link the peripheral structures to the proper
    // locations within the memory map */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    5001.F28069M.txt
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    /*
    //###########################################################################
    //
    // FILE: F28069.cmd
    //
    // TITLE: Linker Command File For F28069 Device
    //
    //###########################################################################
    // $TI Release: F2806x C/C++ Header Files and Peripheral Examples V135 $
    // $Release Date: Sep 8, 2012 $
    //###########################################################################
    */
    /* ======================================================
    // For Code Composer Studio V2.2 and later
    // ---------------------------------------
    // In addition to this memory linker command file,
    // add the header linker command file directly to the project.
    // The header linker command file is required to link the
    // peripheral structures to the proper locations within
    // the memory map.
    //
    // The header linker files are found in <base>\F2806x_headers\cmd
    //
    // For BIOS applications add: F2806x_Headers_BIOS.cmd
    // For nonBIOS applications add: F2806x_Headers_nonBIOS.cmd
    ========================================================= */
    /* ======================================================
    // For Code Composer Studio prior to V2.2
    // --------------------------------------
    // 1) Use one of the following -l statements to include the
    // header linker command file in the project. The header linker
    // file is required to link the peripheral structures to the proper
    // locations within the memory map */
    /* Uncomment this line to include file only for non-BIOS applications */
    /* -l F2806x_Headers_nonBIOS.cmd */
    /* Uncomment this line to include file only for BIOS applications */
    /* -l F2806x_Headers_BIOS.cmd */
    /* 2) In your project add the path to <base>\F2806x_headers\cmd to the
    library search path under project->build options, linker tab,
    library search path (-i).
    /*========================================================= */
    /* Define the memory block start/length for the F2806x
    PAGE 0 will be used to organize program sections
    PAGE 1 will be used to organize data sections
    Notes:
    Memory blocks on F28069 are uniform (ie same
    physical memory) in both PAGE 0 and PAGE 1.
    That is the same memory region should not be
    defined for both PAGE 0 and PAGE 1.
    Doing so will result in corruption of program
    and/or data.
    Contiguous SARAM memory blocks can be combined
    if required to create a larger memory block.
    */
    MEMORY
    {
    PAGE 0 : /* Program Memory */
    /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    output:

    . I am unable to build the bootloader project as well with this linker file. I get these errors.

    "../F28069_bl.cmd", line 206: warning: no matching section

    "../F28069_bl.cmd", line 206: warning: memory range not found: RAML01234 on

       page 1

    "../F28069_bl.cmd", line 206: error: program will not fit into available

       memory.  run placement with alignment/blocking fails for section

       ".app_image" size 0 page 1

     

    Thanks

    Nandini

     

  • Hello George,

    Thanks a lot for quick reply. I did remove the character ">", this resolved the first 3 errors. I still do have errors. These errors must be because of my placement of the sections and grouping them in boot loader and application. I am attaching my both linker files for reference. 

    2045.F28069_bl.txt
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    /*
    //###########################################################################
    //
    // FILE: F28069.cmd
    //
    // TITLE: Linker Command File For F28069 Device
    //
    //###########################################################################
    // $TI Release: F2806x Support Library v2.04.00.00 $
    // $Release Date: Mon May 27 06:46:38 CDT 2019 $
    // $Copyright:
    // Copyright (C) 2009-2019 Texas Instruments Incorporated - http://www.ti.com/
    //
    // Redistribution and use in source and binary forms, with or without
    // modification, are permitted provided that the following conditions
    // are met:
    //
    // Redistributions of source code must retain the above copyright
    // notice, this list of conditions and the following disclaimer.
    //
    // Redistributions in binary form must reproduce the above copyright
    // notice, this list of conditions and the following disclaimer in the
    // documentation and/or other materials provided with the
    // distribution.
    //
    // Neither the name of Texas Instruments Incorporated nor the names of
    // its contributors may be used to endorse or promote products derived
    // from this software without specific prior written permission.
    //
    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    // $
    //###########################################################################
    */
    /* ======================================================
    // For Code Composer Studio V2.2 and later
    // ---------------------------------------
    // In addition to this memory linker command file,
    // add the header linker command file directly to the project.
    // The header linker command file is required to link the
    // peripheral structures to the proper locations within
    // the memory map.
    //
    // The header linker files are found in <base>\headers\cmd
    //
    // For BIOS applications add: F2806x_Headers_BIOS.cmd
    // For nonBIOS applications add: F2806x_Headers_nonBIOS.cmd
    ========================================================= */
    /* ======================================================
    // For Code Composer Studio prior to V2.2
    // --------------------------------------
    // 1) Use one of the following -l statements to include the
    // header linker command file in the project. The header linker
    // file is required to link the peripheral structures to the proper
    // locations within the memory map */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    1440.F28069M.txt
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    /*
    //###########################################################################
    //
    // FILE: F28069.cmd
    //
    // TITLE: Linker Command File For F28069 Device
    //
    //###########################################################################
    // $TI Release: F2806x C/C++ Header Files and Peripheral Examples V135 $
    // $Release Date: Sep 8, 2012 $
    //###########################################################################
    */
    /* ======================================================
    // For Code Composer Studio V2.2 and later
    // ---------------------------------------
    // In addition to this memory linker command file,
    // add the header linker command file directly to the project.
    // The header linker command file is required to link the
    // peripheral structures to the proper locations within
    // the memory map.
    //
    // The header linker files are found in <base>\F2806x_headers\cmd
    //
    // For BIOS applications add: F2806x_Headers_BIOS.cmd
    // For nonBIOS applications add: F2806x_Headers_nonBIOS.cmd
    ========================================================= */
    /* ======================================================
    // For Code Composer Studio prior to V2.2
    // --------------------------------------
    // 1) Use one of the following -l statements to include the
    // header linker command file in the project. The header linker
    // file is required to link the peripheral structures to the proper
    // locations within the memory map */
    /* Uncomment this line to include file only for non-BIOS applications */
    /* -l F2806x_Headers_nonBIOS.cmd */
    /* Uncomment this line to include file only for BIOS applications */
    /* -l F2806x_Headers_BIOS.cmd */
    /* 2) In your project add the path to <base>\F2806x_headers\cmd to the
    library search path under project->build options, linker tab,
    library search path (-i).
    /*========================================================= */
    /* Define the memory block start/length for the F2806x
    PAGE 0 will be used to organize program sections
    PAGE 1 will be used to organize data sections
    Notes:
    Memory blocks on F28069 are uniform (ie same
    physical memory) in both PAGE 0 and PAGE 1.
    That is the same memory region should not be
    defined for both PAGE 0 and PAGE 1.
    Doing so will result in corruption of program
    and/or data.
    Contiguous SARAM memory blocks can be combined
    if required to create a larger memory block.
    */
    MEMORY
    {
    PAGE 0 : /* Program Memory */
    /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    output:

    . I am unable to build the bootloader project as well with this linker file. I get these errors.

    "../F28069_bl.cmd", line 206: warning: no matching section

    "../F28069_bl.cmd", line 206: warning: memory range not found: RAML01234 on

       page 1

    "../F28069_bl.cmd", line 206: error: program will not fit into available

       memory.  run placement with alignment/blocking fails for section

       ".app_image" size 0 page 1

     

    Thanks

    Nandini

     

  • I reproduced similar problems.  I made two changes, and the problems disappeared.

    On this line ...

      .app_image          : {*(app_image_1)} LOAD=FLASH, RUN=RAML01234
    

    Change FLASH to APP_FLASH.  There is no memory range named FLASH, though there are several memory range names that are similar.  I think you intend to use APP_FLASH, though you might intend to use a different one.

    On this line ...

    codestart           : > BEGIN
    

    Change it to ...

    codestart           : > BEGIN, PAGE 0
    

    Thanks and regards,

    -George

  • Hello George, 

    Thank you for pointing this out. I was able to figure that and now I am able to merge boot loader and application.

    Now I see a problem with app_table not being updated in the merged.out file. 

    app_table is defined in boot loader project in bl_entrytable.asm  as 

        .def _pAppEntry

        .def _pAppSig

     .sect "app_table"

    app_table:

    _pAppEntry    .long 0

    _pAppSig      .long 0

     And in my application project I have app_table defined as 

        .ref _pAppEntry

        .ref _pAppSig

       .sect "app_table"

    app_table:

    _pAppEntry    .long code_start

    _pAppSig      .long _CRCTestVector

    When I load the application.out . The memory location app_table in

    memory location: 0x3f4000 :code_start(0x003F 7FF6)

    0x3f4002 :_CRCTestVector(0x003E 58CC)

    which is correct.

    But my merge .out has app_table content as

    memory location: 0x3f4000 : (0xFFFF FFFF)

    0x3f4002 : (0xFFFF FFFF)

    Seems like this section has been not merged. Is it because both section has same content, ie same symbols? 

    How do I merge these symbols and point to the correct location which is present in the application software?

    Thanks

    Nandini   

  • Regarding the problem where the linker did not find the BEGIN memory range on PAGE 0 ... I filed the entry CODEGEN-6506 in the SDOWP system to have this investigated.  You are welcome to follow it with the SDOWP link below in my signature.

    Thanks and regards,

    -George