Apa / dev / vchiq di Raspberry Pi?

10

Saya menggunakan Raspberry Pi 3 dan jessie raspbian dan saya menemukan / dev / vchiq dengan mencoba memanggil program (omxplayer) dengan perg-cgi yang akan memainkan beberapa musik di RiPi saya. Dan saya tidak bisa membuatnya bekerja.

Ketika saya membukanya dengan browser saya (mis. Localhost / muzikica / pusti.pl) [apache2] dikatakan " gagal membuka instance vchiq ". Jadi saya mengubah izin file / dev / vchiq ke xx7 dan itu bekerja sampai saya tidak me-restart RiPi saya. Jadi saya menemukannya dan menambahkan www-data (pengguna yang menjalankan program saya yang akan dipanggil oleh skrip pusti.pl saya) ke grup video, karena / dev / vchiq adalah bagian dari grup video. Dan itu berhasil!

Sekarang, apa itu / dev / vchiq xD dan mengapa www-data membutuhkan setidaknya membaca dan menulis izin untuk memutar suara di Raspberry Pi saya?

Terima kasih sebelumnya.

Бојан Драшко
sumber

Jawaban:

12

Saya kagum bahwa Google yang maha kuasa tidak memiliki jawaban yang siap untuk pertanyaan "apa itu VCHIQ?" Saya seorang geek kernel lama dan bukan karyawan Broadcom, saya juga bukan ahli BCM283 *, tapi inilah yang saya temukan untuk (mungkin) keturunan:

Dari cabang kernel Raspberry Pi :

Antarmuka komunikasi Kernel ke VideoCore untuk rangkaian produk BCM2708.

Yang perlu diperhatikan di sini adalah bahwa VideoCore adalah (kejutan kejutan) pengendali video untuk SoC yang dijalankan oleh Pi, dan akan terlihat bahwa ini adalah cara praktis untuk menjalankan IOCTL langsung yang lebih banyak atau lebih sedikit ke berbagai subsistem yang terhubung ke GPU . Bahwa ini termasuk video bukan kejutan besar, tapi saya rasa masuk akal bahwa antarmuka kamera memiliki silikon dalam VideoCore mengingat semua hal yang perlu dilakukan oleh video codec.

Jadi mengapa kontrol audio dijalankan melalui VideoCore juga (kalau tidak, tidak perlu VCHIQ untuk mengendalikannya)? Saya menduga bahwa, mengingat fakta bahwa VC memiliki dukungan perangkat keras untuk H.264 dan codec lainnya (dan karena Anda dapat merutekan audio melalui HDMI), itu adalah tempat yang paling mudah untuk meletakkan silikon. Nah, itu dan fakta bahwa chip BCM memiliki dua MMU (satu untuk VC + ARM, satu lagi untuk penggunaan OS normal - lihat diagram pada hal 5 ), yang memungkinkan zero-copy DMA mungkin (tidak perlu menyalin hal-hal ke audio silikon - katakan saja bahwa sepotong memori miliknya dan bukan CPU. Entah apakah mereka benar-benar melakukan ini di bawah selimut, tetapi mengapa tidak Anda lakukan?).

Perhatikan bahwa IOCTL pada VCHIQ tidak benar-benar mentransfer data per se - mereka mengatur DMA dan operasi lain antara potongan memori dan mengirim perintah ke berbagai bit. Ini bisa sangat berbahaya, karena Anda berpotensi mengacaukan struktur data kernel internal dari userspace, crash GPU, sling sekitar data yang rusak, dll. Jadi jangan atur / dev / vhciq ke mode 777 !!!

Bagaimanapun, jawaban singkat untuk "apa itu VCHIQ?" Ini dia:

VCHIQ adalah antarmuka perintah antara kernel Linux yang menjalankan dan periferal (antara lain) di silikon VideoCore. / dev / vhciq menyediakan akses ruang pengguna generik ke perintah-perintah tersebut untuk digunakan oleh (minimal) kamera dan subsistem audio juga. Ini adalah antarmuka yang cukup berbahaya untuk diekspos ke program acak, karenanya izin agak membatasi secara default.

Ada orang-orang yang fokus pada perangkat BCM di komunitas RPi; Saya bukan salah satu dari mereka (saya mungkin sangat dalam setelah beberapa jam penelitian :-)). Yang mengatakan, saya pikir ini adalah ikhtisar tingkat tinggi yang layak dan akan menyambut penambahan / koreksi.

Sejauh mengapa data-www memerlukan izin, itu karena program CGI Anda menghasilkan proses anak sebagai pengguna itu. Saya tidak tahu pemain tertentu itu dengan baik, tetapi praktik yang lebih baik biasanya adalah menjalankan beberapa daemon khusus untuk mengontrol program yang terhubung ke suara dan mengendalikannya dari CGI menggunakan soket UNIX atau antarmuka yang serupa daripada langsung melahirkan anak.

