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.

[参考译文] CCS/am5728:RPMsg 错误

Guru**** 2604715 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/651095/ccs-am5728-rpmsg-error

器件型号:AM5728

工具/软件:Code Composer Studio

我  正在 PRU 和 A15 (作为主器件)上开发一个 UART 应用程序、例如:PRU_RPMsg_Echo _Interrupt1_0。

当我在 A15上运行应用程序以与 PRU 通信时、会发生一些错误

错误、如:OMA_L3_NOC 44000000.OCP:L3调试错误:目标5 mod:1 (不可清除)    、   功能访问期间用户模式下的数据访问

据我所知,我想知道导致这些错误的原因可能是1。DTS 2驱动程序错误3非法内存访问。

此外、如何 在 CCS 中更高效地调试 PRU C 程序呢?

一些 TI 教程建议访问 CCS 中的 PRU 存储器并从存储器窗口进行调试,那么是否有有关如何访问 PRU 存储器的 C 演示?

稍后我将发布整个 dmesg 和我的代码。需要帮助!

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    该错误消息通常意味着 MMU 违规。 如果您没有定义 RTOS 应用程序、则可能需要有资源表、请参阅 Wiki 页面 以了解更多信息、processors.wiki.ti.com/.../IPC_Resource_customTable

    要使用 CCS 调试 PRU、请提交新主题、RTOS 工程师应能为您提供帮助。

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

    感谢您的回复、Rex。

    这是我的 resource_table,它是来自 PRU-software-support-package-PRU-software-support-package/examples 的原始文件。

    我使用的系统是 ti-processor-sdk-linux-rt-am57xx-evm-04.01.00.06。 您显示的链接是 IPC_Resource_customTable、我认为 IPC 适用于 DSP、现在我正在使用 PRU_RPMsg。您能不能帮助我在 PRU 上修改我自己的 resource_table?

    e2e.ti.com/.../resource_5F00_table_5F00_0.h

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    以下是我在 A15上启动应用程序时的日志: 

    [45975.288388] remoteproc remoteproc4:引导 FW 映像 am57xx-pru1_0-FW、大小90276
    [45975.296244] ti-pruss 4b2000.pruss:configured system_events = 0x0000000300rpmsp_channels = 0x00000005 host_msg = 0x00000005 [459735]
    pruvirtirtirtio 401r_pru_rgmsg:[455.07601u_pru_pru_pru_rgmsg = 0x000080]创建
    
    新的 rptirturtirturtirturturturtio rgc [4580][rgr pru_rq1u_pru_r.pru_rq1u_r.pru_r.pru_r.pru.pru.pru.pru_r /dev/rpmsg_pru30
    注册的 virtio0 (类型7)
    [45975.342011] remoteproc remoteproc4:远程处理器4b234000.pru0现已启动
    [45977.301972]--- [在此处剪切]-----
    [45977.306631]警告:CPU:1 PID:27 AT drivers/bus/omap_l3_oc.c:147 l3_interrupt_handler + 0x228/0x374
    [45977.315892] 440000.OCP:L3自定义错误:主 PRUSS1 PRU1目标 L4_PER3281_P3 ():在闲置期间监控器模式下的数据访问
    [45977.725] bc_example (O) xhci_plat_hcd xhci_hcd usbcore Palc3 UDC_core USB_common SHA512_generic SHA512_arm SHA256_generic SHA1_generic SHA1_ar_neon SHA1_arm md5 CBC xfrm_user xfrm4_tan iptic sha5_generic sha256_common_ipt_ip_pr_mas cl_ip_ipt_pr_mas cl_ip_ip_ip_mas cl_ip_m_ip_pr_ip_mas cl_ip_m_ip_ip_m_ip_pr_ip_mas p_ip_ip_m_m_pr_m_ip_pr_ip_pr_mas ip_m_ip_ip_m_pr_pr_ip_pr_mas ipt_ipt_ipt_ip_ipt_ip_ipt_ip_ipt_ip_ipt_ipt_ip_ip_ip_ip_ GPIO_tpic2810 OMA_DES DES_generic crypto_engine sch_FQ_cdel uio_module_drv (O) uio gdbserverproxy (O) cryptodev (O) cmemk (O)
    [45977.386828] CPU:1 PID:27 Comm:IRQ/23-L3-APP-I 污染:g w o 4.9.41-rt23-gc038d21a22 #23
    [45977.386830]硬件名称:通用 DRA74X (平展器件树)
    [45977.386834]回溯:
    [45977.386852][ ](dump_backtrace)从[ ](show_stack+0x18/0x1c)
    [45977.386859] R6:00000000 R5:c1024b80 R4:60070013 R3:00000000
    [45977.386871][ ](show_stack)从[ ](dump_stack+0x8c/0xa8)
    [45977.386880][ ](dump_stack)从[ ](_warn+0xdc/0x108)
    [45977.386885] R6:c0bc1684 R5:00000000 R4:ee625e28 R3:00000000
    [45977.386890][ ](__warn)从[ ](WARN_RASPEST_Fmt+0x40/0x48)
    [45977.386895] R9:f0882164 R8:00000000 r7:c0bc1a14 R6:ee5f2f50 R5:c0bc15e0 R4:00000000
    [45977.386904][ ](warn_slowpath_fmt)、来自[ ](L3_interrupt_handler + 0x228/0x374)
    [45977.386907] R3:ee5f2dc0 R2:c0bc16a0
    [45977.386909] R4:80080003
    [45977.386918][ ](L3_interrupt_handler)、来自[ ](IRQ_Forced_thread_fn+0x28/0x5c)
    [45977.386923] R10:c027deb0 R9:ee5fa2c0 R8:ee5f8000 r7:00000001 R6:ee5fa2e4 R5:ee5f8000
    [45977.386925] R4:ee5fa2c000[456731][ee5fa2c6931]
    ](IRQ_Forced_thread_fn)、来自[ ](IRQ_THREAD+0x110/0x1e0)
    [45977.386935] R6:ee5fa2e4 R5:00000000 R4:ee624000 R3:00000004
    [45977.386942][ ](IRQ_THread)、来自[ ](kthread+0x100/0x11c)
    [45977.386948] R10:00000000 R9:00000000 R8:00000000 r7:c027e07c R6:ee5fa2c0 R5:00000000
    [45977.386949] R4:ee5fa300
    [45977.386957][ ](kthread)、来自[ ](RET_FANT_FAY+0x14/0x24)
    [45977.386961] r7:00000000 R6:00000000 R5:c0249698 R4:ee5fa300
    [45977.386963]-[结束跟踪000000000007 ]-->
    



    PRU 端的 C 代码:

    e2e.ti.com/.../rpmsg_5F00_pru.c

    和 A15上的代码:

    e2e.ti.com/.../rpmsg_5F00_A15.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否检查您的.data 区域是否在资源表中定义? 我将请我的 RTOS 同事查看您的资源表。

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

    我使用的是 PRU-software-support-package 最新版本。
    您已转换.data 区域,我浏览并找到以下内容: #pragma DATA_SECTION (resourcesTable,".resource_table")
    在结构"resourceTable"中、它仅定义 PRU_INT & rpmsg_vdev (vring0 &vring 1)。
    L3、L4_PER1_P3未被转换。更改 PRU_RPMSG_VQ0_SIZE 将有所帮助?

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

    您是否也可以发布 UART 代码? 从日志中可以看到 PRU 引导正确、RPMsg 通道配置正确。 代码中的下一行(rpmsg_pru.c 文件中的第179行)是您尚未共享的'PRU_UART_initialize'函数。

    我当前的挑战是、您正在尝试访问其中一个 SOC UART 外设、并且当您尝试访问其寄存器时、它可能不会通电。 在尝试访问 UART 外设的寄存器之前、您需要确保已启用 UART 外设的时钟。

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

    Jason、Merry Christmas。

    很抱歉、在 AM57xx_PRU.cmd 中迟到的回复:

    /*指定段分配到内存中*/
    段{
    /*强制_c_int00到 PRU IRAM 的开头。 在加载
    ELF 文件时不需要、但在加载二进制文件时很有用*。
    text:_c_int00*> 0x0、page 0
    
    .text> PRU_IMEM、page 0
    .stack> PRU_DMEM_0_1、page 1
    .bss> PRU_DMEM_0_1、page 1
    .CIO> PRU_DMEM_1、page
    
    1 .1_1、PRU_1数据交换> PRU_1、.CIO 1 第1页
    .sysmem> PRU_DMEM_0_1、第1页
    .cinit> PRU_DMEM_0_1、第1页
    .rodata> PRU_DMEM_0_1、第1页
    .rofardata> PRU_DMEM_0_1、第1页
    .farbss> PRU_DMEM_0_1、
    
    
    
    第1页 DMU_1页.fardata > PRU_1页、PRU_DMEM_1页.fardata 1页> PRU_1页.farem_1页、PRU_1页.farem_1页、PRU_DMEM_1页、PRU_DMEM_1页. 



    
    
    
    


    stack、.bss、.data 等都是在8kB Data_mem 中定义的、这是否会是溢出? 然后、我删除了尚未使用的函数和值。
    我注意到、我必须将以下"缓冲区"大小定义为512B (uint8_t buffer[512])、否则它将以相同的错误"OMAP_L3_NOC 44000000.OCP:L3调试错误:目标5 mod:1 (不可清除)"进行操作

    PRU_rpmsg_receive (&transport、&src、&dst、buffer、&len) 

    现在 它可以工作了!

    PS:此文件包含 'PRU_UART_initialized'函数

    e2e.ti.com/.../pru_5F00_uart_5F00_init.c

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

    在可能的溢出中很好的收获! 您必须小心处理 PRU-ICSS 子系统中的小型存储器。 检查程序使用的存储器的一种方法是在构建过程的链接阶段使用'-m'标志。 这将创建一个映射文件、用于显示每个存储器以及每个段中使用的存储器容量。 《PRU 编译器用户指南》介绍了第2.3.1节(www.ti.com/.../spruhv7)中的链接器标志。

    另一个需要注意的问题是、当您创建传输和接收缓冲区作为本地变量(在主方法中)时、它们将被放置在堆栈上。 提供的 RPMsg 示例使用256字节堆栈。 除非您更改了两个发送缓冲区(每个160字节)和一个接收缓冲区(64字节)的大小、否则可能仍会使堆栈溢出。

    如果需要、可以在提供的 Makefile 顶部更改堆栈大小。

    Jason Reeder

    电源 当我开发 RPMsg 示例时、我最终将有效负载数组(512字节)移动到全局变量、因为当我将其创建为局部变量时、我会遇到堆栈溢出、这需要我一段时间才能跟踪。