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.

[参考译文] AM5716:i'm 无法读取 C66 中填充 System_printf () 命令的所有日志文件

Guru**** 2694555 points

Other Parts Discussed in Thread: AM5716

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1591666/am5716-i-m-not-able-to-read-all-the-log-file-in-c66-filled-with-system_printf-command

器件型号: AM5716

您好:

在 Sitara AM5716 的 DSP C66 中,我尝试使用 System_printf() 命令跟踪固件。

与 ARM 处理器一起、C66 共享定义如下的通用存储器:

#define DSP_MEM_BUF_LOG     0x95500000

#define DSP_MEM_BUF_LOG_SIZE  (SZ_1M * 1)

  {
    TYPE_CARVEOUT
    DSP_MEM_BUF_LOG、0、
    DSP_MEM_BUF_LOG_SIZE、0、0、“DSP_MEM_BUF_LOG",“,</s>、
  }、  

在 cfg 文件中、我放了:

/* 使用 SYSMIN、因为 Linux/QNX 需要跟踪缓冲器地址
 * 跟踪调试驱动程序,并提供更好的性能。
 */
VAR System = xdc.useModule('xdc.runtime.System');
Var SYSMIN = xdc.useModule('ti.trace.SysMin');

System.SupportProxy = SYSMIN;
SYSMIN。bufSize = 0x100000;

 

使用终端控制台连接到运行 Linux 的 ARM 并键入

CAT /sys/kernel/debug/remoteproc/remoteproc2/trace0

我只能得到文件的几行、它不会更新。 也可以输入

tail -f /sys/kernel/debug/remoteproc/remoteproc2/trace0

它无法正常工作或部分显示内容。

如果我使用 JTAG 调试器读取 DSP 缓冲区、则正确填充存储器。 在调试缓冲区的最后两个 32 字中、当 System_prinft() 在其中写入一个向量时、指针会被更新。

 

DSP 似乎正在正确写入调试缓冲区、但具有 CAT 或 TAIL 的 ARM 无法读取共享存储器中的所有文件。

您能帮助我了解配置中遗漏的内容还是出错吗?

谢谢

