在从nxp网站上下的例子rpmsg_lite_pingpong_rtos_linux_remote在forlinx的板子上通信始终挂载不上,对比了一下发现是RESOURCE_TABLE_START设置的不对,修改成0x2001F000U就正常了,但是看着和dts里面配置的又对不上了
rsc_table: rsc_table@2021f000 {
reg = <0 0x2021f000 0 0x1000>;
no-map;
};
把内核的代码看了一遍发现好像是映射了一下,在
{ .compatible = "fsl,imx93-cm33", .data = &imx_rproc_cfg_imx93 },
static const struct imx_rproc_att imx_rproc_att_imx93[] = {
/* dev addr , sys addr , size , flags */
/* TCM CODE NON-SECURE */
{ 0x0FFC0000, 0x201C0000, 0x00020000, ATT_OWN | ATT_IOMEM },
{ 0x0FFE0000, 0x201E0000, 0x00020000, ATT_OWN | ATT_IOMEM },
/* TCM CODE SECURE */
{ 0x1FFC0000, 0x201C0000, 0x00020000, ATT_OWN | ATT_IOMEM },
{ 0x1FFE0000, 0x201E0000, 0x00020000, ATT_OWN | ATT_IOMEM },
/* TCM SYS NON-SECURE*/
{ 0x20000000, 0x20200000, 0x00020000, ATT_OWN | ATT_IOMEM },
{ 0x20020000, 0x20220000, 0x00020000, ATT_OWN | ATT_IOMEM },
/* TCM SYS SECURE*/
{ 0x30000000, 0x20200000, 0x00020000, ATT_OWN | ATT_IOMEM },
{ 0x30020000, 0x20220000, 0x00020000, ATT_OWN | ATT_IOMEM },
/* DDR */
{ 0x80000000, 0x80000000, 0x10000000, 0 },
{ 0x90000000, 0x80000000, 0x10000000, 0 },
{ 0xC0000000, 0xa0000000, 0x10000000, 0 },
{ 0xD0000000, 0xa0000000, 0x10000000, 0 },
};
将这些地址的sys addr也就是物理地址先映射了一下,然后又在dts里面把配置的0x2021f000也做了一次映射,可是还是和刚才m核里的对不上
priv->mem[b].cpu_addr = devm_ioremap(&pdev->dev, res.start, resource_size(&res));
...
if (!strncmp(node->name, "rsc_table", strlen("rsc_table")))
priv->rsc_table = priv->mem[b].cpu_addr;
b++;
对比手册好像因为刚开始m核还没有初始化内存 就使用了tcm的部分来共享数据,但是m核访问的地址并不是a核看到的地址,大概映射范围是
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。