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]firmware of mcu2_1 cannot run if the firmware is stripped

Other Parts Discussed in Thread: TDA4VM, SYSBIOS

Hi,

Now we have some TDA4VM/J721EX boards and 06_01_00_15 sdk.

I create a simple demo, which looks like the demo in the psdk_rtos_auto_j7_06_01_00_15/vision_apps/apps/basic_demos/app_tirtos/tirtos_linux/mcu2_1.

The demo did nothing but create a task include ti openvx.

When I finished compiling the firmware, it can run on mcu2_1. But if I strip it by the command of "ti-cgt-arm_18.12.1.LTS/bin/armstrip -p FIRMWARE", it cannot run on mcu2_1.

I don't know the reason for the reason that it didn't output any information.

My makefile which is used to compile the firmware is as follows:

RTOS_SDK_PATH = /project/TDA4/psdk_rtos_auto_j7_06_01_00_15

TI_CGT_ARM_PATH ?= $(RTOS_SDK_PATH)/ti-cgt-arm_18.12.1.LTS
BIOS_PATH ?= $(RTOS_SDK_PATH)/bios_6_76_03_01
XDCTOOLS_PATH ?= $(RTOS_SDK_PATH)/xdctools_3_55_02_22_core
PDK_PATH ?= $(RTOS_SDK_PATH)/pdk
VISION_APPS_PATH ?= $(RTOS_SDK_PATH)/vision_apps
IMAGING_PATH ?= $(RTOS_SDK_PATH)/imaging
TIOVX_PATH ?= $(RTOS_SDK_PATH)/tiovx
VIDEO_CODEC_PATH ?= $(RTOS_SDK_PATH)/video_codec
J7_C_MODELS_PATH ?= $(RTOS_SDK_PATH)/j7_c_models
# DEMO_APPS_PATH ?= $(RTOS_SDK_PATH)/mcu2_0_demo
DEMO_APPS_PATH ?= $(shell pwd)/../../mcu2_1_demo

MODULE := mcu2_1
TARGET_BUILD := release
$(MODULE)_ODIR := $(DEMO_APPS_PATH)/obj
$(MODULE)_XDC_TARGET := "ti.targets.arm.elf.R5F"
$(MODULE)_XDC_PLATFORM := "ti.platforms.cortexR:J7ES_MAIN"
$(MODULE)_XDC_BLD_FILE := $(DEMO_APPS_PATH)/../r5_common/config_r5f.bld
$(MODULE)_XDC_CFG_FILE := $(DEMO_APPS_PATH)/config/sysbios.cfg
$(MODULE)_XDC_IDIRS := $(BIOS_PATH)/packages;$(DEMO_APPS_PATH)/config;$(DEMO_APPS_PATH)/../r5_common;$(BIOS_PATH)/packages/ti/posix/ccs

$(MODULE)_COPT := --endian=little --abi=eabi -mv=7R5 --float_support=vfpv3d16 --gen_func_subsections --preproc_with_compile
ifeq ($(TARGET_BUILD),debug)
$(MODULE)_COPT += -g -D=TARGET_BUILD=2 -D_DEBUG_=1
else ifeq ($(TARGET_BUILD),release)
$(MODULE)_COPT += -DNDEBUG
endif