Francesco

 

 

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

    你好 Francesco Residori ,

    请说明您正在使用哪些 SDK 版本?

    此外、这是否会通过  xdc.runtime.SysMin 而不是 ti.trace.nSYSMIN 发生?

    此外、跟踪缓冲区的分配方式与我们的示例非常不同: https://git.ti.com/cgit/ipc/ipcdev/tree/packages/ti/ipc/remoteproc/rsc_table_vayu_dsp.h?id=c2bb741e4a2723155d38ede6a5a5dea8d6592089#:~:text=%23define%20TRACEBUFADDR%20(UInt32)%26ti_trace_SysMin_Module_State_ fs.0_outbuf__A

    -Josue

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

    你好 Josue、

    我尝试了两个  xdc.runtime.SysMin 而不是 ti.trace.SYSMIN、但没有任何变化。

    Linux SDK 为 06.03.00.17

    C66 库版本为:

    这是 DSP 的资源表条目

    /**
     * \file raIpcDspRscTable.c
     *
     * \brief Tabella memoria DSP
     *
     *  Define the resource table entries for DSP. This will be
     *  incorporated into corresponding base images, and used by the remoteproc
     *  on the host-side to allocated/reserve resources.
     *
     */
    
    #ifndef _RA_IPC_DSP_RSC_TABLE_H_
    #define _RA_IPC_DSP_RSC_TABLE_H_
    
    #include <ti/ipc/remoteproc/rsc_types.h>
    
    /* DSP Memory Map */
    #define L4_DRA7XX_BASE          0x4A000000
    
    #define L4_PERIPHERAL_L4CFG     (L4_DRA7XX_BASE)
    #define DSP_PERIPHERAL_L4CFG    0x4A000000
    
    #define L4_PERIPHERAL_L4PER1    0x48000000
    #define DSP_PERIPHERAL_L4PER1   0x48000000
    
    #define L4_PERIPHERAL_L4PER2    0x48400000
    #define DSP_PERIPHERAL_L4PER2   0x48400000
    
    #define L4_PERIPHERAL_L4PER3    0x48800000
    #define DSP_PERIPHERAL_L4PER3   0x48800000
    
    #define L4_PERIPHERAL_L4EMU     0x54000000
    #define DSP_PERIPHERAL_L4EMU    0x54000000
    
    #define L3_PERIPHERAL_MCASP     0x46000000
    #define DSP_PERIPHERAL_MCASP    0x46000000
    
    #define L3_PERIPHERAL_EDMA      0x43300000 // EDMA TPCC configuration space
    #define DSP_PERIPHERAL_EDMA     0x43300000 // EDMA TPCC configuration space
    //#define L3_PERIPHERAL_EDMA      0x40D05000 // DSP1_EDMA_TC0
    //#define DSP_PERIPHERAL_EDMA     0x40D05000 // DSP1_EDMA_TC0
    
    #define L3_PERIPHERAL_DMM       0x4E000000
    #define DSP_PERIPHERAL_DMM      0x4E000000
    
    #define L3_TILER_MODE_0_1       0x60000000
    #define DSP_TILER_MODE_0_1      0x60000000
    
    #define L3_TILER_MODE_2         0x70000000
    #define DSP_TILER_MODE_2        0x70000000
    
    #define L3_TILER_MODE_3         0x78000000
    #define DSP_TILER_MODE_3        0x78000000
    
    #define PHY_OCMC_RAM            0x40300000
    #define DSP_OCMC_RAM            0x40300000
    
    #define DSP_MEM_TEXT            0x95000000
    
    #define PHY_CMEM_IOBUFS         0xA0000000
    #define DSP_CMEM_IOBUFS         0xA0000000
    
    /* Co-locate alongside TILER region for easier flushing */
    #define DSP_MEM_DATA            0x95100000
    #define DSP_MEM_HEAP            0x95200000
    
    #define DSP_MEM_BUF_LOG         0x95500000
    
    #define DSP_MEM_IPC_DATA        0x9F000000
    #define DSP_MEM_IPC_VRING       0x99000000
    #define DSP_MEM_RPMSG_VRING0    0x99000000
    #define DSP_MEM_RPMSG_VRING1    0x99004000
    #define DSP_MEM_VRING_BUFS0     0x99040000
    #define DSP_MEM_VRING_BUFS1     0x99080000
    
    #define DSP_MEM_IPC_VRING_SIZE  SZ_1M
    #define DSP_MEM_IPC_DATA_SIZE   SZ_1M
    #define DSP_MEM_TEXT_SIZE       SZ_1M
    #define DSP_MEM_DATA_SIZE       SZ_1M
    #define DSP_MEM_HEAP_SIZE       (SZ_1M * 3)
    #define DSP_MEM_BUF_LOG_SIZE    (SZ_1M * 1)
    #define DSP_CMEM_IOBUFS_SIZE    (SZ_1M * 192)
    
    
    /*
     * Assign fixed RAM addresses to facilitate a fixed MMU table.
     */
    /* See CMA BASE addresses in Linux side: arch/arm/mach-omap2/remoteproc.c */
    #define PHYS_MEM_IPC_VRING      0x99000000
    
    /*
     * Sizes of the virtqueues (expressed in number of buffers supported,
     * and must be power of 2)
     */
    #define DSP_RPMSG_VQ0_SIZE      256
    #define DSP_RPMSG_VQ1_SIZE      256
    
    /* flip up bits whose indices represent features we support */
    #define RPMSG_DSP_C0_FEATURES         1
    
    struct my_resource_table {
        struct resource_table base;
    
        UInt32 offset[21];  /* Should match 'num' in actual definition */
    
        /* rpmsg vdev entry */
        struct fw_rsc_vdev rpmsg_vdev;
        struct fw_rsc_vdev_vring rpmsg_vring0;
        struct fw_rsc_vdev_vring rpmsg_vring1;
    
        /* text carveout entry */
        struct fw_rsc_carveout text_cout;
    
        /* data carveout entry */
        struct fw_rsc_carveout data_cout;
    
        /* data in ocmc carveout entry */
        struct fw_rsc_carveout data_ocmc_cout;
    
        /* data describing buffer log carveout entry */
        struct fw_rsc_carveout data_log_cout;
    
        /* heap carveout entry */
        struct fw_rsc_carveout heap_cout;
    
        /* ipcdata carveout entry */
        struct fw_rsc_carveout ipcdata_cout;
    
        /* trace entry */
        struct fw_rsc_trace trace;
    
        /* devmem entry */
        struct fw_rsc_devmem devmem0;
    
        /* devmem entry */
        struct fw_rsc_devmem devmem1;
    
        /* devmem entry */
        struct fw_rsc_devmem devmem2;
    
        /* devmem entry */
        struct fw_rsc_devmem devmem3;
    
        /* devmem entry */
        struct fw_rsc_devmem devmem4;
    
        /* devmem entry */
        struct fw_rsc_devmem devmem5;
    
        /* devmem entry */
        struct fw_rsc_devmem devmem6;
    
        /* devmem entry */
        struct fw_rsc_devmem devmem7;
    
        /* devmem entry */
        struct fw_rsc_devmem devmem8;
    
        /* devmem entry */
        struct fw_rsc_devmem devmem9;
    
        /* devmem entry */
        struct fw_rsc_devmem devmem10;
    
        /* devmem entry */
        struct fw_rsc_devmem devmem11;
    
        /* devmem entry */
        struct fw_rsc_devmem devmem12;
    };
    
    extern char ti_trace_SysMin_Module_State_0_outbuf__A;
    #define TRACEBUFADDR (UInt32)&ti_trace_SysMin_Module_State_0_outbuf__A
    
    #pragma DATA_SECTION(ti_ipc_remoteproc_ResourceTable, ".resource_table")
    #pragma DATA_ALIGN(ti_ipc_remoteproc_ResourceTable, 4096)
    
    struct my_resource_table ti_ipc_remoteproc_ResourceTable = {
        1,      /* we're the first version that implements this */
        21,     /* number of entries in the table */
        0, 0,   /* reserved, must be zero */
        /* offsets to entries */
        {
            offsetof(struct my_resource_table, rpmsg_vdev),
            offsetof(struct my_resource_table, text_cout),
            offsetof(struct my_resource_table, data_cout),
            offsetof(struct my_resource_table, data_ocmc_cout),
            offsetof(struct my_resource_table, heap_cout),
            offsetof(struct my_resource_table, data_log_cout),
            offsetof(struct my_resource_table, ipcdata_cout),
            offsetof(struct my_resource_table, trace),
            offsetof(struct my_resource_table, devmem0),
            offsetof(struct my_resource_table, devmem1),
            offsetof(struct my_resource_table, devmem2),
            offsetof(struct my_resource_table, devmem3),
            offsetof(struct my_resource_table, devmem4),
            offsetof(struct my_resource_table, devmem5),
            offsetof(struct my_resource_table, devmem6),
            offsetof(struct my_resource_table, devmem7),
            offsetof(struct my_resource_table, devmem8),
            offsetof(struct my_resource_table, devmem9),
            offsetof(struct my_resource_table, devmem10),
            offsetof(struct my_resource_table, devmem11),
            offsetof(struct my_resource_table, devmem12),
        },
    
        /* rpmsg vdev entry */
        {
            TYPE_VDEV, VIRTIO_ID_RPMSG, 0,
            RPMSG_DSP_C0_FEATURES, 0, 0, 0, 2, { 0, 0 },
            /* no config data */
        },
        /* the two vrings */
        { DSP_MEM_RPMSG_VRING0, 4096, DSP_RPMSG_VQ0_SIZE, 1, 0 },
        { DSP_MEM_RPMSG_VRING1, 4096, DSP_RPMSG_VQ1_SIZE, 2, 0 },
    
        {
            TYPE_CARVEOUT,
            DSP_MEM_TEXT, 0,
            DSP_MEM_TEXT_SIZE, 0, 0, "DSP_MEM_TEXT",
        },
    
        {
            TYPE_CARVEOUT,
            DSP_MEM_DATA, 0,
            DSP_MEM_DATA_SIZE, 0, 0, "DSP_MEM_DATA",
        },
    
        {
            TYPE_CARVEOUT,
            DSP_OCMC_RAM, PHY_OCMC_RAM,
            0x80000, 0, 0, "DSP_OCMC_RAM",
        },   
    
        {
            TYPE_CARVEOUT,
            DSP_MEM_HEAP, 0,
            DSP_MEM_HEAP_SIZE, 0, 0, "DSP_MEM_HEAP",
        },
    
        {
            TYPE_CARVEOUT,
            DSP_MEM_BUF_LOG, 0,
            DSP_MEM_BUF_LOG_SIZE, 0, 0, "DSP_MEM_BUF_LOG",
        },
    
        {
            TYPE_CARVEOUT,
            DSP_MEM_IPC_DATA, 0,
            DSP_MEM_IPC_DATA_SIZE, 0, 0, "DSP_MEM_IPC_DATA",
        },
    
        {
            TYPE_TRACE, TRACEBUFADDR, 0x8000, 0, "trace:dsp",
        },
    
        {
            TYPE_DEVMEM,
            DSP_MEM_IPC_VRING, PHYS_MEM_IPC_VRING,
            DSP_MEM_IPC_VRING_SIZE, 0, 0, "DSP_MEM_IPC_VRING",
        },
    
        {
            TYPE_DEVMEM,
            DSP_TILER_MODE_0_1, L3_TILER_MODE_0_1,
            SZ_256M, 0, 0, "DSP_TILER_MODE_0_1",
        },
    
        {
            TYPE_DEVMEM,
            DSP_TILER_MODE_2, L3_TILER_MODE_2,
            SZ_128M, 0, 0, "DSP_TILER_MODE_2",
        },
    
        {
            TYPE_DEVMEM,
            DSP_TILER_MODE_3, L3_TILER_MODE_3,
            SZ_128M, 0, 0, "DSP_TILER_MODE_3",
        },
    
        {
            TYPE_DEVMEM,
            DSP_PERIPHERAL_L4CFG, L4_PERIPHERAL_L4CFG,
            SZ_16M, 0, 0, "DSP_PERIPHERAL_L4CFG",
        },
    
        {
            TYPE_DEVMEM,
            DSP_PERIPHERAL_L4PER1, L4_PERIPHERAL_L4PER1,
            SZ_2M, 0, 0, "DSP_PERIPHERAL_L4PER1",
        },
    
        {
            TYPE_DEVMEM,
            DSP_PERIPHERAL_L4PER2, L4_PERIPHERAL_L4PER2,
            SZ_4M, 0, 0, "DSP_PERIPHERAL_L4PER2",
        },
    
        {
            TYPE_DEVMEM,
            DSP_PERIPHERAL_L4PER3, L4_PERIPHERAL_L4PER3,
            SZ_8M, 0, 0, "DSP_PERIPHERAL_L4PER3",
        },
    
        {
            TYPE_DEVMEM,
            DSP_PERIPHERAL_L4EMU, L4_PERIPHERAL_L4EMU,
            SZ_16M, 0, 0, "DSP_PERIPHERAL_L4EMU",
        },
    
        {
            TYPE_DEVMEM,
            DSP_PERIPHERAL_DMM, L3_PERIPHERAL_DMM,
            SZ_1M, 0, 0, "DSP_PERIPHERAL_DMM",
        },
    
        {
            TYPE_DEVMEM,
            DSP_CMEM_IOBUFS, PHY_CMEM_IOBUFS,
            DSP_CMEM_IOBUFS_SIZE, 0, 0, "DSP_CMEM_IOBUFS",
        },
    
    	{
    		TYPE_DEVMEM,
    		DSP_PERIPHERAL_MCASP, L3_PERIPHERAL_MCASP,
    		SZ_4M, 0, 0, "DSP_MCASP",
    	},
    
    	{
    		TYPE_DEVMEM,
    		DSP_PERIPHERAL_EDMA, L3_PERIPHERAL_EDMA,
    		SZ_1M, 0, 0, "DSP_EDMA",
    	},
    
    
    };
    
    #endif /* _RA_IPC_DSP_RSC_TABLE_H_ */

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

    您好:

    我因为美国节假日而离开办公室、直至 12 月 1 日。

    预计响应会延迟。

    -Josue

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

    这周我会看一下。

    -Josue

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

    Francesco Residori ,

    我仍然相信你们做的事情与我们作为榜样所做的事情不同。 我们不使用 TYPE_CARVOUT 来进行日志记录、

    我认为跟踪缓冲区仅使用 type_trace、如此处示例所示: https://software-dl.ti.com/processor-sdk-linux/esd/docs/06_03_00_106/linux/Foundational_Components_ ipc.html#ipc-for-am57xx:~:text=ipc/packages/ti/ipc/remoteproc/rsc_table_vayu_dsp.h

    使用雕刻机的目的是什么?  

    我认为 Linux 只会查看 type_trace 结构。  

    请参见  drivers/remoteproc/remoteproc_core.c 中的函数 rproc_handle_trace () 、它仅专门处理 type_trace 条目。  

    	/* set the trace buffer dma properties */
    	trace->trace_mem.len = rsc->len; // Gets your TRACEBUFADDR
    	trace->trace_mem.da = rsc->da; //gets your lenth 0x8000

    -Josue

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

    您好 Josue、

    调试缓冲区已经是 type_trace

    {
        TYPE_TRACE, TRACEBUFADDR, 0x8000, 0, "trace:dsp",
    },

    在 ARM 处理器中、我们使用 linux-4.19.94、因此 remoteproc_core.c 文件与最新的文件不同。

    此致

    Francesco

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

     Francesco Residori ,

    [报价 userid=“375090" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1591666/am5716-i-m-not-able-to-read-all-the-log-file-in-c66-filled-with-system_printf-command

    #define DSP_MEM_BUF_LOG     0x95500000

    #define DSP_MEM_BUF_LOG_SIZE  (SZ_1M * 1)

      {
        TYPE_CARVEOUT
        DSP_MEM_BUF_LOG、0、
        DSP_MEM_BUF_LOG_SIZE、0、0、“DSP_MEM_BUF_LOG",“,</s>、
      }、  

    [/报价]

    我很困惑,在原来的问题,你把上面作为你的日志存储器。 此项的目的是什么?

    这个概念应该仍然适用在这种情况下、一般来说、我们通常不支持 旧版 SDK、以前的标准支持是不支持的。 SDK 11.1 是最新的 SDK。 您使用的 SDK 远远超出了其支持窗口。

    -Josue

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

    您好 Josue、

    没错、我们需要解决这个问题、因为 DSP_MEM_BUF_LOG 和 TRACEBUFADDR 区域都位于同一个地址 0x95500000。

    我认为这是 ARM 正确管理该缓冲区的问题。 你有什么想法?

    我们正在使用较旧版本的 Linux;您可以支持的最旧版本是什么?

    不等

    Francesco  

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

    Francesco Residori ,

    我们仅支持一年的活动版本、此时我们通常会有另一个版本。 至少这是 Processor SDK 的一般节奏。 如需更多信息、请联系您当地的 TI 销售团队。

    是的、我会删除 TYPE_CARVEOUT、因为它不用于跟踪。

    看看您的测试是否有所改进。

    -Josue