Как сделать второй экран, не будучи мастером DRM? - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть встроенный процесс, который отображается на экране напрямую с помощью API DRM и KMS.Он работает на минимальном дистрибутиве Yocto (без рабочего стола или Wayland).Я хотел бы сделать второй экран, который подключен к тому же графическому процессору из другого процесса.Первый процесс открывает «/ dev / dri / card0» и становится де-факто мастером DRM, и он может выполнить drmModeSetCrtc & drmModePageFlip на основном экране для отображения буфера кадров.Однако, если я вызову drmDropMaster, он больше не сможет перевернуть страницу.Поэтому второй процесс не может стать мастером DRM и выполнить рендеринг на другой дисплей с использованием той же технологии.

Существует множество примеров того, как выполнить рендеринг на один экран с помощью диспетчера прямой визуализации (DRM) и настройки режима ядра (KMS), но я не нашел ни одного, который мог бы рендериться на второй экран из другого процесса.

Я хотел бы не иметь мастера, если это возможно, после установки режима отображения, но перелистывание страниц также является ограниченным API,Если это не может быть достигнуто, может быть, пример того, как предоставить разрешение второму процессу, используя drmAuthMagic?

1 Ответ

0 голосов
/ 15 декабря 2018

Невозможно выполнить перелистывание страниц, не будучи мастером DRM.IOCTL защищен в файле drm_ioctl.c:

DRM_IOCTL_DEF(DRM_IOCTL_MODE_PAGE_FLIP, drm_mode_page_flip_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED)
DRM_IOCTL_DEF(DRM_IOCTL_SET_MASTER, drm_setmaster_ioctl, DRM_ROOT_ONLY),
DRM_IOCTL_DEF(DRM_IOCTL_DROP_MASTER, drm_dropmaster_ioctl, DRM_ROOT_ONLY),

Поэтому я решил поместить флип в критическую секцию, где приложение вызывает drmSetMaster, планирует флип и вызывает drmDropMaster.Это сложный процесс, и оба процесса должны быть root, но он работает достаточно хорошо для встроенной платформы.Однако процесс должен авторизоваться сам, используя drmGetMagic и drmAuthMagic, чтобы он мог выполнять рендеринг, пока он не является мастером, и снова захватывать мастерство.Я делаю это, когда он впервые становится мастером и устанавливает режим.

...