Brak urządzenia buforującego ramki: jak je włączyć?


23

Próbuję sprawić, by karta tunera PCMCIA działała na moim bezgłowym serwerze domowym z systemem Debian Squeeze. Teraz, gdy mam bardzo duże problemy ze znalezieniem właściwej linii poleceń do przechwycenia, transkodowania końcowego strumienia wideo do sieci za pomocą VLC, zdecydowałem się iść krok po kroku i najpierw pracować na lokalnym wyjściu.

Tu pojawia się problem: wydaje się, że nie ma urządzenia buforującego ramki (/ dev / fb0), do którego można by uzyskać dostęp do wyświetlania grafiki na dołączonym ekranie! I rzeczywiście zauważyłem, że nie mam obrazu pingwina z Linuksa podczas rozruchu (wcześniej nie zwracałem uwagi, ponieważ ekran jest podłączony, ale zawsze wyłączony, a mimo to komputer jest zawsze włączony).

Ponieważ nie znam się dobrze na grafice systemu Linux, chciałbym zrozumieć:

  • Czy jest to związane z moim konkretnym sprzętem (patrz poniżej)? Czy może jest specyficzny dla Debian Squeeze / wersji jądra / ...?
  • Czy jest jakiś sterownik, który muszę ręcznie zainstalować / załadować?

Teraz kilka ogólnych informacji:

  • Komputer nie ma dedykowanej karty graficznej, ale wbudowany mikroukład graficzny (Intel G31 Express), osadzony na płycie głównej (Gigabyte G31M-ES2L)
  • Nie chcę instalować w pełni funkcjonalnego serwera X, po prostu mam urządzenie buforujące ramki do tego konkretnego testu

Wszelkie pomysły / komentarze na ten temat?


1
Kiedy już zaczniesz /dev/fb0działać, pamiętaj o mojej odpowiedzi. Rzadko ludzie z faktycznym doświadczeniem na mniej powszechny temat, poruszają się, aby udzielić odpowiedzi na kwaterę główną. Istnieją na UNIX-SE, jest to stosunkowo rzadki temat, więc istnieje mniej ekspertów.
JM Becker,

Odpowiedzi:


36

Mogę odpowiedzieć na twoje pytanie, wcześniej pracując z Linuksem FB.

Jak Linux robi FB.

  1. Najpierw musisz mieć wsparcie FrameBuffer w twoim jądrze, odpowiadające twojemu sprzętowi. Większość współczesnych dystrybucji ma obsługę za pośrednictwem modułów jądra. Nie ma znaczenia, czy twoja dystrybucja jest wstępnie skonfigurowana z logo rozruchowym, nie używam go i mam wsparcie FB.

  2. Nie ma znaczenia, czy masz dedykowaną kartę graficzną, zintegrowana będzie działać tak długo, jak obsługiwany jest sprzętowy bufor ramki.

  3. Nie potrzebujesz X, który jest najbardziej kuszącym aspektem posiadania FrameBuffer. Niektórzy ludzie nie wiedzą lepiej, więc zalecili jakąś formę X, aby obejść swoje nieporozumienia.

  4. Nie musisz bezpośrednio pracować z FB, co wiele osób błędnie zakłada. Bardzo niesamowitą biblioteką do programowania w FrameBuffer jest DirectFBto, że ma nawet podstawowe wsparcie akceleracji. Zawsze sugeruję przynajmniej sprawdzenie tego, jeśli zaczynasz w pełni funkcjonalny projekt oparty na FB (przeglądarka internetowa, gra, GUI ...)

Specyficzne dla twojego sprzętu

  1. Użyj Vesa Generic FrameBuffer, jego moduły są nazywane vesafb. Możesz go załadować, jeśli masz dostępny, za pomocą poleceń modprobe vesafb. wiele dystrybucji wstępnie skonfigurowało go jako wyłączony, możesz się zalogować /etc/modprobe.d/. blacklist vesafbmoże być konieczne skomentowanie za pomocą pliku „ #,” blacklist-framebuffer.conflub innego pliku czarnej listy.

  2. Najlepszą opcją jest sterownik KMS specyficzny dla sprzętu. Głównym dla Intela jest Intel GMA, nie jestem pewien, jak nazywają się jego moduły. Będziesz musiał przeczytać o tym z dokumentów dystrybucyjnych. Jest to najlepiej działająca opcja FB, osobiście zawsze najpierw wybieram KMS, jeśli to możliwe.

  3. Używaj starszych sterowników FB specyficznych dla sprzętu, niezalecane, ponieważ czasami są wadliwe. Unikałbym tej opcji, chyba że jest to konieczne w ostateczności.

