3

По сути, я хочу разрешить большинству стандартных графических приложений с кадровым буфером (по крайней мере, любое, которое поддерживает указание, какое устройство /dev /fb * использовать, или может вывести это из кадрового буфера, который использует VT, из которого они запущены). ) для работы на конкретном мониторе в системе с несколькими мониторами. Это на самом деле тривиально с fbcon, если у вас есть система с несколькими видеокартами ... Но я хочу сделать так, чтобы он работал с картами, возглавляемыми Зафодом, что в настоящее время невозможно (по крайней мере, насколько мне позволяют исследования около 3 дней) без специального кода. Я имею в виду, что это возможно для карт nvidia, я не знаю, но radeondrmfb определенно создает только один кадровый буфер linux для всей карты, при этом все три монитора показывают одинаковый вывод.

Итак, теоретическое решение, к которому я пришел, заключается в следующем: я использую код, подобный тому, который найден здесь: http://betteros.org/tut/graphics1.php#dumb отточил кучу, так как это всего лишь демонстрационный код, чтобы показать вам как использовать kms/drm способом, аналогичным кадровому буферу, и создать буфер, соответствующий каждому соединителю, который сообщает как активный и подключенный, на основе размеров экрана каждого (возможно, в два раза больше, чтобы обеспечить двойную буферизацию y-pan) и затем зарегистрируйтесь в ядре в качестве драйвера устройства, создав файловый дескриптор /dev /fb {n} для каждого буфера.

Затем реализуйте код, который позволяет приложению драйвера представлять себя ядру, как если бы оно было устройством кадрового буфера (на самом деле это так, и я подозреваю, что именно так работает radeondrmfb, но я не полностью проанализировал radeon_fb.c из исходников ядра пока что нет, так что я предполагаю, что при реализации всех стандартных функций, ожидаемых от кадрового буфера linux через kms/drm.

В этот момент стандартное ядро grub/syslinux arg fbcon = map: должно работать для размещения консолей кадрового буфера для определенных номеров VT на определенных консолях (например, если мой драйвер может выделить /dev /fb1, /dev /fb2 и /dev /fb3, затем fbcon = map: 123 должно вызвать отображение tty1 на мониторе, связанном с /dev /fb1, tty2 в /dev /fb2 и т. д.). В этот момент запуск большинства хорошо написанных приложений фреймбуфера, таких как fbi, должен запускать их, подключенные к фреймбуферу, в котором находится экземпляр fbcon, который их вызвал.

Никаких гарантий, и плохо написанные приложения с фреймбуфером могут просто захватить /dev /fb0 и испортить ваш день (и я подозреваю, что что-либо, использующее directfb, вызовет ужасные, ужасные вещи), но в теории это должно дать мне возможность просматривать ttys одновременно без X, или управляйте 3 графическими приложениями кадрового буфера одновременно, на моих 3 мониторах, проходящих через мою единственную трехглавую карту.

Теперь я совершенно не в себе, и я углубляюсь в глубокий конец, эффективно пишу драйвер устройства здесь ... Таким образом, любой, имеющий опыт в подобных вещах, может сказать мне, является ли моя гипотеза обоснованной, и / или дать мне какой-нибудь совет? Помимо: «Вы с ума сошли, просто используйте X!" конечно.

0