LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

AMP相关:5 OpenAMP以及RPMsg-Lite

OpenAMP是一个开源框架,专为非对称多处理系统设计,提供生命周期管理和处理器间通信能力,支持与Linux兼容的组件以及独立库,适用于RTOS和裸机环境。

1 OpenAMP说明

OpenAMP框架包含提供了三个重要组件:Virtio、RPMsg和Remoteproc。Remoteproc实现了主处理器对远程处理器程序的加载、启停远程处理器,实现对远程处理器的生命周期管理;RPMsg依托Virtio实现了主处理器和远程处理器之间的核间通信。

OpenAMP主要基于以下关键技术和协议:

  • remoteproc - 它提供了启动、停止和管理远程处理器的能力,让异构系统中的不同处理器能够协同工作。
  • rpmsg - 一种轻量级的消息传递机制,用于在处理器之间进行低延迟、高性能的数据传输。rpmsg 支持动态通道创建,使得进程间通信更加灵活。
  • virtio - 类似Linux内核中的vring接口,OpenAMP实现了高效的双向通信缓冲区管理,降低了CPU负担和提高了通信效率。
  • Platform Abstraction Layer (PAL) - 提供了一组API,隐藏了底层硬件的复杂性,使OpenAMP能够在各种平台上无缝运行。

2 OpenAMP相关资源

OpenAMP官方代码:GitHub - OpenAMP/open-amp: The main OpenAMP library implementing RPMSG, Virtio, and Remoteproc for RTOS etc

OpenAMP文档:Welcome to the OpenAMP Project Documentation — OpenAMP documentation

OpenAMP中remoteproc介绍:Life Cycle Management — OpenAMP documentation

OpenAMP中RPMsg介绍:RPMsg Messaging Protocol — OpenAMP documentationRPMsg Communication Flow — OpenAMP documentation

3 OpenAMP在STM32MP157的M4实现

M4使用OpenAMP框架,创建和A7对等的架构:rproc、virtio、vring、rpmsg,以及一个虚拟的UART和A7的/dev/ttyRPMSGx进行通信。

main
  HAL_Init
  MX_IPCC_Init--初始化IPCC硬件。
    HAL_IPCC_Init
  MX_OPENAMP_Init
    MAILBOX_Init
      HAL_IPCC_ActivateNotification
        IPCC_channel1_callback--Channel1的中断回调函数。
        IPCC_channel2_callback--Channel2的中断回调函数。
    OPENAMP_shmem_init
    rproc_virtio_create_vdev--创建virtio device。
    rproc_virtio_wait_remote_ready
      rproc_virtio_get_status--等待直到remoteproc组合中Master端就绪。
    rproc_virtio_init_vring--使用vring0和vring1。
    rpmsg_virtio_init_shm_pool
    rpmsg_init_vdev--初始化virtio设备。
  VIRT_UART_Init--基于rpmsg创创建endpoint用于和Linux段的rpmsg tty设备通信。
    OPENAMP_create_endpoint
  VIRT_UART_RegisterCallback
    VIRT_UART0_RxCpltCallback--读取vring中buffer放到Copy_Buffer中。
  ->循环任务处理A7发送的字符串,执行,返回执行结果。
    ->OPENAMP_check_for_message
      ->MAILBOX_Poll
        ->rproc_virtio_notified
    ->VIRT_UART_Transmit--
      ->OPENAMP_send--即调用rpmsg_send发送消息给对端remote processor。

IPCC中断处理函数:

  .word  IPCC_RX0_IRQHandler               // Mailbox RX0 Free interrupt
  .word  IPCC_TX0_IRQHandler               // Mailbox TX0 Free interrupt
  .word  DMAMUX1_OVR_IRQHandler            // DMAMUX1 Overrun interrupt
  .word  IPCC_RX1_IRQHandler               // Mailbox RX1 Free interrupt
.word IPCC_TX1_IRQHandler // Mailbox TX1 Free interrupt

4 RPMsg-Lite

RPMsg-Lite组件,它是远程处理器消息传递 (RPMsg) 协议的轻量级实现。RPMsg 协议定义了一个标准化的二进制接口,用于在异构多核系统中的多个核之间进行通信。与OpenAMP框架的RPMsg实现相比,RPMsg-Lite 减少了代码大小、简化了 API 并改进了模块化。

RPMsg-Lite代码:GitHub - nxp-mcuxpresso/rpmsg-lite: RPMsg implementation for small MCUs

RPMsg-Lite官方介绍:《RPMsg-Lite User's Guide: RPMsg Component (nxp-mcuxpresso.github.io)》。

参考文档:《多核异构通信框架(RPMsg-Lite)》、《RPMsg-Lite上手_rpmsg lite》。

posted on 2024-07-14 23:59  ArnoldLu  阅读(345)  评论(0编辑  收藏  举报

导航