#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;
}