Jak mogę dodać dodatkowe urządzenie buforujące ramki w systemie Linux?

16

Używam Ubuntu 12.04 LTS jako domowy serwer NAS, bez X. Niedawno dostroiłem go, aby pełnił również funkcję urządzenia do odtwarzania wideo. W tym momencie może być łatwiej zainstalować X, ale postanowiłem wypróbować mplayer z odtwarzaniem bufora ramki. Działało i wszystko było w porządku i dobrze.

Jednak ze względu na ciekawość, a może także ze względu na praktyczne konsekwencje, nie mogę przestać myśleć o buforach ramek. Wydaje się, że tylko jedno urządzenie bufora ramki, /dev/fb0. (Btw. Używam sterownika vesafs) Jeśli uruchomię wiele programów korzystających z buforów ramki, powstanie chaos. Na przykład uruchomienie mplayera z fbterm powoduje awarię. Co ciekawe, przeglądarka obrazów fbi w jakiś sposób wyświetla obrazy. Oczywiście programy nie mogą współdzielić urządzenia, w końcu nie ma systemu okienkowego.

Czy więc liczba urządzeń (vesa) fb jest ograniczona do sprzętowych urządzeń wyświetlających? Czy może istnieć więcej, tak jak istnieje wiele tty? Czy dodanie dodatkowej pomocy przy jednoczesnym korzystaniu z oprogramowania, które ich używa? Jak mogę dodać więcej?

Również logika, w jaki bufory klatek są połączone z tty, nie jest dla mnie całkiem jasna ... na przykład mplayer pokazuje swoją klatkę wideo na każdym tty, ale FBI tego nie robi. Co więcej, domyślna konsola Ubuntu (fbcon?) Pokazuje się za nakładką wideo, co mnie dziwnie zaskakuje. O co w tym wszystkim chodzi?

GolDDranks
źródło

Odpowiedzi:

18

Ponieważ nikt jeszcze nie odpowiedział, a po żmudnych godzinach google i testowania, zrozumiałem temat, odpowiem na to ...

Ponieważ interfejs urządzenia framebuffer jest dość ogólny, w zasadzie może być więcej urządzeń FB. Ponieważ jednak użyty przeze mnie sterownik VESA zapewnia bezpośrednie połączenie między określonym urządzeniem sprzętowym a plikiem urządzenia buforującego ramki, nie ma sensu mieć ich więcej niż jedno z rzeczywistych urządzeń.

Istnieje sterownik dla wirtualnych urządzeń buforujących ramki, vfb. (Uwaga: różni się od xvfb, który jest wirtualnym buforem ramki dla X) Sam tego nie testowałem, ale można mieć tyle urządzeń FB, ile chce się używać z urządzeniem wirtualnym. Myślę też, że nic w zasadzie nie uniemożliwia potokowania urządzenia wirtualnego do sprzętowego bufora ramki, co pozwala zbudować multiplekser bufora ramki

O połączeniu między buforami ramki i tty: nie ma. Bufor ramki jest po prostu rysowany na ekranie, bez względu na wszystko.

To, co pierwotnie mnie zdezorientowało, to zachowanie przeglądarki obrazów fbi. Okazuje się, że sprytnie sprawdza, czy tty, w którym działa, jest otwarty, czy nie, i zwraca się do bufora ramki, czy nie. (Dlatego odmawia uruchomienia przez SSH, w przeciwieństwie do mplayera - nie akceptuje pseudo terminala.) Ale funkcjonalność podobna do multipleksera NIE ma nic wspólnego z samym buforem ramki.

Jeśli istnieje wiele procesów zapisujących do bufora ramki, nie blokują się one wzajemnie . Okazuje się, że moje wcześniejsze problemy (awarie i tym podobne) przy użyciu wielu programów fb jednocześnie nie dotyczyły nawet bufora ramki. Weź terminal fbterm i uruchom z niego mplayera: nie ma problemu. Terminale fbterm i fbcon oraz przeglądarka obrazów fbi rysują do bufora tylko wtedy, gdy coś jest aktualizowane, więc mplayer dominuje na ekranie praktycznie w 100% przypadków. Ale jeśli spróbujesz uruchomić dwóch mplayerów, dostaniesz widok, który migocze pokazując klatki jednego i drugiego, gdy próbują wyciągnąć do bufora z warunkiem wyścigu.

Kilka przydatnych linków:

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

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

GolDDranks
źródło
Jeśli masz drugi wyświetlacz LCD jako drugi (pomyśl 320 x 240 pikseli, 3 cale), użycie fb1 ma sens. Mam mały Adafruit adafruit.com/product/1601 taki, który używa (tylko) fb1. Ich oprogramowanie jest typu open source, ale obraz systemu operacyjnego próbuje uruchomić Linuksa z graficznym interfejsem użytkownika w rozdzielczości 320x240 i kończy się niepowodzeniem. Jako drugie urządzenie może być OK, nie korzystałem z niego od kilku lat. Zobacz człowieka mknod.
Alan Corey