openamp — 표준 비대칭 멀티프로세싱(AMP) 지원 제공#

openamp 모듈은 MicroPython을 위한 표준 프로세서 간 통신 인프라를 제공합니다. 이 모듈은 공유 리소스 테이블 설정, vring 초기화 등 OpenAMP의 모든 세부 사항을 처리합니다. Endpoint 클래스로 RPMsg 버스 인프라를 사용하기 위한 API를 제공하며, RemoteProc 클래스를 통해 펌웨어 로드, 원격 코어 시작 및 중지와 같은 프로세서 생명 주기 관리(LCM) 지원을 제공합니다.

사용 예제:

import openamp

def ept_recv_callback(src, data):
    print("Received message on endpoint", data)

# Create a new RPMsg endpoint to communicate with the remote core.
ept = openamp.Endpoint("vuart-channel", callback=ept_recv_callback)

# Create a RemoteProc object, load its firmware and start it.
rproc = openamp.RemoteProc("virtual_uart.elf") # Or entry point address (ex 0x081E0000)
rproc.start()

while True:
    if ept.is_ready():
        ept.send("data")

함수#

openamp.new_service_callback(ns_callback: Callable[[str, int], Any]) None#

새 서비스 콜백을 설정합니다.

ns_callback 인수는 원격 프로세서가 새 서비스를 알릴 때 호출되는 함수입니다. 그 시점에 호스트 프로세서는 해당 서비스가 지원되는 경우 알려진 엔드포인트를 생성하거나, 지원되지 않는 경우 무시할 수 있습니다. 이 함수가 설정되지 않으면 호스트 프로세서는 먼저 엔드포인트를 로컬에 등록해야 하며, 원격이 서비스를 알리면 자동으로 바인딩됩니다.

Endpoint 클래스#

class openamp.Endpoint(name: str, callback: Callable[[int, bytes], Any], src: int = ENDPOINT_ADDR_ANY, dest: int = ENDPOINT_ADDR_ANY)#

새 RPMsg Endpoint를 생성합니다. 엔드포인트는 두 코어 간의 양방향 통신 채널입니다.

인수는 다음과 같습니다:

  • name 은 엔드포인트의 이름입니다.

  • callback 은 엔드포인트가 데이터를 수신할 때 원격 지점의 소스 주소와 참조로 전달된 바이트 데이터와 함께 호출되는 함수입니다.

  • src 는 엔드포인트 소스 주소입니다. 제공되지 않으면 라이브러리가 엔드포인트에 하나를 할당합니다.

  • dest 는 엔드포인트 대상 주소입니다. 엔드포인트가 new_service_callback에서 생성되는 경우 반드시 제공되어야 하며 원격 엔드포인트의 소스 주소와 일치해야 합니다. 알림 전에 엔드포인트가 로컬에 등록되는 경우 대상 주소는 엔드포인트가 바인딩될 때 라이브러리가 할당합니다.

deinit() None#

엔드포인트를 파괴하고 모든 리소스를 해제합니다.

is_ready() bool#

엔드포인트가 전송할 준비가 되었으면(즉, 소스 주소와 대상 주소를 모두 가지고 있으면) True를 반환합니다.

send(buffer: bytes, *, src: int = -1, dest: int = -1, timeout: int = -1) int#

이 엔드포인트를 통해 원격 프로세서에 메시지를 보냅니다.

인수는 다음과 같습니다:

  • buffer 는 메시지 페이로드(버퍼 프로토콜을 지원하는 모든 객체, 예: bytes, bytearray 또는 str)입니다.

  • src 는 메시지의 소스 엔드포인트 주소입니다. 제공되지 않으면 엔드포인트가 바인딩된 소스 주소가 사용됩니다.

  • dest 는 메시지의 대상 엔드포인트 주소입니다. 제공되지 않으면 엔드포인트가 바인딩된 대상 주소가 사용됩니다.

  • timeout 은 사용 가능한 버퍼를 기다리는 시간을 밀리초 단위로 지정합니다. 기본적으로 이 함수는 블로킹 방식입니다.

RemoteProc 클래스#

경고

STM32H7에서 두 번째 AMP 코어는 제자리에서 중지한 다음 재시작할 수 없는 Cortex-M4입니다. 따라서 이 플랫폼에서 RemoteProc.stop() 또는 RemoteProc.shutdown() 을 호출하면 코어별 중지가 아니라 전체 시스템 리셋이 수행됩니다.

class openamp.RemoteProc(entry: str | int)#

RemoteProc 객체는 펌웨어 로드, 원격 코어 시작 및 중지와 같은 프로세서 생명 주기 관리(LCM) 지원을 제공합니다.

entry 인수는 펌웨어 이미지 경로일 수 있으며, 이 경우 펌웨어가 파일에서 대상 메모리로 로드됩니다. 또는 진입점 주소일 수 있으며, 이 경우 펌웨어는 주어진 주소에 이미 로드되어 있어야 합니다.

start() None#

원격 프로세서를 시작합니다.

stop() None#

원격 프로세서를 중지합니다. 정확한 동작은 플랫폼에 따라 다릅니다.

shutdown() None#

Shutdown은 원격 프로세서를 중지하고 모든 리소스를 해제합니다. 정확한 동작은 플랫폼에 따라 다르지만, 일반적으로 원격 코어에 대한 전원과 클럭을 비활성화합니다. 이 함수는 종료자로도 사용됩니다(즉, RemoteProc 객체가 회수될 때 호출됨).