Was ist / dev / vchiq in Raspberry Pi?

10

Ich benutze Raspberry Pi 3 und Raspbian Jessie und bin auf / dev / vchiq gestoßen, als ich versucht habe, ein Programm (Omxplayer) mit Perg-CGI aufzurufen, das Musik auf meinem RiPi abspielen würde. Und ich kann es nicht zum Laufen bringen.

Als ich es mit meinem Browser (z. B. localhost / muzikica / pusti.pl) [apache2] öffnete, hieß es " vchiq-Instanz konnte nicht geöffnet werden ". Also habe ich die Berechtigungen der / dev / vchiq- Datei in xx7 geändert und es hat funktioniert, bis ich mein RiPi nicht neu gestartet habe. Also habe ich es herausgefunden und www-data (Benutzer, der mein Programm ausführt, das mein pusti.pl-Skript aufrufen würde) zur Videogruppe hinzugefügt , da / dev / vchiq Teil der Videogruppe ist. Und es hat funktioniert!

Was zum Teufel ist / dev / vchiq xD und warum benötigt www-data mindestens Lese- und Schreibberechtigungen, um Sound auf meinem Raspberry Pi abzuspielen?

Danke im Voraus.

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

Antworten:

12

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.

BJ Black
quelle
1
"Warum wird die Audiosteuerung auch über den VideoCore ausgeführt (andernfalls würde VCHIQ nicht zur Steuerung benötigt)?" -> Beachten Sie, dass Sie keinen Zugriff benötigen sollten /dev/vhciq, um Audio generell auszuführen. In diesem Fall liegt dies daran, dass das OP omxplayerdies verwendet, was wahrscheinlich nicht ideal ist.
Goldlöckchen
Hmm. Ich gehe davon aus, dass es einen ALSA-Treiber gibt, der die entsprechenden Benutzerlandschnittstellen erstellt. Ich weiß nichts über Omxplayer außer einer 5-Sekunden-Google-Suche und frage mich, ob es mit diesem zusätzlichen Zugriff auf Audio (wie der Verwendung eines Hardware-Codecs) etwas Interessantes macht oder einfach nur dumm ein Gerät öffnet, das es nicht benötigt. Faszinierend, und ich würde mir auch vorstellen, dass der ALSA-Treiber VHCIQ unter der Decke verwendet (direkt im Kernelspace, natch). Ordentliches Zeug!
BJ Black
1
Ich habe keine Ahnung, ob dies tatsächlich passiert, aber Spekulationen ... Die GPU verfügt über eine Hardware-MPEG-Decodierung, die möglicherweise MP3-Audio enthält (in beiden Fällen kann keine Referenz gefunden werden), und ein Hardware-Decoder würde wahrscheinlich etwas weniger verbrauchen Saft als Software dekodieren. Für die Sicherheitskosten absolut nicht wert, aber möglicherweise interessant.
BJ Black
1
Huh. Ordentlich. Einfach mal durch pqru.qr.ai und es sieht aus wie der ALSA - Treiber in der Tat VHCIQ unter der Decke (keine Notwendigkeit zu reden / dev / vhciq , weil es die Kernel - API direkt aufrufen, aber immer noch ...) verwenden wird.
BJ Black
2
Sicher. Grundsätzlich geschieht hier, dass der Broadcom-Chip in zwei Hauptteile unterteilt ist - die CPU (mit der Linux spricht und Allzweck-Software ausführt) und die GPU (die eine unabhängige Firmware ausführt und Videos verarbeitet usw.). VCHIQ ist die Schnittstelle, über die die CPU mit der GPU kommuniziert. Dies ist eine Vereinfachung, aber wahrscheinlich vorerst gut genug.
BJ Black
0

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:

root: x: 0:
Daemon: x: 1:
bin: x: 2:
sys: x: 3:
adm: x: 4: pi, carlos 
tty: x: 5: pi, carlos
Datenträger: x: 6:
lp: x: 7:
mail: x: 8:
Nachrichten: x: 9:
uucp: x: 10:
Mann: x: 12:
Proxy: x: 13:
kmem: x: 15:
Einwahl: x: 20: pi, carlos
Fax: x: 21:
Stimme: x: 22:
cdrom: x: 24: pi, carlos
Diskette: x: 25:
Band: x: 26:
sudo: x: 27: pi, carlos 
audio: x: 29: pi, carlos , drücken
dip: x: 30:
www-data: x: 33:
Backup: x: 34:
Operator: x: 37:
Liste: x: 38:
irc: x: 39:
src: x: 40:
Mücken: x: 41:
Schatten: x: 42:
utmp: x: 43:
Video: x: 44: pi, Carlos
sasl: x: 45:
plugdev: x: 46: pi, carlos
Mitarbeiter: x: 50:
Spiele: x: 60: pi, Carlos 
Benutzer: x: 100: pi, Carlos
Nogruppe: x: 65534:
Eingabe: x: 101: pi, carlos
systemd-journal: x: 102:
systemd-timesync: x: 103:
systemd-network: x: 104:
Systemd-Auflösung: x: 105:
systemd-bus-proxy: x: 106:
crontab: x: 107:
netdev: x: 108: pi, carlos
pi: x: 1000:
Nachrichtenbus: 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:
Drücken Sie: x: 117:
Impulszugriff: x: 118:
 

Marcos Cruz
quelle