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.
/dev/vhciq
menjalankan audio secara umum - dalam hal ini karena OP menggunakanomxplayer
untuk melakukannya, yang mungkin tidak ideal.