Загрузка данных


import fcntl
import struct
import time
import os

# Структура: 32 байта под строку (имя), uint32 (src), uint32 (dst)
# Формат '32sII' для struct.pack()
def create_endpoint():
    ctrl_path = "/dev/rpmsg_ctrl0"
    if not os.path.exists(ctrl_path):
        print(f"Ошибка: {ctrl_path} не найден")
        return

    # Вычисляем номер ioctl (_IOW(0xb5, 0x1, struct rpmsg_endpoint_info))
    # Магическое число 0xb5 (181), номер команды 1, размер структуры 40 байт
    RPMSG_CREATE_EPT_IOCTL = 0x4028b501 

    # Данные для отправки
    name = b"rpmsg-virtual-tty-channel"
    src_addr = 30
    dst_addr = 30

    # Упаковываем данные в бинарную структуру (32 байта под имя + два uint32)
    payload = struct.pack("32sII", name, src_addr, dst_addr)

    try:
        fd = os.open(ctrl_path, os.O_RDWR)
        fcntl.ioctl(fd, RPMSG_CREATE_EPT_IOCTL, payload)
        print("Эндпоинт успешно создан! Проверьте появление /dev/rpmsg0")
        
        # Удерживаем дескриптор открытым, чтобы ядро не уничтожило эндпоинт
        while True:
            time.sleep(1000)
            
    except Exception as e:
        print(f"Ошибка при создании эндпоинта: {e}")

if __name__ == "__main__":
    create_endpoint()