Ich bin erstaunt, dass der allmächtige Google keine Antwort auf die Frage "Was ist VCHIQ?" Ich bin ein langjähriger Kernel-Geek und kein Broadcom-Mitarbeiter, noch bin ich BCM283 * -Experte, aber hier ist, was ich für (vielleicht) die Nachwelt gefunden habe:
Aus dem Raspberry Pi-Kernel-Zweig :
Kernel-zu-VideoCore-Kommunikationsschnittstelle für die BCM2708-Produktfamilie.
Bemerkenswert ist hier, dass der VideoCore (überraschend überraschend) der Videocontroller für den SoC ist, den der Pi ausführt, und es scheint, dass dies eine praktische Möglichkeit ist, mehr oder weniger direkte IOCTLs auf verschiedenen Subsystemen auszuführen, die an die GPU angeschlossen sind . Dass dies auch Video beinhaltet, ist keine große Überraschung, aber ich denke, es ist sinnvoll, dass die Kameraschnittstelle ihr Silizium in VideoCore hat, wenn man alle Codec- Dinge berücksichtigt , die Video tun muss.
Warum wird die Audiosteuerung auch über den VideoCore ausgeführt (andernfalls würde VCHIQ nicht zur Steuerung benötigt)? Ich vermute, dass VC angesichts der Tatsache, dass VC Hardware-Unterstützung für H.264 und andere Codecs bietet (und weil Sie Audio über HDMI routen können), einfach der einfachste Ort war, um das Silizium zu platzieren. Nun, das und die Tatsache, dass der BCM-Chip zwei MMUs hat (eine für den VC + ARM, eine andere für die normale Verwendung des Betriebssystems - siehe Abbildung auf Seite 5 ), wodurch DMA ohne Kopie möglich ist (es ist nicht erforderlich, Dinge auf den zu kopieren Audio-Silizium - sagen Sie einfach, dass ein Teil des Speichers dazu gehört und nicht zur CPU. Noch keine Ahnung, ob sie dies tatsächlich unter der Decke tun, aber warum nicht?).
Beachten Sie, dass die IOCTLs auf VCHIQ nicht wirklich Daten per se übertragen - sie richten DMA und andere Operationen zwischen Speicherblöcken ein und senden Befehle an verschiedene Bits. Dies kann sehr gefährlich sein, da Sie möglicherweise interne Kernel-Datenstrukturen aus dem Userspace verwenden, die GPU zum Absturz bringen, beschädigte Daten umgehen usw. Setzen Sie also / dev / vhciq nicht auf Modus 777 !!!
Auf jeden Fall die kurze Antwort auf "Was ist VCHIQ?" Hier ist es:
VCHIQ ist eine Befehlsschnittstelle zwischen dem laufenden Linux-Kernel und Peripheriegeräten (unter anderem) im VideoCore-Silizium. / dev / vhciq bietet generischen User-Space-Zugriff auf diese Befehle, der (mindestens) auch von der Kamera und den Audio-Subsystemen verwendet werden kann. Es ist eine anständig gefährliche Schnittstelle, zufälligen Programmen ausgesetzt zu sein, daher die etwas restriktiven Berechtigungen standardmäßig.
Es gibt Leute, die in der BCM-Hardware in der RPi-Community auf dem neuesten Stand sind. Ich bin keiner von ihnen (nach ein paar Stunden Recherche bin ich vielleicht knöcheltief :-)). Trotzdem denke ich, dass dies eine anständige Übersicht auf hoher Ebene ist und Ergänzungen / Korrekturen begrüßen würde.
Was den Grund betrifft, warum www-Daten eine Berechtigung erfordern, liegt dies daran, dass Ihr CGI-Programm als dieser Benutzer untergeordnete Prozesse erzeugt. Ich kenne diesen bestimmten Player nicht gut, aber es wäre normalerweise besser, einen speziellen Daemon auszuführen, um das Programm, das mit dem Sound verbunden ist, zu steuern und es über CGI mithilfe eines UNIX-Sockets oder einer ähnlichen Schnittstelle zu steuern, anstatt ein Kind direkt zu erzeugen.
In der Tat wurde ein Sicherheitsanbieter vor einiger Zeit in die Knie gezwungen, weil er seinem Webserver Root-Zugriff auf seinen Computer gewährt hatte. Sie haben dies wahrscheinlich getan, um das Prozessmanagement zu vereinfachen, anstatt diese Art von mittlerer Schicht zu schreiben, aber es ist ein Sicherheits-Nein-Nein. Apache grundsätzlich uneingeschränkten Zugriff auf GPU-DMA zu gewähren, ist eine ebenso schlechte Idee (obwohl ich zugeben muss, dass sie viel schwerer auszunutzen ist).
Hoffentlich beantwortet dies Ihre Frage.
/dev/vhciq
, um Audio generell auszuführen. In diesem Fall liegt dies daran, dass das OPomxplayer
dies verwendet, was wahrscheinlich nicht ideal ist.In meinem Fall hatte ich das gleiche Problem, als ich neben dem Standardbenutzer einen neuen Benutzer erstellte, und ich hatte nicht nur Probleme mit dem Sound, sondern auch mit der Konfiguration des WLANs, dem Zugriff auf die serielle Schnittstelle usw. Dann öffnete ich die / etc. / Gruppendatei. Und ich habe meinen Benutzer zu allen Gruppen hinzugefügt, in denen der Benutzer 'pi' eingefügt wurde, und alles hat perfekt funktioniert. Wie folgt:
quelle