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:引导失败:–22

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

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1552650/tda4vm-boot-failed--22

器件型号:TDA4VM


工具/软件:

TI 冒险家大家好:

请帮助... 在其中一个 C66x 处理器上加载和运行一个非常简单的应用程序时、我遇到了“Boot Failed:–22"。“。 主 C 代码如下:

#pragma DATA_SECTION(obs_data, ".data")
#pragma RETAIN(obs_data)

static float obs_data[1000];

int main(void) {

    int _count = 0;
    while (1) {
        _count++;
        obs_data[_count % 1000] = _count % 1000;
    }
    return 0;
}

C 代码会编译并链接到一个非常通用的 cmd 文件:

/* 
 * This file is derived from:
 * git.ti.com/.../linker_mem_map.cmd
 * and
 * git.ti.com/.../j721e_linker_freertos.cmd
 */ 
-stack  0x2000      /* SOFTWARE STACK SIZE */
-heap   0x1000      /* HEAP AREA SIZE      */
--symbol_map _Hwi_intcVectorTable=Hwi_intcVectorTable

MEMORY
{
	/* L2 for C66x_1 [ size 224.00 KB ] */
    L2RAM_C66x_1             ( RWIX ) : ORIGIN = 0x00800000 , LENGTH = 0x00038000
    /* DDR for C66x_1 for Linux resource table [ size 1024 B ] */
    DDR_C66x_1_RESOURCE_TABLE ( RWIX ) : ORIGIN = 0xA6100000 , LENGTH = 0x00001000
    /* DDR for C66x_1 for boot section [ size 1024 B ] */
    DDR_C66x_1_BOOT          ( RWIX ) : ORIGIN = 0xA6200000 , LENGTH = 0x00000400
    /* DDR for C66x_1 for code/data [ size 14.00 MB ] */
    DDR_C66x_1               ( RWIX ) : ORIGIN = 0xA6201000 , LENGTH = 0x00DFFC00
    /* DDR for C66x_1 for Linux IPC [ size 1024.00 KB ] */
    DDR_C66x_1_DMA           ( RWIX ) : ORIGIN = 0xA6000000 , LENGTH = 0x00100000
    /* Memory for IPC Vring's. MUST be non-cached or cache-coherent [ size 32.00 MB ] */
    IPC_VRING_MEM                     : ORIGIN = 0xAA000000 , LENGTH = 0x02000000
    /* Memory for remote core logging [ size 256.00 KB ] */
    APP_LOG_MEM                       : ORIGIN = 0xAC000000 , LENGTH = 0x00040000
    /* Memory for TI OpenVX shared memory. MUST be non-cached or cache-coherent [ size 63.75 MB ] */
    TIOVX_OBJ_DESC_MEM                : ORIGIN = 0xAC040000 , LENGTH = 0x03FC0000
    /* Memory for remote core file operations [ size  4.00 MB ] */
    APP_FILEIO_MEM                    : ORIGIN = 0xB0000000 , LENGTH = 0x00400000
    /* Memory for shared memory buffers in DDR [ size 512.00 MB ] */
    DDR_SHARED_MEM                    : ORIGIN = 0xB8000000 , LENGTH = 0x20000000
    /* DDR for c66x_1 for local heap [ size 16.00 MB ] */
    DDR_C66X_1_LOCAL_HEAP    ( RWIX ) : ORIGIN = 0xDC000000 , LENGTH = 0x01000000
    /* DDR for c66x_1 for Scratch Memory [ size 48.00 MB ] */
    DDR_C66X_1_SCRATCH       ( RWIX ) : ORIGIN = 0xDD000000 , LENGTH = 0x03000000
}

SECTIONS
{
    .text:csl_entry:{}  > DDR_C66x_1
    .text:_c_int00 load > DDR_C66x_1 ALIGN(0x400)
    .text:   > DDR_C66x_1
    .stack:  > DDR_C66x_1
    .const:  > DDR_C66x_1
    .data:   > DDR_C66x_1
}

运行 Debian 版本 5.10.168-ti-arm64-r118 的 A72 报告以下内容:

[1988.711638] Remoteproc Remoteproc12:启动 4d80800000.dsp
[1988.711919] remoteproc remoteproc12:引导固件映像 dsp12、大小 48448
[1988.712618] remoteproc remoteproc12:引导失败:–22

有人会帮助我了解出了什么问题吗?

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

    您好 Steve、

    您能否尝试将代码插入已知可正常工作的默认 IPC_ECHO_TEST 固件中?
    失败可能是由于内存映射或某些资源表问题。

    是否在 U-Boot 或内核处加载固件?

    - Keerthy

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

    您好 Keerthy 和 Happy 星期三、

    非常感谢您的时间和专业知识、帮助我了解正在发生的事情。 使用内核配置加载固件。 虽然我没有机会构建 ipc_echo_test 应用(我必须重写其构造以在 TDA4VM 的 A72 内核中构建)、但/lib/firmware/vision_apps_eaik/vx_app_rtos_linux_c6x_1.out 会加载并运行得很好。

    它必须是 cmd 文件中内存映射分配的内容吗? C 源代码已简化为最基本的形式和强烈键入(我相信,甚至烤面包机可以加载和运行),然而,没有乐趣... Confusedμ s

    #include <stdint.h>
    #include <string.h>
    
    #include <stddef.h>
    
    #include <rsc_types.h>
    
    #pragma DATA_SECTION(obs_data, ".data")
    #pragma RETAIN(obs_data)
    
    static float obs_data[1000];
    
    int main(void) {
        int _count_i32 = 0;
        float _count_s = 0.0f;
        while (1) {
            _count_s = _count_s + 1.0f;
            obs_data[0] = _count_s;
            if (_count_i32 > 1000) {
            	_count_s = 0.0f;
            	_count_i32 = 0;
            }
        }
        return 0;
    }

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

    快乐的星期三晚上 Keerthy ...

    而且,确实是一个快乐的! 找到了它(虽然花了足够长的时间)。 TDA4VM C66_0 器件的基地址不是器件树文件 (k3-j721e-beaglebone64.dtb、列为 0xA610'0000) 中列出的基地址、但它是在“../vision_apps/platform/j721e/rtos/c66x_1/linker_mem_map.cmd"文件“文件中看到的地址、如下所列:


    /* DDR for C66x_1 for Linux resource table [ size 1024 B ] */
    DDR_C66x_1_RESOURCE_TABLE ( RWIX ) : ORIGIN = 0xA8100000 , LENGTH = 0x00000400
    /* DDR for C66x_1 for code/data [ size 14.00 MB ] */
    DDR_C66x_1 ( RWIX ) : ORIGIN = 0xA8200400 , LENGTH = 0x00DFFC00

    太棒了! Sweat smile再次,非常感谢您的提升,以协助!