$(MODULE)_DEFINES := -D=CPU_$(MODULE) -D=SYSBIOS -D=J721E -D=R5F="R5F" -D=TARGET_NUM_CORES=3 -D=TARGET_ARCH=32 -D=ARCH_32 -D=SOC_J721E -D=ARM -D=xdc_target_name__=ti/targets/arm/elf/R5F -D=xdc_target_types__=ti/targets/arm/elf/std.h
$(MODULE)_CFLAGS := $($(MODULE)_DEFINES) $($(MODULE)_COPT)
$(MODULE)_LDFLAGS := --warn_sections --reread_libs --zero_init=on --rom_model $($(MODULE)_ODIR)/configuro/linker.cmd $(DEMO_APPS_PATH)/build_script/linker.cmd $(DEMO_APPS_PATH)/build_script/linker_mem_map.cmd
$(MODULE)_CC_LIBRARY := --search_path=$(TI_CGT_ARM_PATH)/lib --library=libc.a \
--search_path=$(PDK_PATH)/packages/ti/osal/lib/tirtos/j721e/r5f/$(TARGET_BUILD) \
--search_path=$(PDK_PATH)/packages/ti/csl/lib/j721e/r5f/$(TARGET_BUILD) \
--search_path=$(PDK_PATH)/packages/ti/board/lib/j721e_evm/r5f/$(TARGET_BUILD) \
--search_path=$(PDK_PATH)/packages/ti/drv/uart/lib/j721e/r5f/$(TARGET_BUILD) \
--search_path=$(PDK_PATH)/packages/ti/drv/i2c/lib/j721e/r5f/$(TARGET_BUILD) \
--search_path=$(PDK_PATH)/packages/ti/drv/sciclient/lib/j721e/$(MODULE)/$(TARGET_BUILD) \
--search_path=$(PDK_PATH)/packages/ti/drv/csirx/lib/j721e/$(MODULE)/$(TARGET_BUILD) \
--search_path=$(PDK_PATH)/packages/ti/drv/dss/lib/j721e/$(MODULE)/$(TARGET_BUILD) \
--search_path=$(PDK_PATH)/packages/ti/drv/vhwa/lib/j721e/$(MODULE)/$(TARGET_BUILD) \
--search_path=$(PDK_PATH)/packages/ti/drv/fvid2/lib/j721e/r5f/$(TARGET_BUILD) \
--search_path=$(PDK_PATH)/packages/ti/drv/udma/lib/j721e/$(MODULE)/$(TARGET_BUILD) \
--search_path=$(PDK_PATH)/packages/ti/drv/ipc/lib/j721e/$(MODULE)/$(TARGET_BUILD) \
--search_path=$(VISION_APPS_PATH)/lib/J7/R5F/SYSBIOS/$(TARGET_BUILD) \
--search_path=$(IMAGING_PATH)/lib/J7/R5F/SYSBIOS/$(TARGET_BUILD) \
--search_path=$(TIOVX_PATH)/lib/J7/R5F/SYSBIOS/$(TARGET_BUILD) \
--search_path=$(VIDEO_CODEC_PATH)/lib/J7/R5F/SYSBIOS/$(TARGET_BUILD) \
--search_path=$(J7_C_MODELS_PATH)/lib/J7/R5F/SYSBIOS/$(TARGET_BUILD) \
--library=app_tirtos_common_mcu2_1.lib \
--library=app_utils_hwa.lib \
--library=app_utils_dss.lib \
--library=app_utils_mem.lib \
--library=app_utils_console_io.lib \
--library=app_utils_ipc.lib \
--library=app_utils_remote_service.lib \
--library=app_utils_udma.lib \
--library=app_utils_sciclient.lib \
--library=app_utils_misc.lib \
--library=app_utils_sensors.lib \
--library=app_utils_perf_stats.lib \
--library=app_utils_iss.lib \
--library=vx_target_kernels_stereo_arm.lib \
--library=vx_target_kernels_img_proc_r5f.lib \
--library=vx_conformance_engine.lib \
--library=vx_conformance_tests.lib \
--library=vx_conformance_tests_testmodule.lib \
--library=vx_tiovx_tests.lib \
--library=vx_tutorial.lib \
--library=vx_utils.lib \
--library=vx_framework.lib \
--library=vx_vxu.lib \
--library=vx_platform_psdk_j7_bios.lib \
--library=vx_kernels_target_utils.lib \
--library=vx_kernels_test_kernels_tests.lib \
--library=vx_kernels_test_kernels.lib \
--library=vx_target_kernels_source_sink.lib \
--library=vx_kernels_host_utils.lib \
--library=vx_kernels_openvx_core.lib \
--library=vx_kernels_hwa_tests.lib \
--library=vx_kernels_hwa.lib \
--library=vx_target_kernels_vpac_nf.lib \
--library=vx_target_kernels_vpac_viss.lib \
--library=vx_target_kernels_vpac_msc.lib \
--library=vx_target_kernels_vpac_ldc.lib \
--library=vx_target_kernels_dmpac_dof.lib \
--library=vx_target_kernels_dmpac_sde.lib \
--library=vx_target_kernels_vdec.lib \
--library=vx_target_kernels_display.lib \
--library=vx_target_kernels_capture.lib \
--library=viss.lib \
--library=vx_target_kernels_j7_arm.lib \
--library=ti_imaging_awbalg.lib \
--library=ti_imaging_dcc.lib \
--library=vx_kernels_imaging.lib \
--library=vx_target_kernels_imaging_aewb.lib \
--library=ti_imaging_aealg.lib \
--library=ti_imaging_sensordrv.lib \
--library=video_codec_common_tirtos.lib \
--library=video_codec_decoder_tirtos.lib \
--library=video_codec_osal_tirtos.lib \
--library=rtsv7R4_T_le_v3D16_eabi.lib \
--library=ti.osal.aer5f \
--library=ti.csl.aer5f \
--library=ti.board.aer5f \
--library=ti.drv.uart.aer5f \
--library=ipc.aer5f \
--library=fvid2.aer5f \
--library=udma.aer5f \
--library=sciclient.aer5f \
--library=ti.drv.i2c.aer5f \
--library=csirx.aer5f \
--library=dss.aer5f \
--library=vhwa.aer5f \

