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


#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <stdint.h>
#include <string.h>

/* Определение структур и макросов из заголовочных файлов ядра Linux */
struct rpmsg_endpoint_info {
    char name[32];
    uint32_t src;
    uint32_t dst;
};

#define RPMSG_CREATE_EPT_IOCTL _IOW(0xb5, 0x1, struct rpmsg_endpoint_info)

int main() {
    struct rpmsg_endpoint_info ept_info;
    
    // Заполняем структуру параметрами вашего канала M7
    strncpy(ept_info.name, "rpmsg-virtual-tty-channel", sizeof(ept_info.name));
    ept_info.src = 30; // Локальный эндпоинт в Linux (Source)
    ept_info.dst = 30; // Удаленный эндпоинт на M7 (Destination)

    int fd = open("/dev/rpmsg_ctrl0", O_RDWR);
    if (fd < 0) {
        perror("Не удалось открыть /dev/rpmsg_ctrl0");
        return EXIT_FAILURE;
    }

    if (ioctl(fd, RPMSG_CREATE_EPT_IOCTL, &ept_info) < 0) {
        perror("Ошибка вызова ioctl (RPMSG_CREATE_EPT_IOCTL)");
        close(fd);
        return EXIT_FAILURE;
    }

    printf("Эндпоинт '%s' успешно создан!\n", ept_info.name);
    printf("Проверьте появление устройства в /dev/rpmsg*\n");

    /* ВАЖНО: Канал существует, пока открыт этот дескриптор. 
       Чтобы зафиксировать его, мы оставляем программу работать. */
    while(1) {
        sleep(1000);
    }

    close(fd);
    return EXIT_SUCCESS;
}