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 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 端读取
我已附上一些日志、请找到相同的日志。
谢谢、
您好、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
尊敬的 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
尊敬的 Rex:
听起来像是一个有趣的问题。
您是否会共享一个可在您的设置中正常工作的示例应用程序、该示例应用程序可按原样尝试? 请提供所需的详细步骤/更改。
感谢您的快速帮助。
-RJ
尊敬的 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