CC = $(TI_CGT_ARM_PATH)/bin/armcl
LNK = $(TI_CGT_ARM_PATH)/bin/armcl

default: demo_apps_mcu2_1.xer5f

.PRECIOUS: %/compiler.opt %/linker.cmd

%/compiler.opt: %/linker.cmd ;

%/linker.cmd : $($(MODULE)_XDC_CFG_FILE)
-$(XDCTOOLS_PATH)/xs --xdcpath="$($(MODULE)_XDC_IDIRS)" xdc.tools.configuro -c $(TI_CGT_ARM_PATH) -o $($(MODULE)_ODIR)/configuro -t $($(MODULE)_XDC_TARGET) -p $($(MODULE)_XDC_PLATFORM) -b $($(MODULE)_XDC_BLD_FILE) $<

main.obj : check_paths main.c $($(MODULE)_ODIR)/configuro/compiler.opt
-mkdir -p $($(MODULE)_ODIR)/build
$(CC) $($(MODULE)_CFLAGS) \
-I$(TI_CGT_ARM_PATH)/include \
-I$(PDK_PATH)/packages \
-I$(BIOS_PATH)/packages \
-I$(BIOS_PATH)/packages/ti/posix/ccs \
-I$(XDCTOOLS_PATH)/packages \
-I$(VISION_APPS_PATH)/apps/basic_demos/app_tirtos/common \
-I$(VISION_APPS_PATH)/apps/basic_demos/app_tirtos/tirtos_linux \
-I$(IMAGING_PATH)/algos/dcc/include \
-I$(IMAGING_PATH)/algos/awb/include \
--preproc_dependency=$($(MODULE)_ODIR)/build/main.dep \
-fr=$($(MODULE)_ODIR)/build -fs=$($(MODULE)_ODIR)/build -ft=$($(MODULE)_ODIR)/build \
-eo=.obj -fc=main.c

