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.

[参考译文] AM5728:DSP/RTOS -ARM/Linux 共享存储器问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/747788/am5728-dsp-rtos--arm-linux-shared-memory-issue

器件型号:AM5728

您好,

我使用的是 AM5728 GPEVM、DSP 在 RTOS 上运行、A15内核在 Linux 上运行、在我的应用程序中、我希望将数据从 DSP 内核发送到 A15内核。

对于此应用、我尝试实现共享存储器、我从 DSP/RTOS 写入 OCM 存储器、并尝试从 ARM/Linux 读取它

我观察到的是、从 DSP 写入的数据中、只有几个最初的存储器应用程序被正确地从 ARM A15读取、其余的数据被读取不当。

为了验证 DSP 是否正确写入,我还从 DSP 读回了数据。 我的序列如下所示、

1.从 DSP 写入

2.从 DSP 读取

3.从 ARM/Linux 读取

我观察到的是、无论从 DSP 写入的数据是什么、DSP 都能够正确读回它、但相同的数据 ARM/Linux 无法正确读取、因此目前我假设 DSP 能够正确写入

但 ARM/Linux 读取会出现一些问题。 我使用 mmap 来生成虚拟地址并从 ARM/Linux 端读取

我已附上一些日志、请找到相同的日志。

谢谢、

