ZHDA316 September 2026 AM623
软件架构 (图 4-2) 通过分层的 Linux 驱动程序栈,将 Arm 内核与 PRU 子系统紧密耦合。运行在 Arm 内核上的 Linux 内核为 PRU 通信提供了两种驱动机制:RemoteProc 和 rpmsg。RemoteProc 充当基本控制机制:读取从 U-Boot 传递的器件树二进制文件 (DTB),将 PRU 固件加载到指令内存中,并启动 PRU 执行。一旦 PRU 开始运行,rpmsg 便通过 PRU 数据内存中的共享 vring 缓冲区,处理 PRU 固件与用户空间应用程序之间的双向消息传递,并通过 /dev/rpmsg-pru 接口对外暴露。位于这些核心 Linux 驱动之上的是两个 PRU 专用客户端驱动:RemoteProc-PRU 和 rpmsg-PRU,它们将通用框架抽象为一套统一的 API,供上层协议栈使用。
图 4-2 Sitara Arm/PRU 软件架构图 4-3 将此通用协议栈映射到 AM335x 上具体的 EtherCAT 器件实现。图 3-3 中的 PRU 子系统驱动程序 (API) 对应于图 3-2 中的客户端驱动程序层:它提供一个统一的接口,将底层的固件加载和消息传递机制对上层隐藏。运行在 Arm 核心上的 Protocol Adaptation Layer、EtherCAT Device Stack 和 Industrial Application 共同对应于图 4-2 中的用户空间应用程序,并通过 /dev/rpmsg-pru 接口与 PRU 交换数据。PRU 固件处理第 2 层数据链路功能:帧处理和 MII 接口控制。这种分层设计允许将不同的工业协议固件独立加载到 PRU 上,从而在无需修改应用层软件的情况下实现多协议运行。
图 4-3 PRU-ICSS 上的 EtherCAT 器件软件架构