demo_apps_mcu2_1.xer5f : check_paths main.obj
$(LNK) \
-I$(TI_CGT_ARM_PATH)/include \
-I$(DEMO_APPS_PATH)/include \
-I$(PDK_PATH)/packages \
-I$(BIOS_PATH)/packages \
-I$(BIOS_PATH)/packages/ti/posix/ccs \
-I$(XDCTOOLS_PATH)/packages \
$($(MODULE)_CFLAGS) -z \
$($(MODULE)_LDFLAGS) \
$($(MODULE)_ODIR)/build/main.obj \
$($(MODULE)_CC_LIBRARY) \
--output_file=$($(MODULE)_ODIR)/build/$@ --map_file=$($(MODULE)_ODIR)/build/$@.map

  • Hello,

    I tried this at my end by adding below to the makefile and it worked fine for me.

    Can you try this on SDK binaries before trying on your binaries ?

    regards
    Kedar

    diff --git a/makerules/makefile_linux_arm.mak b/makerules/makefile_linux_arm.mak
    index 755b7aa2..0fbdf4b5 100644
    --- a/makerules/makefile_linux_arm.mak
    +++ b/makerules/makefile_linux_arm.mak
    @@ -27,22 +27,27 @@ endif
     ifeq ($(BUILD_CPU_MCU2_0),yes)
            # copy remote firmware files for mcu2_0
            cp $(VISION_APPS_PATH)/out/J7/R5F/SYSBIOS/$(LINUX_APP_PROFILE)/vx_app_tirtos_linux_mcu2_0.out $(LINUX_FS_PATH)/lib/firmware/j7-main-r5f0_0-fw
    +       $(TIARMCGT_ROOT)/bin/armstrip -p $(LINUX_FS_PATH)/lib/firmware/j7-main-r5f0_0-fw
     endif
     ifeq ($(BUILD_CPU_MCU2_1),yes)
            # copy remote firmware files for mcu2_1
            cp $(VISION_APPS_PATH)/out/J7/R5F/SYSBIOS/$(LINUX_APP_PROFILE)/vx_app_tirtos_linux_mcu2_1.out $(LINUX_FS_PATH)/lib/firmware/j7-main-r5f0_1-fw
    +       $(TIARMCGT_ROOT)/bin/armstrip -p $(LINUX_FS_PATH)/lib/firmware/j7-main-r5f0_1-fw
     endif
     ifeq ($(BUILD_CPU_C6x_1),yes)
            # copy remote firmware files for c6x_1
            cp $(VISION_APPS_PATH)/out/J7/C66/SYSBIOS/$(LINUX_APP_PROFILE)/vx_app_tirtos_linux_c6x_1.out $(LINUX_FS_PATH)/lib/firmware/j7-c66_0-fw
    +       $(CGT6X_ROOT)/bin/strip6x -p $(LINUX_FS_PATH)/lib/firmware/j7-c66_0-fw
     endif
     ifeq ($(BUILD_CPU_C6x_2),yes)
            # copy remote firmware files for c6x_2
            cp $(VISION_APPS_PATH)/out/J7/C66/SYSBIOS/$(LINUX_APP_PROFILE)/vx_app_tirtos_linux_c6x_2.out $(LINUX_FS_PATH)/lib/firmware/j7-c66_1-fw
    +       $(CGT6X_ROOT)/bin/strip6x -p $(LINUX_FS_PATH)/lib/firmware/j7-c66_1-fw
     endif
     ifeq ($(BUILD_CPU_C7x_1),yes)
            # copy remote firmware files for c7x_1
            cp $(VISION_APPS_PATH)/out/J7/C71/SYSBIOS/$(LINUX_APP_PROFILE)/vx_app_tirtos_linux_c7x_1.out $(LINUX_FS_PATH)/lib/firmware/j7-c71_0-fw
    +       $(CGT7X_ROOT)/bin/strip7x -p $(LINUX_FS_PATH)/lib/firmware/j7-c71_0-fw
     endif
            sync

  • Now I find that if I add "--rom_model" to mcu2_1_LDFLAGS in the makefile, the firmware cannot run sometimes.

    What's the function of "--rom_model"?

  • I am not sure, you need to check the compiler documentation. We don't use rom_model flag typically.

    Can you compare the options passed to the linker vs what is done in vision_apps.

    Do below in vision_apps to see the options passed

    cd vision_apps

    make vx_app_tirtos_linux_mcu2_1 SHOW_COMMANDS=1

  • Please confirm if this fixes the issues. Above should work.

    regards
    Kedar