Uważam, że obejmuje to wszystkie twoje pytania i powinien dostarczyć informacji, aby /dev/fb0udostępnić to urządzenie. Wszystko bardziej szczegółowe wymagałoby szczegółów dystrybucji, a jeśli masz trochę doświadczenia, RTFM powinien być wszystkim, czego potrzebujesz. (po przeczytaniu tego).

Mam nadzieję, że pomogłem. Masz szczęście, że pytasz o jeden z moich tematów! Jest to zaniedbany temat w UNIX-SE, ponieważ nie wszyscy (świadomie) korzystają z Linux FrameBuffer.

UWAGA: UvesaFB czy VesaFB?

Być może przeczytałeś, że inni używają uvesafbgo vesafb, ponieważ miał lepszą wydajność. Zasadniczo było to prawdą, ale nie w nowoczesnej dystrybucji z nowoczesnym sprzętem. Jeśli Twój sprzęt graficzny obsługuje tryb chroniony VESA (VESA> = 2.0) i masz nieco nowsze jądro, vesafbto teraz jest lepszym wyborem.


1
Wielkie dzięki za odpowiedź !!! To znacznie więcej, niż się spodziewałem pod względem głębi i jakości !! Naprawdę doceniam, kiedy mogę znaleźć posty / odpowiedzi takie jak twoje, ponieważ nie tylko dają one rozwiązania konkretnego problemu, ale co ważniejsze, dostarczają ogólnych informacji na temat wewnętrznej pracy, które mogą być pomocne dla innych w takich samych lub powiązanych sytuacjach !!
Federico,

1
Jeśli chodzi o mój problem, przyjrzę mu się na podstawie twoich uwag i przekażę go tutaj, gdy tylko uzyskam satysfakcjonujące wyniki ...
Federico

3
Więc próbowałem modprobe vesa(pamiętam, że próbowałem przed zadaniem pytania tutaj), który się nie udaje, ponieważ moduł nie istnieje w moim systemie ( FATAL: Module vesafb not found.) -> będę musiał zrozumieć, czy jest to związane z moim sprzętem lub dystrybucją Linuksa (Debian Squeeze ). Dobra wiadomość jest taka, że modprobe uvesafbdziała i tworzy /dev/fb0urządzenie. Jednak teraz, gdy przeczytałem twoją odpowiedź, postaram się odpowiednio ustawić rzeczy i znaleźć sterownik KMS ...
Federico

1
Głosowałem za waszymi komentarzami, cieszę się, że mogłem pomóc! Aby odpowiedzieć na twój ostatni komentarz, nie masz racji co do rozwiązania 2. Możesz ABSOLUTNIE uzyskać KMS bez X, ale tak jak powiedziałem, prawdziwe odpowiedzi dosłownie topią się w śmieciach. Nazywa się nazwa odpowiedniego modułu sprzętowego. Przekonałem się, inteldrmfbże przeprowadziłem kilka szybkich badań. Zawsze mam ATI, więc wsparcie związane z procesorami graficznymi Intela nie jest moją najmocniejszą stroną. Państwo może trzeba zainstalować pakiet dla niego, ale ja zobaczę, czy mogę się dowiedzieć.
JM Becker,

1
O, poczekaj, popełniłem błąd ... Właśnie sprawdziłem netbooka Intel, a moduł jest i915, ale ładuje bufor bufora zwany inteldrmfb. Może być konieczne zainstalowanie pakietu libdrm-intel1lub sprawdzenie, czy jest zainstalowany.
JM Becker,

10

W końcu znalazłem rozwiązanie mojego problemu !!

Przede wszystkim bardzo dziękuję wszystkim, którzy wnieśli swój wkład, w szczególności TechZillę, oraz szczegółowe wyjaśnienia, które przedstawił, bez których, jak sądzę, dawno by się poddał!

Zasadniczo wszystko, co należy zrobić, to włączyć tryb ustawiania ( modeset=1) podczas i915ładowania modułu jądra. Można to zrobić zwykłymi sposobami:

  • poprzez parametr jądra GRUB,
  • za pomocą pliku konfiguracyjnego w /etc/modprobe.d
  • lub w wierszu poleceń:

    # rmmod i915
    # modprobe i915 modeset=1
    

W rzeczywistości nie musisz nic robić, jeśli instalujesz pakiet xserver-xorg-video-intel, który tworzy /etc/modprobe.d/i915-kms.confzawierający options i915 modeset=1. Jeśli jednak ktoś nie chce instalować X (jak w moim przypadku), KMS nie jest automatycznie włączany, co wyjaśnia, dlaczego urządzenie FrameBuffer nie zostało utworzone ...


