Yüce Google'ın "VCHIQ nedir?" Sorusuna hazır bir cevabı olmadığına şaşırdım. Ben bir Broadcom çalışanı değil, uzun zamandır bir çekirdek geek değilim, ben de BCM283 * uzmanı değilim, ama (belki) posterity için bulduğum şey:
Gönderen Ahududu Pi çekirdeği dalı :
BCM2708 ürün ailesi için Çekirdek - VideoCore iletişim arabirimi.
Burada dikkat çeken şey, VideoCore'un Pi'nin çalıştırdığı SoC için video denetleyicisi olması (sürpriz) ve bunun GPU'ya bağlı çeşitli alt sistemlere az çok doğrudan IOCTL'leri çalıştırmanın kullanışlı bir yolu olduğu anlaşılıyor. . Bu video içerir bu büyük bir sürpriz değil, ama sanırım video arabirimi video yapmak için gereken tüm codec şeyler göz önüne alındığında VideoCore içinde silikon var mantıklı .
Öyleyse neden ses kontrolü VideoCore üzerinden de çalışıyor (aksi takdirde kontrol etmek için VCHIQ'ya ihtiyaç duyulmaz)? Şüpheliyim ki, VC'nin H.264 ve diğer kodekler için donanım desteğine sahip olması (ve sesi HDMI üzerinden yönlendirebileceğiniz için), silikonu koymak için en kolay yerdi. Bu ve BCM yongasının iki MMU'ya sahip olması (biri VC + ARM için, diğeri normal işletim sistemi kullanımı için - sayfa 5'teki şemaya bakın ), bu da sıfır kopya DMA'yı mümkün kılar (işleri kopyalamaya gerek yoktur) ses silikon - sadece bir bellek yığınının CPU'ya değil, ona ait olduğunu söyleyin. Henüz kapakların altında bunu yapmazlarsa, ama neden olmasın?).
VCHIQ'daki IOCTL'lerin gerçekte veri aktarmadığını unutmayın - bellek parçaları arasında DMA ve diğer işlemleri ayarlarlar ve çeşitli bitlere komutlar gönderirler. Potansiyel olarak kullanıcı alanından dahili çekirdek veri yapıları ile vidalanabilir, GPU'yu çökertebilir, bozuk verilerin etrafına sapabilir, vb. Bu yüzden / dev / vhciq'i 777 moduna ayarlamayın!
Her durumda, "VCHIQ nedir?" İşte burada:
VCHIQ, çalışan Linux çekirdeği ile VideoCore silikonundaki çevre birimleri (diğer şeylerin yanı sıra) arasında bir komut arabirimidir. / dev / vhciq, kamera ve ses alt sistemleri tarafından (en azından) kullanılmak üzere bu komutlara genel kullanıcı alanı erişimi sağlar. Rastgele programlara maruz kalmak için oldukça tehlikeli bir arayüz, bu nedenle varsayılan olarak biraz kısıtlayıcı izinler.
RPi topluluğundaki BCM donanımında gözbebeklerine kalmış insanlar var; Ben onlardan biri değilim (belki birkaç saatlik bir araştırmadan sonra bile ayak bileğiyim :-)). Bununla birlikte, bunun iyi bir üst düzey genel bakış olduğunu ve eklemeleri / düzeltmeleri memnuniyetle karşılayacağını söyledi.
Www-data neden izin gerektirdiğine göre, bunun nedeni, CGI programınızın bu kullanıcı olarak alt süreçleri üretmesidir. Belirli bir oyuncuyu iyi bilmiyorum, ancak daha iyi bir uygulama, doğrudan bir çocuk doğurmak yerine bir UNIX soketi veya benzer bir arabirim kullanarak CGI'dan kontrol eden ve kontrol etmek için bazı özel daemon çalıştırmak olacaktır.
Gerçekten de, bir güvenlik sağlayıcısı web sunucularının makinelerine kök erişimine izin verdiği için bir süre önce yakalandı . Muhtemelen bu tür bir orta katman yazmaktan ziyade süreç yönetimini kolaylaştırmak için yaptılar, ancak bu bir güvenlik no-no. Apache'nin GPU DMA'ya temel olarak sınırsız erişim vermek aynı derecede kötü bir fikirdir (istismar etmek çok daha zor olsa da).
Umarım bu soruya cevap verir.
/dev/vhciq
Genel olarak sesi çalıştırmak için erişmeniz gerekmediğini unutmayın - bu durumda OPomxplayer
bunu yapmak için kullanıyor olabilir, ki bu muhtemelen ideal değildir.