完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在尝试在 Cortex-A53 和 M7 之间的 IMX8MP 上使用 RPMsg 功能。更具体地说,现在我正在尝试将它与示例 imx_rpmsg_tty 驱动程序一起使用,以便在它们之间建立一个简单的字符设备接口。我已经阅读了一些我发现的文档,并使用示例设备树 `arch/arm64/boot/dts/freescale/imx8mp-evk-rpmsg.dts` 作为我的基础。但是我很难找到 RPMsg 节点本身的文档,我想问一个问题列表。也请原谅我,因为我对 BSP 开发还是个新手。
首先,这是我创建的设备树(它是示例 DTS 的修改/修剪版本,添加了 rpmsg 节点): #include #include /* * ATTENtiON: M7 may use IPs/peripherals including: * ECSPI0/ECSPI2, FLEXCAN, GPIO1/GPIO5, GPT1, I2C3, I2S3, UARTs, * PWM4, SDMA1/SDMA2, and more. Any peripheral used by the cortex M7 * must be disabled in the device tree and must be added to domain 1 * in the U-Boot device tree. */ / { // This is for RPMsg. Specifically, at least for the imx_rpmsg_tty driver rpmsg: rpmsg { compatible = "fsl,imx8mq-rpmsg"; reg = <0x0 0x55000000 0x0 0x80000>; memory-region = <&vdevbuffer>; vdev-nums = <1>; /* up to now, the following channels are used in imx rpmsg * - tx1/rx1: messages channel. * - general interrupt1: remote proc finish re-init rpmsg stack * when A core is partition reset. */ mbox-names = "tx", "rx", "rxdb"; mboxes = <μ 0 1 μ 1 1 μ 3 1>; status = "okay"; }; reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges; // M7 TCM instruction memory // Linux/Cortex-A physically can't access this area of memory m7_itcm: m7@0x7E0000 { no-map; reg = <0 0x7E0000 0 0x20000>; }; // M7 TCM data memory // Linux/Cortex-A physically can't access this area of memory m7_dtcm: m7@0x800000 { no-map; reg = <0 0x800000 0 0x20000>; }; // M7 RAM // This is used if the Cortex-M is booted from RAM m7_reserved: m7@0x80000000 { no-map; reg = <0 0x80000000 0 0x1000000>; }; // IMX Remote Proc; tx buffer 32KiB vdev0vring0: vdev0vring0@55000000 { compatible = "shared-dma-pool"; reg = <0 0x55000000 0 0x8000>; no-map; }; // IMX Remote Proc; rx buffer 32KiB vdev0vring1: vdev0vring1@55008000 { compatible = "shared-dma-pool"; reg = <0 0x55008000 0 0x8000>; no-map; }; rsc_table: rsc-table@550ff000 { reg = <0 0x550ff000 0 0x1000>; no-map; }; /* RPMsg buffer; this is 64KiB which is 32KiB for the * TX and RX buffers each. The start address is defined * as the `VDEV0_VRING_BASE` define in the Cortex M7 code. */ vdevbuffer: vdevbuffer@55400000 { compatible = "shared-dma-pool"; reg = <0 0x55400000 0 0x100000>; no-map; }; }; // IMX remote proc imx8mp-cm7 { compatible = "fsl,imx8mp-cm7"; rsc-da = <0x55000000>; clocks = <&clk IMX8MP_CLK_M7_DIV>; fsl,startup-delay-ms = <500>; mbox-names = "tx", "rx", "rxdb"; mboxes = <μ 0 1 μ 1 1 μ 3 1>; memory-region = <&vdevbuffer>, <&vdev0vring0>, <&vdev0vring1>, <&rsc_table>; status = "okay"; }; }; 哦,还有一张纸条;我正在从 TCM 启动 Cortex-M7,并且没有使用远程 proc 来启动/停止/热加载它。另外,我的内核是 v5.15。 所以我对此的问题如下:
|
|
相关推荐
1个回答
|
|
`vdevbuffer` 引用通常在使用 RPMsg 功能时需要,因为它是在远程处理器和本地主机之间传输消息的缓冲区。在 imx8mp-cm7 上使用 RPMsg 时,您需要确保已经将 vdevbuffer 引用添加到设备树中的 RPMsg 节点中。
在您的设备树中的 RPMsg 节点中,您需要指定 `reg` 属性,以及 `vdevbuffer` 和 `status` 属性。这些属性告诉内核在哪里可以找到 RPMsg 的缓冲区,并且应该如何对其进行操作。 下面是一个示例 RPMsg 节点的定义: ``` rpmsg { compatible = "linux,rpmsg-virtio"; status = "okay"; reg = <0x0000 0x0 0x0 0x0 0x0>; vdevbuffer = <&rpmsg_virtio0_buffer>; }; ``` 请注意,`reg` 属性设置为零,因为在这种情况下,RPMsg 缓冲区是使用内存映射 I/O 访问的,而不是使用设备寄存器。 `vdevbuffer` 属性设置为对缓冲区的引用,例如 `&rpmsg_virtio0_buffer`。 一旦您的设备树配置正确,您就可以在 imx_rpmsg_tty 示例驱动程序中使用 RPMsg 功能了。请记住,在使用 RPMsg 时,您需要在远程处理器和本地主机之间协调好消息格式和协议。例如,您需要确保在远程处理器和本地主机之间传输的消息具有相同的大小和格式,否则可能会出现不可预测的行为。 |
|
|
|
只有小组成员才能发言,加入小组>>
1903个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36326 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4391 浏览 0 评论
6038 浏览 1 评论
6757 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4206 浏览 0 评论
613浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
610浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
599浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
690浏览 2评论
788浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-14 12:34 , Processed in 0.885605 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号