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.
工具与软件:
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 ---------------------------------------*/
您好、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
我会尝试它。 谢谢
最好的爬坡
伊森