Raspberry Pi'de / dev / vchiq nedir?


10

Raspberry Pi 3 ve raspbian jessie kullanıyorum ve benim RiPi bazı müzik çalacak perg-cgi ile programı (omxplayer) çağırmaya çalışarak / dev / vchiq rastladı. Ve işe yaramadı.

Tarayıcımla açtığımda (örn. Localhost / muzikica / pusti.pl) [apache2] “ vchiq örneğini açamadı ” dedi. Bu yüzden / dev / vchiq dosyasının izinlerini xx7 olarak değiştirdim ve RiPi'mi yeniden başlatmayana kadar çalıştı. Böylece anladım ve / dev / vchiq video grubunun bir parçası olduğu için video grubuna www-data (programımı yürüten kullanıcı benim pusti.pl betiğimin arayacağı) ekledi . Ve işe yaradı!

Şimdi, / dev / vchiq xD nedir ve www-data neden Raspberry Pi cihazımda ses çalmak için en azından okuma ve yazma izinlerine ihtiyaç duyuyor?

Şimdiden teşekkürler.

Yanıtlar:


12

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.


1
"Öyleyse neden ses kontrolü VideoCore üzerinden de çalışıyor (aksi takdirde kontrol etmek için VCHIQ'ya ihtiyaç duyulmaz)?" -> /dev/vhciqGenel olarak sesi çalıştırmak için erişmeniz gerekmediğini unutmayın - bu durumda OP omxplayerbunu yapmak için kullanıyor olabilir, ki bu muhtemelen ideal değildir.
goldilocks

Hmm. Uygun kullanıcı arazi arayüzlerini oluşturan bir ALSA sürücüsü olmasını bekliyorum. Omxplayer hakkında 5 saniyelik bir Google araması dışında hiçbir şey bilmiyorum ve bu ekstra ses erişimi (donanım codec'i kullanmak gibi) ile ilginç bir şey yapıp yapmadığını veya sadece ihtiyaç duymadığı bir cihazı aptalca açıp açmadığını merak ediyorum. Büyüleyici ve ALSA sürücüsünün örtü altında VHCIQ kullandığını (doğrudan çekirdek alanı, natch) hayal ediyorum. Düzgün şeyler!
BJ Black

1
Aslında bu olup olmadığı hakkında hiçbir fikrim yok, ancak spekülasyon ... GPU'nun donanım MPEG kod çözme özelliği vardır ve MP3 ses içerebilir (her iki şekilde de bir ref bulamaz) ve bir donanım kod çözücü muhtemelen biraz daha az tüketir kod çözme daha suyu. Tamamen güvenlik maliyeti için buna değer değil, ama muhtemelen ilginç.
BJ Black

1
Huh. Temiz. Sadece pqru.qr.ai bakarak ve ALSA sürücüsü gerçekten kapakların altında VHCIQ kullanıyor gibi görünüyor (/ dev / vhciq ile konuşmaya gerek yok çünkü doğrudan çekirdek API'sini çağırabilir, ama yine de ...).
BJ Black

2
Elbette. Temelde burada olan şey, Broadcom çipinin iki ana parçaya kesilmesidir - CPU (Linux'un genel amaçlı yazılımla konuştuğu ve çalıştığı şeydir) ve GPU (bağımsız bir ürün yazılımı çalıştıran ve video işleyen vb.). VCHIQ, CPU'nun GPU ile konuşmak için kullandığı arabirimdir. Bu bir sadeleştirme, ancak şimdilik yeterince iyi.
BJ Black

0

Benim durumumda, varsayılan kullanıcının yanı sıra yeni bir kullanıcı oluşturduğumda da aynı problemi yaşadım ve sadece ses değil, aynı zamanda wifi yapılandırması, seri bağlantı noktasına erişim vb. İle ilgili sorunlar yaşadım ... Sonra / etc'yi açtım. / grup dosyası. Kullanıcımı 'pi' kullanıcısının eklendiği tüm gruplara ekledim ve her şey mükemmel çalıştı. Aşağıdaki gibi:

kök: x: 0:
arka plan: x: 1:
depo gözü: x: 2:
sys: x: 3:
adm: x: 4: pi, carlos 
tty: x: 5: pi, carlos
disk: x: 6:
lp: x: 7:
posta: x: 8:
haberler: x: 9:
uucp: x: 10:
erkek: x: 12:
vekil: x: 13:
kmem: x: 15:
konuşma: x: 20: pi, carlos
faks: x: 21:
ses: x: 22:
cdrom: x: 24: pi, carlos
disket: x: 25:
bant: x: 26:
sudo: x: 27: pi, carlos 
ses: x: 29: pi, carlos , basın
daldırma: x: 30:
www-veri: x: 33:
yedekleme: x: 34:
operatör: x: 37:
liste: x: 38:
irc: x: 39:
src: x: 40:
akreplerin: x: 41:
gölge: x: 42:
utmp: x: 43:
video: x: 44: pi, carlos
sasl: x: 45:
plugdev: x: 46: pi, carlos
personel: x: 50:
oyunlar: x: 60: pi, carlos 
kullanıcıları: x: 100: pi, carlos
nogroup: x: 65534:
giriş: x: 101: pi, carlos
systemd günlüğü: x: 102:
systemd-timesync: x: 103:
systemd-ağı: x: 104:
systemd çözümlemesi: x: 105:
systemd-bus-proxy: x: 106:
crontab: x: 107:
netdev: x: 108: pi, carlos
pi: x: 1000:
mesaj otobüsü: 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:
basın: x: 117:
darbe erişimi: x: 118:
 

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.