2
Nadal powinieneś zaakceptować moją odpowiedź, ponieważ „jak włączyć KMS za pomocą ściśnięcia” nie było twoim pierwszym pytaniem. Wierzę, że odpowiedziałem na twoje pierwsze i wskazałem ci twoją zamierzoną ścieżkę. Z drugiej strony dostajesz tylko punkty za udzielenie odpowiedzi „innym” osobom. Mimo że dobrze jest przyznać się, jeśli nikt się nie zbliży, w tym przypadku nie ma to sensu. Grzywna za utrzymywanie odpowiedzi na post lub integracja informacji, o których mowa. Tak czy inaczej byłoby dobrze. naprawdę się cieszę, że pomogłem! Bardzo się cieszę, że uruchomiłeś rozwiązanie KMS, ponieważ powinno być szybsze niż zwykła VESA.
JM Becker,

1
Właśnie zmieniłem zaakceptowaną odpowiedź na twoją! Będąc tutaj czymś nowym, nie wiedziałem dokładnie, co zrobić: umieść rozwiązanie w samym pytaniu, w komentarzu do zaakceptowanej odpowiedzi lub opublikuj jako nową odpowiedź. Doszedłem do wniosku, że tworząc nową zaakceptowaną odpowiedź, ludzie przeczytają najpierw pytanie, a następnie twoją odpowiedź, która jest na górze, ponieważ ma więcej głosów pozytywnych, a następnie moja odpowiedź ...
Federico

Chociaż druga odpowiedź jest dokładna, powinna to być odpowiedź zaakceptowana. Niezależnie od tego, jak wymownie autor błaga.
Moog

-2

Możesz wypróbować wirtualny framebuffer, taki jak Xvfb (X virtual framebuffer).

Opis pakietu xvfb w squeeze


1. jest to „wirtualny” FrameBuffer, a nie rzeczywisty bezpośredni sprzętowy FrameBuffer. 2. Jest to serwer X, a konkretnie pytanie nie wymagało X.
JM Becker

-2

Tak długo, jak jest to standardowa instalacja Debiana, która nie ma nic wyszukanego i standardowego jądra, powinieneś mieć możliwość wypożyczenia konsoli VGA, która korzysta z urządzenia bufora ramki z parametrem jądra, takim jak „vga = 792” (czyli 24 bity 1024 × 768 ). Jasne, że jądro zgłasza to jako przestarzałe, ale działa.

Zobacz http://www.kernel.org/doc/Documentation/kernel-parameters.txt dla parametrów jądra. Co ciekawe, paremeter „vga =” nie wyświetla się jako przestarzały.

Pamiętaj o ponownym uruchomieniu update-grub (2) i polubień po zmianie.

Spójrz także na http://packages.debian.org/squeeze/svgalib-bin , nie jest idealny, ale pozwala ci robić fantazyjne grafiki na konsoli.


3
Nie, w WIELU okolicznościach nie działa. Oto odpowiedź, o której zawsze mówię. Jeśli używasz GRUB2, działa to tylko podczas uruchamiania z wcześniejszych opóźnień 16. Jest to również przestarzałe, co przynajmniej uznajesz pragmatycznie, co oznacza, że ​​NIE NALEŻY Z nim robić nowych ustawień. Stare vga=śmieci nie uruchomią się, jeśli masz wyłączone moduły sprzętowe /etc/modprobe.d/i wiele dystrybucji jest wstępnie skonfigurowanych jako takie.
JM Becker,

Kolejny problem, svgalib-bin to biblioteka, a nie urządzenie „/ dev / fb0”. Wszystko, co chce svgalib, musi zostać opracowane za pomocą svgalib. Można go użyć do zastąpienia FB, ale nie „dosłownie” zastępuje FB. Naprawdę popełniłem błąd w ostatnim komentarzu, kiedy powiedziałem „nie można uruchomić”, miałem na myśli „nie załadować FB, prawdopodobnie nastąpi powrót do standardowego vga”
JM Becker

3
To naprawdę nie jest twoja wina, nasza społeczność pozostawia strasznie nieaktualną dokumentację. Wszyscy mają w Internecie stare odpowiedzi, co utrudnia współczesne zrozumienie bestii. Wiele osób po prostu się poddaje, ponieważ prawdziwa odpowiedź jest nowa i zakopana w latach niedorzecznych przestarzałych rozwiązań.
JM Becker,

1
Parametr „vga =” działa, gdy używasz ściśnięcia. Po prostu zasugerowałem to, ponieważ jest to łatwa i szybka naprawa, zamiast badać, co zostało zastąpione. kernel.org/doc/Documentation/kernel-parameters.txt nie pokazuje „vga =” jako przestarzałe. Jedyny powód, jaki znam, to szybki, ledwo czytelny komunikat startowy jądra ... powstaje zamieszanie ... więc zgodnie z tekstem na kernel.org "vga =" NIE jest przestarzałe. W co mamy wierzyć?
aseq

1
Nawiasem mówiąc, moją propozycją użycia svgalib jest to, że użytkownik nie chce używać X. Rozumiem winowajców svgalib, ale istnieje kilka innych opcji.
aseq
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.