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.

[参考译文] TDA4VM:vision_app mcu1_0编译和链接问题

Guru**** 2482225 points
Other Parts Discussed in Thread: TDA4VM

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1449989/tda4vm-vision_app-mcu1_0-compilation-and-linking-problems

器件型号:TDA4VM

工具与软件:

SDK:0902 0806
电路板:tda4vm_evm

尊敬的 TI 专家:

sdk_builder/

编译 vision_app 时、我需要先编译:

make sdk -j2

然后、我编译 vision_app mcu1_0:

make vision_apps -j 1 PROFILE=release BUILD_CPU_MCU1_0=yes BUILD_CPU_MPU1=no BUILD_CPU_MCU2_0=no BUILD_CPU_MCU2_1=no BUILD_CPU_MCU3_0=no BUILD_CPU_MCU3_1=no BUILD_CPU_C6x_1=no BUILD_CPU_C6x_2=no BUILD_CPU_C7x_1=no

但我看到在实际编译的.out.map 文件中也编译了许多无用的库文件。 这将大大增加我的代码:的数量

这是因为我首先要编译静态库、然后编译应用、再在链接时链接中的所有静态库。 我应该在哪里修改哪些链接参数来避免此问题?

此致
伊森

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    因为我要将 vison_app_mcu1_0.out 更改为 vision_app_mcu1_0.bin、 如果上述问题未解决、这会导致编译的.bin 文件非常大。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想问另一个问题:
    vision_app 编译的.out 文件和 mcus 编译的.xer5f 文件的文件格式是否相同? 如果它们不相同、如何将.out 文件转换为.xer5f 文件? 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    C7x 的所有静态库都在 vision_apps/platform/j721e/rtos/concerto _c7x_inc.mak 中链接、对于 R5、它为  vision_apps/platform/j721e/rtos/concerto r5f_inc.mak。
    您可以从此处删除不需要的库及其依赖项。

    是的、.out 和.xer5f 是相同的。

    此致、

    Nikhil

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nikhil  

    我删除了许多库文件、但转换为 bin 后、这些文件都很大。



    祝你一切顺利
    伊森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、 Nikhil:

    您可以查看上面 visionapp 的映射文件。 实际上、代码量并不大、但转换为 bin 后的 bin 文件大小也非常大。 


    此致
    伊森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    有什么建议吗? 

    此致
    伊森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 EASON:

    我可以知道您如何转换为 bin 吗?

    您是否在这里剥离符号?

    此致、

    Nikhil

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Nikhil

    我转换为 bin 文件的命令是:μ F

    gcc-arm-9.2-2019.12-x86_64-aarch64-none-elf/bin/aarch64-none-elf-objcopy vision_apps/out/J721E/R5F/FREERTOS/release/vx_app_rtos_linux_mcu1_0.out  -O binary  app_xip_bin

    如何去除符号?  使用哪些命令?

    我看到文件信息以_mcu1_0_release_strip.xer5f 结尾。 这是不是 elf 文件、可剥离符号?


    此致
    伊森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    是、

    您可以在 sdk_builder/makerules/makefile_linux_arm.mak 中查看 tiarmstrip 在 vx_app_rtos_linux_mcu1_0.out 文件中的使用情况。

    您可以同样尝试吗?

    此致、

    Nikhil

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nikhil
    我使用此工具删除了无效的部分、但结果仍然相同


    现在、我提到此问题来设计链接文件:

    https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_an_introduction_to_binary_files.html

    但 bin 文件比 elf 文件大得多。

    此致
    伊森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Nikhil

    存储器映射中可能有一个很大的空洞。  在二进制文件中、表示这样的空洞的唯一方法是填充它。  

    我需要 ocmc 中的一些地址以及 ospi 中的一些地址。 那么、我应该如何设计该链接文件?

    这是我在看到:https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_an_introduction_to_binary_files.html 后的链接文件

    /*----------------------------------------------------------------------------*/
    /* File: k3m4_r5f_linker.cmd                                                  */
    /* Description:																  */
    /*    Link command file for j721e M4 MCU 0 view							  */
    /*	  TI ARM Compiler version 15.12.3 LTS or later							  */
    /*                                                                            */
    /*    Platform: QT                                                            */
    /* (c) Texas Instruments 2017, All rights reserved.                           */
    /*----------------------------------------------------------------------------*/
    /*  History:								      */
    /*    Aug 26th, 2016 Original version .......................... Loc Truong   */
    /*    Aug 01th, 2017 new TCM mem map  .......................... Loc Truong   */
    /*    Nov 07th, 2017 Changes for R5F Init Code.................. Vivek Dhande */
    /*----------------------------------------------------------------------------*/
    /* Linker Settings                                                            */
    /* Standard linker options													  */
    --retain="*(.bootCode)"
    --retain="*(.startupCode)"
    --retain="*(.startupData)"
    --retain="*(.irqStack)"
    --retain="*(.fiqStack)"
    --retain="*(.abortStack)"
    --retain="*(.undStack)"
    --retain="*(.svcStack)"
    --fill_value=0
    -e __VECS_ENTRY_POINT
    
    /* interface with SBL */
    sblProfileLogAddr = 0x41c001f0;
    sblProfileLogIndxAddr = 0x41c001f4;
    sblProfileLogOvrFlwAddr = 0x41c001f8;
    /*----------------------------------------------------------------------------*/
    /* Memory Map                                                                 */
    
    --stack_size=0x4000
    --heap_size=0x1000
    --entry_point=_freertosresetvectors
    
    -stack  0x4000  /* SOFTWARE STACK SIZE */
    -heap   0x1000  /* HEAP AREA SIZE      */
    
    /*-------------------------------------------*/
    /*       Stack Sizes for various modes       */
    /*-------------------------------------------*/
    __IRQ_STACK_SIZE   = 0x1000;
    __FIQ_STACK_SIZE   = 0x0100;
    __ABORT_STACK_SIZE = 0x0100;
    __UND_STACK_SIZE   = 0x0100;
    __SVC_STACK_SIZE   = 0x0100;
    
    --define FILL_PATTERN=0xFEAA55EF
    --define FILL_LENGTH=0x100
    
    /* 1 MB of MCU Domain MSRAM is split as shown below */
    /* Size used  F0000 Number of slices 4 */
    /*                                  Rounding Offset */
    /*SBL?      Start   41C00000    245760  0   */
    /*          End     41C3C000                */
    /*MCU 10    Start   41C3C100    245760  100 */
    /*          End     41C78100                */
    /*MCU 11    Start   41C78200    245760  100 */
    /*          End     41CB4200                */
    
    #define BTCM_START 0x41010000
    
    MEMORY
    {
        XIP_FLASH_VEC               : origin=0x50110000 length=0x48 /*  64 bytes */
    
        XIP_RUNNING_SPACE           : origin=0x50110048 length=0x40000
    
        /* bss store space */
        OCMC_BSS_RUNNING_SPACE      : ORIGIN = 0x41c82000 LENGTH = 0x20000
    
        /* bss.devgroup store space  */
        OCMC_BSS_DEVGROUP_SPACE     : ORIGIN = 0x41CA2000 LENGTH = 0x1500
    
        /* sysmem store space */
        OCMC_SYSTEM_SPACE           : ORIGIN = 0x41CA3500 LENGTH = 0x1000
    
        /* undStack  */
        OCMC_UNDSTACK_SPACE         : ORIGIN = 0x41CA4500 LENGTH = 0x100
    
        /* svcStack  */
        OCMC_SVCSTACK_SPACE         : ORIGIN = 0x41CA4600 LENGTH = 0x100
    
        /* stack */
        OMCM_STACK_SPACE            : ORIGIN = 0x41CA4700 LENGTH = 0x4000
    
        /* data section running space */
        OCMC_DATA_SPACE             : ORIGIN = 0x41CA8700 LENGTH = 0x9900
    
        /* sysfw_data_cfg_board */
        OCMC_SYSFW_DATA_CFG_BOARD  : ORIGIN = 0x41CB2000 LENGTH = 0x1000
    
        /* sysfw_data_cfg_board_rm */
        OMCM_SYSFW_DATA_CFG_BOARD_RM : ORIGIN = 0x41CB3000 LENGTH = 0x1000
    
        /* sysfw_data_cfg_board_sec */
        OCMC_SYSFW_DATA_CFG_BOARD_SEC : ORIGIN = 0x41CB4000 LENGTH = 0x1000
    
        /* IRQ_STACK */
        OCMC_IRQ_SPACE                : ORIGIN = 0x41CB5000 LENGTH = 0x1000
    
        /* fiqStack */
        OCMC_FIQ_SPACE                : ORIGIN = 0x41CB6000 LENGTH = 0x100
    
        /* .abortStack */
        OCMC_ABORT_SPACE              : ORIGIN = 0x41CB6100 LENGTH = 0x100
    
        /*  .undStack */
        OCMC_UND_SPACE           : ORIGIN = 0x41CB6200 LENGTH = 0x100
    
        /* .svcStack  */
        OCMC_SVC_SPACE           : ORIGIN = 0x41CB6300 LENGTH = 0x100
    
        /* OCMC_RAM_SCISERVER (RWIX)   : origin=0x41C82000 length=0x7E000 */
    }  /* end of MEMORY */
    
    /*----------------------------------------------------------------------------*/
    /* Section Configuration                                                      */
    
    SECTIONS
    {
        .freertosrstvectors      : {} palign(8)      > XIP_FLASH_VEC
    
        .bootCode        : {} palign(8)      > XIP_RUNNING_SPACE
    
        .startupCode     : {} palign(8)      > XIP_RUNNING_SPACE
    
        .startupData     : {} palign(8)      > XIP_RUNNING_SPACE, type = NOINIT
       
        GROUP {
            .text.hwi    : palign(8)
            .text.cache  : palign(8)
            .text.mpu    : palign(8)
            .text.boot   : palign(8)
        }                               > XIP_RUNNING_SPACE
    
        .cinit   	: {} palign(8) 		> XIP_RUNNING_SPACE
    
        .bss     	    : {} align(4)  	    > OCMC_BSS_RUNNING_SPACE
    
        .data               : {
            *(.data)
        } palign(128)    load = XIP_RUNNING_SPACE, run = OCMC_DATA_SPACE, table(_text_data)
    
        .sysmem  	    : {}                > OCMC_SYSTEM_SPACE
    
        .bss.devgroup   : {*(.bss.devgroup*)} align(4)       > OCMC_BSS_DEVGROUP_SPACE
        
        .const   	: {} palign(8) 		> XIP_RUNNING_SPACE
    
        .rodata   : {} palign(8)    > XIP_RUNNING_SPACE
    
        .const.devgroup : {*(.const.devgroup*)} align(4)       > XIP_RUNNING_SPACE
    
        .text    	: {} palign(8) 		> XIP_RUNNING_SPACE
    
        .stack  	    : {} align(4)		> OMCM_STACK_SPACE  (HIGH) fill=FILL_PATTERN
    
        /* For bss we are using the OCMC_RAM_SBL_RUNTIME since by the time SBL loads
        BootApp there is no need of SBL so we can overwrite SBL. */
    
        .boardcfg_data  : {} align(4)       > XIP_RUNNING_SPACE
    
        /* Additional sections settings 	*/
        .sysfw_data_cfg_board      : {} palign(128) > OCMC_SYSFW_DATA_CFG_BOARD
        .sysfw_data_cfg_board_rm   : {} palign(128) > OMCM_SYSFW_DATA_CFG_BOARD_RM
        .sysfw_data_cfg_board_sec  : {} palign(128) > OCMC_SYSFW_DATA_CFG_BOARD_SEC
    
        .irqStack   : {. = . + __IRQ_STACK_SIZE;} align(4)      > OCMC_IRQ_SPACE  (HIGH)
        RUN_START(__IRQ_STACK_START)
        RUN_END(__IRQ_STACK_END)
    
        .fiqStack   : {. = . + __FIQ_STACK_SIZE;} align(4)      > OCMC_FIQ_SPACE  (HIGH)
        RUN_START(__FIQ_STACK_START)
        RUN_END(__FIQ_STACK_END)
    
        .abortStack : {. = . + __ABORT_STACK_SIZE;} align(4)    > OCMC_ABORT_SPACE  (HIGH)
        RUN_START(__ABORT_STACK_START)
        RUN_END(__ABORT_STACK_END)
    
        .undStack   : {. = . + __UND_STACK_SIZE;} align(4)      > OCMC_UND_SPACE  (HIGH)
        RUN_START(__UND_STACK_START)
        RUN_END(__UND_STACK_END)
    
        .svcStack   : {. = . + __SVC_STACK_SIZE;} align(4)      > OCMC_SVC_SPACE  (HIGH)
        RUN_START(__SVC_STACK_START)
        RUN_END(__SVC_STACK_END)
    
    }  /* end of SECTIONS */
    
    /*----------------------------------------------------------------------------*/
    /* Misc linker settings                                                       */
    
    
    /*-------------------------------- END ---------------------------------------*/
    


    但 bin 文件仍然有很大的空穴。

    祝你一切顺利
    伊森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nikhil
    有任何建议吗?

    此致
    伊森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 EASON:

    关于这一点、我向编译器团队进行核实。 由于 SDK 提供了一个符号被剥离时尺寸较小的剥离 elf 文件。  

    但是、由于您所要求的是一个.bin 文件、因此我需要从编译器团队那里进行检查并返回给大家。

    此致、

    Nikhil

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Nikil
    感谢您的答复。

    请将上诉的链接文件转发给编译器团队。 我将基于上述链接文件生成的 elf 文件转换为 bin 文件。
    如果 TI 编译器团队对此有任何建议、敬请告知


    此致
    伊森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    为什么是的规格 .data 输出段已写入...

        .data               : {
            *(.data)
        } palign(128)       load = XIP_RUNNING_SPACE, run = OCMC_RAM_SCISERVER, table(_text_data)

    我希望它也是类似的东西...

        .data palign(128), run = OCMC_RAM_SCISERVER

    当您执行此操作时、链接器会生成 .data 未经初始化的段。  它会创建初始化段 .cinit .  来自编译器 RTS 库进程的启动代码 .cinit 初始化的内容 .data .   

    是的影响之一 表(_TEXT_DATA) 指令是输出段 太棒了 会自动创建。  它是位于地址0的已初始化段。  我想这不是你想要的。

    谢谢。此致、

    -George.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、George

    我提到了 XIP 文档、它需要我来编写 .data 部分中所示的代码、并在程序中运行时复制代码


    因为在 XIP 中、只有 RO/RX 属性段可以在 ospi 地址中运行、而其他属性段可以在 ocmc 中运行、所以我编写了 .data 并且可以在演示中成功运行。 但是、当我将成功运行演示的链接文件应用于 vision_app 时、如果该 bin 文件被转换为 bin 文件、该 bin 文件的大小比 elf 文件大得多。

    你有什么建议吗? 为 XIP 编写一个新的链接文件  

    此致
    伊森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请忽略我在上一篇文章中所说的话。  请遵循 SDK 专家的说明。 但有一个细节您不关注。  注意这一行从你上一篇文章的第一个屏幕截图...

        .ovly : {} palign(128) load = XIP_FLASH

    向链接器命令文件中添加一个非常类似的行。  部分 太棒了 包含使用时创建的复制表 表() 指令。  如果没有这样的线路 太棒了 段默认分配、这几乎可以肯定是错误的。   

    谢谢。此致、

    -George.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、George

    我会尝试它。 谢谢

    最好的爬坡
    伊森