Bagaimana saya bisa menambahkan perangkat framebuffer tambahan di Linux?

15

Saya menjalankan Ubuntu 12,04 LTS sebagai server NAS rumah, tanpa X. Baru-baru ini saya mengaturnya untuk berfungsi sebagai perangkat media pemutar video. Mungkin lebih mudah pada saat ini untuk menginstal X, tetapi saya memutuskan untuk mencoba mplayer dengan pemutaran framebuffer. Itu berhasil, dan semuanya baik-baik saja dan bagus.

Namun, untuk rasa ingin tahu dan mungkin untuk konsekuensi praktis juga, saya tidak bisa berhenti berpikir tentang framebuffer. Tampaknya hanya ada satu perangkat framebuffer /dev/fb0,. (Btw. Saya menggunakan driver vesafs) Jika saya menjalankan beberapa program yang menggunakan framebuffer, kekacauan terjadi kemudian. Sebagai contoh, menjalankan mplayer dari fbterm hanya membuat crash. Anehnya, penampil gambar fbi mengelola untuk melihat gambar entah bagaimana. Jelas program tidak dapat membagikan perangkat, tidak ada sistem windowing sama sekali.

Jadi, apakah jumlah perangkat (vesa) fb terbatas pada perangkat tampilan perangkat keras? Atau mungkinkah ada lebih banyak pada prinsipnya, seperti ada banyak ttys? Apakah menambahkan beberapa bantuan lagi menjalankan perangkat lunak secara bersamaan yang menggunakannya? Bagaimana saya bisa menambahkan lebih banyak?

Juga logika bagaimana framebuffer terhubung ke ttys tidak cukup jelas bagi saya ... misalnya, mplayer menunjukkan bingkai video itu pada setiap tty, tetapi fbi tidak. Selanjutnya, konsol default Ubuntu (fbcon?) Menunjukkan di balik hamparan video, yang menurut saya aneh. Tentang apa semua ini?

GolDDranks
sumber

Jawaban:

18

Karena belum ada yang menjawab, dan setelah googling dan pengujian yang melelahkan selama berjam-jam, saya memahami topik ini, saya akan menjawabnya ...

Karena antarmuka perangkat framebuffer sangat umum, mungkin ada lebih banyak perangkat fb pada prinsipnya. Namun, sebagai driver VESA yang saya gunakan menyediakan koneksi langsung antara perangkat keras tertentu dan file perangkat framebuffer, tidak masuk akal untuk memiliki lebih banyak daripada yang dimiliki perangkat nyata.

Ada driver untuk perangkat framebuffer virtual, vfb. (Catatan: berbeda dari xvfb yang merupakan framebuffer virtual untuk X) Saya belum mengujinya sendiri, tetapi orang dapat memiliki perangkat fb sebanyak yang diinginkan menggunakan perangkat virtual. Saya juga berpikir bahwa pada prinsipnya tidak ada yang mencegah pemipaan perangkat virtual ke perangkat framebuffer perangkat keras, yang memungkinkan untuk membangun multiplexer framebuffer

Tentang hubungan antara framebuffer dan tty: tidak ada. Framebuffer hanya ditarik ke layar, mengabaikan apa pun.

Yang membuat saya awalnya bingung adalah perilaku penampil gambar fbi. Ternyata secara cerdik memeriksa apakah tty itu berjalan terbuka atau tidak, dan menarik ke framebuffer atau tidak sesuai dengan itu. (Itu sebabnya ia menolak untuk menjalankan SSH, tidak seperti mplayer - ia tidak menerima terminal semu.) Tetapi fungsi seperti multiplexer tidak ada hubungannya dengan framebuffer itu sendiri.

Jika ada beberapa proses menulis ke framebuffer, mereka tidak memblokir satu sama lain . Ternyata masalah saya sebelumnya (crash dan semacamnya) menggunakan beberapa program fb secara bersamaan bahkan tidak tentang framebuffer sama sekali. Ambil terminal fbterm dan jalankan mplayer darinya: tidak masalah. Terminal fbterm dan fbcon dan penampil gambar fbi menarik ke buffer hanya ketika ada sesuatu yang diperbarui, sehingga mplayer mendominasi layar hampir 100% dari waktu. Tetapi jika Anda mencoba menjalankan dua mplayer, Anda akan mendapatkan pandangan bahwa layar berkedip menunjukkan bingkai yang satu dan yang lainnya, ketika mereka mencoba menggambar ke buffer yang memiliki kondisi balapan.

Beberapa tautan bermanfaat:

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

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

GolDDranks
sumber
Jika Anda memiliki layar LCD ke-2 sebagai layar sekunder (pikirkan 320x240 piksel, 3 inci) menggunakan fb1 masuk akal untuk itu. Saya punya sedikit Adafruit adafruit.com/product/1601 yang menggunakan (hanya) fb1. Perangkat lunak mereka adalah open source, tetapi gambar OS mereka mencoba menjalankan Linux dengan GUI di 320x240 dan gagal total. Sebagai perangkat ke-2 mungkin OK, saya belum menggunakannya dalam beberapa tahun. Lihat manusia mknod.
Alan Corey