Memang, vendor keamanan bangkrut beberapa waktu lalu karena mengizinkan akses root server web mereka ke mesin mereka. Mereka mungkin melakukan ini untuk memudahkan manajemen proses daripada menulis jenis lapisan tengah ini, tetapi ini adalah keamanan tidak-tidak. Memberi apache pada dasarnya akses tanpa batas ke GPU DMA adalah ide yang sama buruknya (meskipun saya akui lebih sulit untuk mengeksploitasi).

Semoga ini menjawab pertanyaan Anda.

BJ Black
sumber
1
"Jadi mengapa kontrol audio dijalankan melalui VideoCore juga (kalau tidak, tidak perlu VCHIQ untuk mengendalikannya)?" -> Perhatikan bahwa Anda seharusnya tidak memerlukan akses untuk /dev/vhciqmenjalankan audio secara umum - dalam hal ini karena OP menggunakan omxplayeruntuk melakukannya, yang mungkin tidak ideal.
goldilocks
Hmm. Saya berharap ada driver ALSA yang menciptakan antarmuka pengguna lahan yang sesuai. Saya tidak tahu apa-apa tentang omxplayer selain pencarian Google 5 detik dan bertanya-tanya apakah itu melakukan sesuatu yang menarik dengan akses ekstra pada audio (seperti menggunakan codec perangkat keras) atau hanya dengan bodohnya membuka perangkat yang tidak perlu. Menarik, dan saya juga membayangkan bahwa driver ALSA menggunakan VHCIQ di bawah selimut (langsung dalam ruang kernel, natch). Barang rapi!
BJ Black
1
Saya tidak tahu apakah ini yang sebenarnya terjadi, tetapi spekulasi ... GPU memiliki decode MPEG perangkat keras dan itu mungkin termasuk audio MP3 (tidak dapat menemukan referensi baik), dan decoder perangkat keras kemungkinan akan mengkonsumsi sedikit lebih sedikit jus daripada decode perangkat lunak. Sama sekali tidak sepadan dengan biaya keamanan, tetapi mungkin menarik.
BJ Black
1
Hah. Rapi. Hanya melihat melalui pqru.qr.ai dan sepertinya driver ALSA memang menggunakan VHCIQ di bawah selimut (tidak perlu berbicara dengan / dev / vhciq karena dapat memanggil API API secara langsung, tetapi masih ...).
BJ Black
2
Tentu. Pada dasarnya apa yang terjadi di sini adalah bahwa chip Broadcom dipotong menjadi dua bagian utama - CPU (yang berbicara dengan Linux dan menjalankan perangkat lunak untuk keperluan umum) dan GPU (yang menjalankan firmware independen dan menangani video, dll.). VCHIQ adalah antarmuka yang digunakan CPU untuk berbicara dengan GPU. Ini adalah penyederhanaan, tetapi kemungkinan cukup bagus untuk saat ini.
BJ Black
0

Dalam kasus saya, saya memiliki masalah yang sama ketika saya membuat pengguna baru selain pengguna default, dan saya punya masalah tidak hanya dengan suara tetapi juga konfigurasi wifi, akses ke port serial dll ... Kemudian saya membuka / etc / file grup. Dan saya menambahkan pengguna saya ke semua grup tempat pengguna 'pi' dimasukkan, dan semuanya bekerja dengan sempurna. Sebagai berikut:

root: x: 0:
daemon: x: 1:
bin: x: 2:
sys: x: 3:
adm: x: 4: pi, carlos 
tty: x: 5: pi, carlos
disk: x: 6:
lp: x: 7:
surat: x: 8:
berita: x: 9:
uucp: x: 10:
pria: x: 12:
proksi: x: 13:
kmem: x: 15:
nomor telepon: x: 20: pi, carlos
faks: x: 21:
suara: x: 22:
cdrom: x: 24: pi, carlos
floppy: x: 25:
tape: x: 26:
sudo: x: 27: pi, carlos 
audio: x: 29: pi, carlos , tekan
celupkan: x: 30:
www-data: x: 33:
cadangan: x: 34:
operator: x: 37:
daftar: x: 38:
irc: x: 39:
src: x: 40:
agas: x: 41:
bayangan: x: 42:
utmp: x: 43:
video: x: 44: pi, carlos
sasl: x: 45:
plugdev: x: 46: pi, carlos
staf: x: 50:
permainan: x: 60: pi, 
pengguna carlos : x: 100: pi, carlos
nogroup: x: 65534:
input: x: 101: pi, carlos
systemd-jurnal: x: 102:
systemd-timesync: x: 103:
systemd-network: x: 104:
systemd-resolving: x: 105:
systemd-bus-proxy: x: 106:
crontab: x: 107:
netdev: x: 108: pi, carlos
pi: x: 1000:
messagebus: x: 109:
ssh: x: 110:
bluetooth: x: 111:
avahi: x: 112:
spi: x: 999: pi, carlos 
i2c: x: 998: pi, carlos 
gpio: x: 997: pi, Carlos
lightdm: x: 113:
epmd: x: 114:
ssl-cert: x: 115:
Carlos: x: 1001:
rtkit: x: 116:
tekan: x: 117:
akses pulsa: x: 118:
 

Marcos Cruz
sumber