Janardane2e.ti.com/.../Shared_5F00_Memory_5F00_Result.zip

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

    能否检查 ti-mctd 守护进程是否在 Linux 端运行? 如果是、请查看禁用后它是否会起作用。 此外、尝试 devmem2转储 ocmc 区域、以查看数据是否正确。

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

    您好、Janardan、

    我看不到问题。 我在 Linux 中启用了 OCMC、并使用 CCS 连接到 DSP1内核。 然后从 DSP 修改了 OCMC 存储器空间。 在 Linux 端、我使用 devmem2转储了存储器、而 OCMC 存储器反映了从 DSP 修改的内容。

    更改之前、CCS 将 OCMC 存储器显示为0x40400000:

    Linux 转储在修改内容之前会看到相同的内容

    root@am57xx-EVM:/sys/bus/platform/drivers/omap-rproc devmem2 0x40400000

    /dev/mem 已打开。

    映射到地址 bb6fd6000的内存。

    在地址0x40400000 (bb6fd6000):0x86C34043上读取

    root@am57xx-EVM:/sys/bus/platform/drivers/omap-rproc devmem2 0x40400004

    /dev/mem 已打开。

    映射到地址 bb6f45000的内存。

    在地址0x40400004 (0xb6f45004)处读取:0x7300E9A5

    root@am57xx-EVM:/sys/bus/platform/drivers/omap-rproc devmem2 0x40400008

    /dev/mem 已打开。

    映射到地址0xb6eff000的内存。

    在地址0x40400008 (0xb6eff008):0x42B48C43上读取

    root@am57xx-EVM:/sys/bus/platform/drivers/omap-rproc devmem2 0x4040000C

    /dev/mem 已打开。

    映射到地址 bb6ff1000的内存。

    在地址0x4040000C (bb6ff100c):0xBF81C69C 处读取

    通过 CCS 修改 DSP1中的 OCMC 内容:


    从 Linux 转储 OCMC 内存:

    root@am57xx-EVM:/sys/bus/platform/drivers/omap-rproc

    root@am57xx-EVM:/sys/bus/platform/drivers/omap-rproc devmem2 0x40400000

    /dev/mem 已打开。

    映射到地址 bb6f61000的内存。

    在地址0x40400000 (0xb6f61000)处读取:0x00010203

    root@am57xx-EVM:/sys/bus/platform/drivers/omap-rproc devmem2 0x40400004

    /dev/mem 已打开。

    映射到地址 bb6f32000的内存。

    在地址0x40400004 (bb6f32004):0x04050607处读取

    root@am57xx-EVM:/sys/bus/platform/drivers/omap-rproc devmem2 0x40400008

    /dev/mem 已打开。

    映射到地址 bb6fc1000的内存。

    在地址0x40400008 (0xb6fc1008)处读取:0x08090A0B

    root@am57xx-EVM:/sys/bus/platform/drivers/omap-rproc devmem2 0x4040000C

    /dev/mem 已打开。

    映射到地址 bb6f5c000的内存。

    在地址0x4040000C (bb6f5c00c)上读取:0x0C0D0E0E0F

    root@am57xx-EVM:/sys/bus/platform/drivers/omap-rproc devmem2 0x40400010

    /dev/mem 已打开。

    映射到地址 bb6fad000的内存。

    在地址0x40400010 (b6fad010):0x10111213处读取

    root@am57xx-EVM:/sys/bus/platform/drivers/omap-rproc devmem2 0x40400014

    /dev/mem 已打开。

    映射到地址 bb6f3a000的内存。

    在地址0x40400014 (bb6f3a014)读取:0x14151617

    root@am57xx-EVM:/sys/bus/platform/drivers/omap-rproc devmem2 0x40400018

    /dev/mem 已打开。

    映射到地址 bbb6fb6000的内存。

    在地址0x40400018 (0xb6fb6018)上读取:0x18191A1B

    root@am57xx-EVM:/sys/bus/platform/drivers/omap-rproc devmem2 0x4040001C

    /dev/mem 已打开。

    映射到地址 bb6f18000的内存。

    在地址0x4040001C (0xb6f1801c)上读取:0x1C1D1E1F


    CCS 屏幕作为参考:

      

    您可能需要检查 DSP OCMC 配置或 Linux 用户空间应用程序、以查看在禁用 ti-mctd 守护程序后问题仍然存在时是否存在任何问题。

     

    雷克斯

     

     

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

    尊敬的 Rex:

    我已经尝试过多次迭代、无法修复。 我随此帖子附上了我的资源表、配置文件。

    另外、请查找从 Linux 端使用的用户空间代码

    在 Linux DTS 中是否需要做任何事情来实现这一目标?

    我尝试使用 devmem2、看起来像 DSP/写入和 ARM/Read 不能看到相同的存储器。

    请帮助我解决此问题。

    谢谢、

    Janardan M

    e2e.ti.com/.../6646.Documents.zip

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

    通过 OCMC、ARM 和 DSP 之间没有一致性。 由于它不是相干的、因此需要在写入后进行缓存回写操作。 耗电元件在消耗后需要失效。 DEVMEM2绕过高速缓存。

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

    尊敬的 Rex:

    在从 DSP 端写入后、从 ARM 执行缓存回写操作、我不执行同等操作、并且我了解到 ARM 端不需要执行此操作、如果我错了、请纠正我的错误。

    我列出 了在 Linux 上运行的进程、如果有任何进程导致了问题、请告知我。

     PID 用户      VSZ STAT 命令
       1根     1384 S   初始化[5]
       2 root        0软件  [kthreadd]
       3 root        0软件  [ksoftirqd/0]
       4根        0软件[kworker/0  :0]
       5 root        0 sw< [kworker/0:0h]
       7 root        0软件  [RCU_PRETER]
       8根        0软件[RCU  和 sched]
       9 root        0软件  [RCU_BH]
      10 root        0软件  [migration /0]
      11 root        0软件  [migration /1]
      12 root        0软件  [ksoftirqd/1]
      14根        0 sw< [kworker/1:0h]
      15 root        0 sw< [khelper]
      16 root        0软件  [kdevtmpfs]
      17 root        0 sw< [netns]
      18 root        0 sw< [perf]
      20根        0 sw< [writeba]
      21 root        0 sw< [crypto]
      22 root        0 sw< [bioset]
      23 root        0 sw< [kblockd]
      24 root        0软件  [IRQ/330-4807000]
      25根        0软件  [IRQ/36-PALMAS ]
      27 root        0软件  [IRQ/331-4806000]
      28 root        0软件  [IRQ/332-4807c00]
      29 root        0 sw< [rpciod]
      30根        0软件[kswapd0]   
      31根        0软件  [fsnotify_mark]
      32 root        0 sw< [nfsiod]
      48 root        0软件  [IRQ/379-OMAP HD]
      49根        0软件  [kworker/U4:1]
      54 root        0软件  [IRQ/27-talert]
      55 root        0软件  [IRQ/228-4809c00]
      56 root        0软件  [mmcqd/0]
      78 root        0软件  [IRQ/361-4846800]
      79 root        0软件  [IRQ/360-4846800]
      80 root        0软件  [mmcqd/1]
      81 root        0软件  [mmcqd/1boot0]
      82 root        0软件  [mmcqd/1boot1]
      83根        0 sw< [defewq]
      85 root        0 sw< [kworker/1:1h]
      86 root        0软件  [jbd2/mmcblk0p2-]
      87 root        0 sw< [ext4-RSV-conver]
      88根        0软件  [kworker/1:2]
      89 root        0 sw< [kworker/0:1h]
      90 root        0软件  [kworker/0:2]
      96 root        0软件  [IRQ/447-4802000]
     121根     3232 S   /lib/udev/udevd -d
     266根        0软件  [kworker/0:3]
     311 root        0 sw< [ata_SFF]
     360 root        0软件  [IRQ/448-mcp7941]
     366 root        0软件  [IRQ/449-2-006F]
     377根        0 sw< [PVR_TIMER]
     401 root        0 SW  [IRQ/259-extCON_]
     402 root        0 SW  [IRQ/258-Palmas_]
     474 root        0软件  [kworker/U4:3]
     497 root        0软件  [IRQ/73-pixcir_t]
     507 root        0软件  [SCSI_eh_0]
     508 root        0 sw< [SCSI_TMF_0]
     748根        0软件  [kjournalD]
     797 root        0 sw< [cryptodev_queue]
     815 root     1368 S   /usr/sbin/rngd
     942 root     1988 S   udhcpc -R -b -p /var/run/udhcpc.eth0.pid -i eth0
     949信息 b 2616 S   /usr/bin/dbus-demon --系统
     956 root     1236 S   /usr/bin/uim -f /sys/./devices/platform/kim
     959 root        0 sw< [PVR_workqueue]
     964 root     2320 S   {runWeston}/bin/bash /usr/bin/runWeston
     971 root    24856 S   Weston --idle-time=0
     974 root     3228 S   /lib/udev/udevd -d
     975 root     3228 S   /lib/udev/udevd -d
     976 root        0 sw< [ipv6_addrconf]
     977 root     2256 S   /usr/sbin/dropbear -r /etc/dropbear/dropbear_rsa_hos
     980 root     1988 S   /usr/sbin/telnetd
     983 root     7400 S   /usr/lib/weston/weston-keyboard
     984 root     9840 S   /usr/bin/lad_dra7xx -g -l lad.txt
     989 root     8436 S   /usr/lib/weston/weston-desktop-shell
     990 RPC      2220 S   /usr/sbin/rpcbind
     995 rpcuser  1988 S   /usr/sbin/rpc.statd
     1002 root     1988 S   /sbin/syslogd -n -O /var/log/messages
     1004 root        0软件  [kworker/1:3]
     1006根     1988 S   /sbin/klogd -n
     1009无   2476 S   /usr/sbin/thttpd -d /srv/www -p 8080
     1015 avahi    3392 S   avahi-daemon:运行[am57xx-evm.local]
     1016 avahi    3392 S   avahi-daemon:chroot helper
     1027 root     4572 S   /usr/sbin/ofonod
     1036 root     5192 S   /usr/sbin/lighttpd -f /etc/lighttpd.conf
     1063根     179m S   /usr/bin/matrix_browser http://localhost:80/
     1206 root     3400 S   /bin/login --
     1207 root     1992 S   /sbin/getty 38400 tty1
     1210 root        0软件  [kworker/0:1]
     1211 root        0软件  [kworker/1:0]
     1212根     2736 S   -sh
     1213根     2404 R   ps

    我尝试访问地址0x81000000处的 DDR - SDRAM 存储器、下面所连接的是从 CCS 存储器窗口中看到的存储器位置。从 DSP 完成写入后、似乎是正确的。

    我尝试使用 devmem2从 A15读回该数据。 结果如下所示。

    root@am57xx-EVM:~# devmem2 0x81000000
    /dev/mem 已打开。
    映射到地址 bb6f4a000的内存。
    在地址 0x81000000 (bb6f4a000)处读取:0x00000000
    root@am57xx-EVM:~# devmem2 0x81000004
    /dev/mem 已打开。
    映射到地址 bbb6f9b000的内存。
    在地址 0x81000004 (0xb6f9b004)读取:0x00000000
    root@am57xx-EVM:~# devmem2 0x81000008
    /dev/mem 已打开。
    映射到地址 bbb6f7b000的内存。
    在地址 0x81000008 (0xb6f7b008)上读取:0x00000000
    root@am57xx-EVM:~# devmem2 0x8100000C
    /dev/mem 已打开。
    映射到地址 bbb6fb5000的内存。
    在地址 0x8100000C (bbb6fb500c)上读取:0x00000000
    root@am57xx-EVM:~# devmem2 0x81000010
    /dev/mem 已打开。
    映射到地址 bb6f0c000的内存。
    在地址 0x81000010 (bb6f0c010)上读取:0x00000000
    root@am57xx-EVM:~# devmem2 0x8100023C
    /dev/mem 已打开。
    映射到地址 bb6f9a000的内存。
    在地址 0x8100023C (0xb6f9a23c)上读取:0x00000000
    root@am57xx-EVM:~# devmem2 0x8100035C
    /dev/mem 已打开。
    映射到地址 bb6fb000的内存。
    在地址 0x8100035C (bb6fbb35c):0x00000000处读取
    root@am57xx-EVM:~#

     所有值均为0、我无法找出问题。

    要将 SDRAM 用作 ARM-DSP 之间的共享存储器、我是否应该从 ARM/DSP 端进行任何配置?

    谢谢、

    Janardan

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

    OCMC 是否用于共享内存? 如果您使用的是 OCMC、为什么 DDR 存储器转储在0x81000000? 您是否应该转储0x40400000处的 ocmc2存储器或0x40500000处的 ocmc3?

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

    当我使用0x40300000或0x40400000 OCMC 内存时,我观察到内核崩溃,因此我也想检查 SDRAM,使用 SDRAM 作为共享内存也符合我们的要求。

    请向我提供有关使用 OCMC 作为共享存储器以及使用 SDRAM 作为共享存储器的详细信息。

    我无法确定相关性。 我看到它正在从您的帖子中处理您的设置,我认为我做了一些错误。 目前、我按以下顺序执行操作。

    1.从 DSP 写入存储器(dra7-dsp1-fw.xe66通过 remote proc 从 Linux 加载)
    2.通过 devmem2回读存储器

    对 DTS 或 Linux 终端的任何其他依赖项是否有任何作用?
    在 DSP 端的配置文件或资源表中是否有任何事情要做?

    期待您的帮助。

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

    尊敬的 Rex:

    听起来像是一个有趣的问题。  

    您是否会共享一个可在您的设置中正常工作的示例应用程序、该示例应用程序可按原样尝试? 请提供所需的详细步骤/更改。

    感谢您的快速帮助。

    -RJ

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Janardan>>>
    从 DSP 端写入后、我正在执行缓存回写操作、从 ARM 写入后、我不会使其无效、并且我理解 ARM 端不需要缓存回写操作、如果我错了、请纠正我的错误。

    Rex、
    您可以就此发表评论吗? 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、Raj 和 Janardan、

    我只是尝试使用发行版中的默认 DTB 文件。 这意味着根本没有变化。 我能够从 DSP 端修改 OCMC2、并从 ARM 上的 Linux 正确修改 devmem2转储。

    雷克斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    顺便说一下、我将在假期休息、直到12月3日才回到办公室。 我没有看到 OCMC 共享内存出现任何问题。 如果您仍有疑问、我将在回到办公室后才能访问论坛。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Rex:

    您使用的是哪个版本的 Processor SDK Linux?

    谢谢、

    Janardan

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

    尊敬的 Rex:


    接下来、我们仍面临将 SDRAM/OCMC 用作共享存储器的问题。

    我们尝试将 L2 RAM 用作 DSP-ARM 之间的共享存储器、L2位于 DSP 子系统内部且工作正常、DSP/写入-> ARM/Read 和 ARM/Write -> DSP/读取在此存储器上工作正常。

    这是我遵循的顺序。


    1.通过指针从 DSP 访问 L2存储器并写入该存储器。

    2.从 ARM 端,将 L2存储器地址转换为全局地址

    3.使用此全局地址读取存储器

    这符合预期、但我们还需要使该共享存储器在 SDRAM 和 OCMC 上正常工作、请帮助我们确定问题。

    谢谢、

    Janardan

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

    很抱歉、我从感恩节开始外出、无法访问论坛。

    我使用的是5.0版本。 我假设您对 DTS 进行了更改、以便在 Linux 端配置 OCMC2和/或 OCMC3。
    我不确定您是否阅读了 IPC 文档。 请查看 IPC 页面 software-dl.ti.com/.../Foundational_Components_IPC.html

    IPC 页面中的所有信息对您的多核应用非常有用。 有一个《AM57x 自定义多核应用》、 www.ti.com/.../sprac60.pdf。 它介绍了使用 CMEM 或 CMA 的几个选项。

    在 IPC 用户指南(RTOS)中有 IPC 页面链接、您应该可以找到 IPC 自定义资源表。 它指定 DSP 和 Linux 使用哪些区域来授予对它们的访问权限。

    雷克斯