Як я можу додати додатковий пристрій фреймбуфера в Linux?


16

Я використовую Ubuntu 12.04 LTS як домашній сервер NAS, без X. Нещодавно я ввійшов у налаштування його, щоб він також працював як медіа-пристрій відео відтворення. В цей момент може бути простіше встановити X, але я вирішив спробувати mplayer з відтворенням фреймбуфера. Це працювало, і все було добре і добре.

Однак для цікавості та, можливо, і для практичних наслідків я не можу перестати думати про фреймбуфери. Там , здається, тільки один фреймбуфер пристрій /dev/fb0. (Btw. Я використовую драйвер vesafs) Якщо я запускаю кілька програм, які використовують фреймбуфери, настає хаос. Наприклад, запущений mplayer від fbterm просто розбиває його. Цікаво, що переглядач зображень fbi вдається переглядати зображення якось. Очевидно, що програми не можуть ділитися пристроєм, адже система вікон не існує.

Отже, чи обмежена кількість пристроїв (vesa) fb апаратними пристроями відображення? Чи могло б бути більше в принципі, як, наприклад, є кілька TTys? Чи додали б ще якусь допомогу для одночасного використання програмного забезпечення, яке їх використовує? Як я можу додати більше?

Також логіка того, як рамбуфери підключені до ttys, мені не зовсім зрозуміла ... наприклад, mplayer показує, що це відеокадр на кожному tty, але fbi - ні. Крім того, консоль за замовчуванням Ubuntu (fbcon?) Відображається за накладеним відео, що мені здається дивним. Про що це все?

Відповіді:


18

Оскільки ще ніхто не відповів, і після стомлюючих годин гуглінгу та тестування я зрозумів тему, я збираюся відповісти на це ...

Оскільки інтерфейс пристроїв framebuffer є досить загальним, в принципі може бути більше fb-пристроїв. Однак, оскільки використовуваний я драйвер VESA забезпечує пряме з'єднання між певним апаратним пристроєм та файлом пристрою framebuffer, не має сенсу мати їх більше, ніж один має реальні пристрої.

Існує драйвер для віртуальних фреймбуферних пристроїв, vfb. (Примітка: відмінна від xvfb, яка є віртуальним фреймбуфером для X). Я сам цього не перевіряв, але можна мати стільки пристроїв fb, скільки хоче використовувати віртуальний пристрій. Я також вважаю, що ніщо в принципі не заважає передати віртуальний пристрій на апаратний фреймбуфер, що дозволяє побудувати мультиплексор фреймбуфера

Про зв’язок між фреймбуферами та tty: немає. Кадрбуфер просто притягується до екрану, не зважаючи ні на що.

Мене спочатку збентежило поведінка переглядача зображень fbi. Виявляється, він спритно перевіряє, чи відкритий tty, в якому він працює, чи ні, і звертається до фреймбуфера чи ні відповідно до цього. (Ось чому він відмовляється працювати над SSH, на відміну від mplayer - він не приймає псевдотермінал.) Але функція, подібна до мультиплексора, НЕМАЄ нічого спільного з самим фреймбуфером.

Якщо є декілька процесів запису в фреймбуфер, вони не блокують один одного . Виявляється, мої попередні проблеми (збої та подібні) із використанням декількох програм fb одночасно навіть не стосувались фреймбуфера. Візьміть термінал fbterm і запустіть з нього mplayer: немає проблем. Термінали fbterm і fbcon та переглядач зображень fbi притягуються до буфера лише тоді, коли щось оновлюється, тому mplayer переважає над екраном практично у 100% часу. Але якщо ви спробуєте запустити двох гравців, ви отримаєте уявлення про те, що мерехтіння показує кадри одного і другого, коли вони намагаються підтягнути до буфера, що має перегони.

Деякі корисні посилання:

http://moi.vonos.net/linux/framebuffer-drivers/

https://www.kernel.org/doc/Documentation/fb/framebuffer.txt


Якщо у вас невеликий другий РК-дисплей як вторинний (думаю, 320x240 пікселів, 3 дюйма), використовуючи fb1, це має сенс для цього. У мене є маленький Adafruit adafruit.com/product/1601, який використовує (лише) fb1. Їх програмне забезпечення є відкритим кодом, але їх зображення в ОС намагається запустити Linux з графічним інтерфейсом в 320х240 і виходить з ладу. Як другий пристрій це може бути нормально, я не використовував його вже пару років. Див. Людина mknod.
Алан Корі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.