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.

[FAQ] [参考译文] [常见问题解答] AM6442:如何使 R5F PRU 以太网与 Linux A53配合使用

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1318459/faq-am6442-how-to-get-r5f-pru-ethernet-working-alongside-linux-a53

器件型号:AM6442
主题中讨论的其他器件:TMDS64EVM、、 SysConfig

我使用具有 Linux 内核、RTOS 内核和 PRU_ICSSG 内核的 Sitara 处理器(AM64x 系列)、 我想使用 RTOS 内核来控制 PRU_ICSSG 内核、这些内核用于某种以太网网络协议、 如何使它与 Linux 一起运行?

.

本示例使用以下指令编写:

硬件:TMDS64EVM

软件:Linux SDK 9.1和 MCU+ SDK 9.1

MCU+网络示例:examples/networking/enet_layer2_icssg/icssg_layer2_dualmac。 相同的概念也适用于任何 R5F 网络协议。

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

    首先、制定基本设计决策

    1) 1)您使用的是 SPL 引导还是 SBL 引导?  

    这会影响电路板配置设置需要的位置。 请参阅
    AM64x Academy 多核模块、"启动和禁用处理器内核":
    https://dev.ti.com/tirex/explore/node?a=7qm9DIS__LATEST&node=A__ATo1YYblar8bnpnjYwvd1g__AM64-ACADEMY__WI1KRXP__LATEST

    2) 2)您希望如何初始化 R5F 内核?  

    是使用 Linux Remoteproc 驱动程序还是在 SBL 引导期间加载 R5F 内核?

    3) 3)是否希望 Linux 和 R5F 之间实现 RPMSG IPC 通信?  

    如果愿意、您需要修改 R5F 项目以确保 Linux RPMsg IPC 资源得到分配。

    .

    在本示例中、我们将在 TMDS64EVM 上使用 AM6442。
    *我们将使用 Linux SDK 的 SPL 引导
    *我们将使用 Linux remoteproc 驱动程序来初始化 R5F 内核
    *我们将在 Linux RPMSG IPC 资源中构建、以使 Linux 能够初始化远程内核、但我们不会为本示例编写任何 RPMsg IPC 代码

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

    修改 R5F 项目、使其能够由 Linux 进行初始化  

    仅当 R5F 项目将由 Linux remoteproc 驱动程序初始化、或您将使用 RPMsg IPC 在 Linux 和 R5F 之间进行通信时、才需要执行此操作。

    添加 Remoteproc 驱动程序可以读取的资源表。 遵循这里的 AM64x Academy 多核模块步骤:
    https://dev.ti.com/tirex/explore/node?a=7qm9DIS__LATEST&node=A__AeMVTHckwFDmFoNkRHpRPw__AM64-ACADEMY__WI1KRXP__LATEST
    远程内核上的应用开发>如何创建可由 Linux 初始化的远程内核固件> 选项1:将 Linux IPC 添加到 MCU+工程

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

    修改 Linux devicetree 文件和 R5F 工程、以确保每个外设和存储器区域仅由一个操作系统使用  

    除非是共享存储器、否则每个外设和存储器区域都应由单个操作系统(即 Linux 或其中一个 R5F)拥有。

    Linux 的工作方式与 RTOS 不同。 RTOS 只接受您提供的特定资源。 Linux 是"贪婪的"、因此它将尝试使用外设或内存、除非您特别禁用它。 请确保 Linux devicetree 设置和 R5F 内核设置之间不存在冲突。  

    这意味着禁用 R5F 将使用的资源、例如整个 PRU 子系统、特定 UART 实例等 无需禁用 PRU 子系统的每个子节点-禁用顶层 PRU 子系统就足够了。

    这还意味着 Linux 和远程内核应约定共享存储器的位置(例如、如果使用 Linux remoteproc 引导、则是资源表;如果使用 Linux RPMSg、则是 VRINGS)。

    如需更多信息、请参阅  
    AM64x Academy 多核模块、"如何分配外设"和"如何分配存储器"
    https://dev.ti.com/tirex/explore/node?a=7qm9DIS__LATEST&node=A__AROmAnuFxeqz306G2XuoZw__AM64-ACADEMY__WI1KRXP__LATEST

    为该示例分配外设:MCU+侧

    Enet 示例中的外设 Linux A53 R5F0_0
    MCU_GPIO0 X
    I2C0 X
    I2C1

    X

    ICSSG1 X
    UART0 X
    UART1 (新增) X
    EEPROM X

    MCU+ Enet 示例中使用的大多数外设、I 分配给 R5F0_0。 这意味着需要从 Linux devicetree 中禁用这些外设(如 I2C1和 ICSSG1)。

    我确实选择了保留 UART0被分配给 Linux。 我们通过在 SysConfig 中修改此部分、将 R5F0_0移到了使用 UART1:
    TI 驱动程序移植层>调试日志> UART Instance > USART1

    然后、我们可以通过转至来验证 UART 实例是否已正确更改  
    TI Drivers > UART >以查看 UART 实例已更新为 UART1。

    通过转到 File > Save、保存 SysConfig 更改

    为该示例分配外设:Linux 端  

    Linux devicetree 的一些更改很明显。 是 MCU+工程使用的外设吗? 然后、应在 Linux devicetre 中将其设置为"disabled"或"reserved"。

    但是、您还必须考虑 PCB 板设计。 在  TMDS64EVM 上、CPSW 端口2与 ICSSG1端口之一连接到同一以太网接口。 因此、在 Linux devicetree 中、我们需要禁用第二个 CPSW 以太网端口和 MDIO 多路复用器、以确保 Linux 不会使用该以太网连接器干扰 R5F。

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

    Ping