Я использую Linux 4.14
CRT C и Framebuffer являются частью DRM Framework.
В общем случае драйвер должен создавать и инициализировать CRT C ( struct drm_crtc
) и Framebuffer (struct drm_fbdev_cma
в моем случае).
CRT C сохраняет указатель на плоскость:
struct drm_crtc {
...
struct drm_plane *primary;
...
};
На плоскости хранится указатель на кадровый буфер:
struct drm_plane {
...
struct drm_framebuffer *fb;
...
};
Как кадровый буфер назначается плоскости? Как я вижу в коде, драйверы не присваивают crtc->primary->fb
. Какие функции ядра я должен использовать для привязки fb к основной плоскости? Существует функция с именем drm_crtc_init
, но в моем случае она покидает плоскость с NULL
в поле .fb
.
Требуется ли для этого создание Framebuffer перед CRT C создан?
Пожалуйста, дайте мне знать, мое понимание этой части DRM неверно.