Raspberry Piの/ dev / vchiqとは何ですか?


10

私はRaspberry Pi 3とraspbian jessieを使用しています。RiPiで音楽を再生するプログラム(omxplayer)をperg-cgiで呼び出そうとして、/ dev / vchiqに遭遇しました。そして、私はそれを機能させることができませんでした。

ブラウザ(例:localhost / muzikica / pusti.pl)[apache2]で開いたとき、vchiqインスタンスを開けませんでした」と表示されました。そのため、/ dev / vchiqファイルのアクセス許可をxx7に変更し、RiPiを再起動しないまで機能しました。/ dev / vchiqはビデオグループの一部であるため、それを理解し、www-data(私のpusti.plスクリプトが呼び出すプログラムを実行しているユーザー)をビデオグループに追加しました。そしてそれはうまくいった!

では、/ dev / vchiq xDとは一体何なのか、そしてwww-dataがRaspberry Piでサウンドを再生するために少なくとも読み取りと書き込みのアクセス許可を必要とするのはなぜですか?

前もって感謝します。

回答:


12

全能のGoogleが「VCHIQとは何ですか?」という質問に対する答えをすぐに得られないことに驚いています。私は長年カーネルオタクであり、Broadcomの従業員でもないし、BCM283 *の専門家でもありませんが、(おそらく)後世のために私が見つけたものは次のとおりです。

ラズベリーパイカーネルブランチ

BCM2708ファミリーの製品用のカーネルからVideoCoreへの通信インターフェース。

ここで注目に値するのは、VideoCoreがPiが実行するSoCのビデオコントローラー(驚き)であり、これがGPUに接続されたさまざまなサブシステムに多かれ少なかれ直接IOCTLを実行するための便利な方法であるように見えることです。。これにビデオが含まれていることは大きな驚きではありませんが、ビデオが必要とするすべてのコーデックに関するものを考えると、カメラインターフェースがVideoCore内にシリコンを持っていることは理にかなっていると思います。

では、なぜオーディオコントロールもVideoCoreを介して実行されるのですか(そうでない場合、それを制御するためにVCHIQは必要ありません)。VCがH.264やその他のコーデックをハードウェアでサポートしているという事実(およびHDMI経由でオーディオをルーティングできるため)を考えると、シリコンを配置するのに最も簡単な場所だったと思います。それと、BCMチップには2つのMMU(1つはVC + ARM用、もう1つは通常のOS使用用です。pg5の図を参照)があるため、ゼロコピーDMAが可能になります(にコピーする必要はありません)。オーディオシリコン-メモリのチャンクはCPUではなくメモリに属していることを伝えてください。実際にこれを隠蔽している場合は、Dunnoですが、なぜでしょうか?)。

VCHIQのIOCTLは、実際にはデータ自体を転送しないことに注意してください。これらは、メモリチャンク間のDMAおよびその他の操作をセットアップし、さまざまなビットにコマンドを送信します。ユーザー空間の内部カーネルデータ構造をねじ込んだり、GPUをクラッシュさせたり、破損したデータをスリングしたりする可能性があるため、これは非常に危険です。/dev/vhciqをモード777に設定しないでください。

いずれにせよ、「VCHIQとは何ですか?」ここにあります:

VCHIQは、VideoCoreシリコンの実行中のLinuxカーネルと(とりわけ)ペリフェラル間のコマンドインターフェイスです。/ dev / vhciqは、これらのコマンドへの一般的なユーザースペースアクセスを提供し、(少なくとも)カメラとオーディオサブシステムでも使用できるようにします。ランダムなプログラムに公開するのはかなり危険なインターフェースなので、デフォルトでは多少制限の厳しいアクセス許可です。

RPiコミュニティのBCMハードウェアには目を見張る人々がいます。私はそれらの1人ではありません(私は2、3時間の研究の後、おそらく足首の深さです:-))。とは言っても、これはまともな高レベルの概要であり、追加/修正を歓迎すると思います。

www-dataが許可を必要とする理由は、CGIプログラムがそのユーザーとして子プロセスを生成しているためです。私はその特定のプレーヤーをよく知りませんが、通常、特別なデーモンを実行して、サウンドにインターフェースするプログラムを制御し、直接子を生成するのではなく、UNIXソケットまたは同様のインターフェースを使用してCGIから制御することをお勧めします。

確かに、セキュリティベンダーは、Webサーバーのルートからマシンへのアクセスを許可するためにしばらく前に逮捕されました。彼らはおそらく、このタイプの中間層を作成するのではなく、プロセス管理を容易にするためにこれを行いましたが、これはセキュリティの問題です。apacheに基本的にGPU DMAへの自由なアクセスを与えることも同様に悪い考えです(私が認めるのははるかに困難ですが)。

うまくいけば、これはあなたの質問に答えます。


1
「それでは、なぜオーディオコントロールもVideoCoreを介して実行されるのですか(そうでなければ、それを制御するためにVCHIQを必要としません)?」-> /dev/vhciq一般に、オーディオを実行するためにアクセスする必要はないことに注意してください。この場合、OPがオーディオの実行に使用omxplayerしているためです。これはおそらく理想的ではありません。
ゴルディロックス

うーん。適切なユーザーランドインターフェイスを作成するALSAドライバーがあると思います。5秒間のGoogle検索以外のomxplayerについては何も知りません。オーディオへの追加アクセス(ハードウェアコーデックの使用など)で何か面白いことをしているのか、それとも必要のないデバイスを愚かに開いているだけなのかと思います。魅力的ですし、ALSAドライバーがVHCIQを内部で(カーネルスペース内で直接)使用することも想像します。きちんとしたもの!
BJブラック

1
これが実際に何が起こっているのかはわかりませんが、推測... GPUにはハードウェアMPEGデコードがあり、これにはMP3オーディオが含まれている可能性があり(どちらの方法でも参照を見つけることができません)、ハードウェアデコーダーは少し消費する可能性がありますソフトウェアデコードよりもジュース。セキュリティコストとしてはまったく価値はありませんが、興味深いかもしれません。
BJ Black

1
ええと。きちんと。pqru.qr.aiを見るだけで、ALSAドライバーは実際に内部でVHCIQを使用しているように見えます(カーネルAPIを直接呼び出すことができるため、/ dev / vhciqと通信する必要はありませんが、それでも...)。
BJ Black

2
承知しました。基本的にここで起こっていることは、Broadcomチップが2つの主要な部分に分割されていることです-CPU(これはLinuxが通信して汎用ソフトウェアを実行するものです)とGPU(独立したファームウェアを実行し、ビデオを処理するなど)です。VCHIQは、CPUがGPUと通信するために使用するインターフェイスです。これは単純化ですが、おそらく今のところ十分です。
BJブラック

0

私の場合、デフォルトのユーザー以外に新しいユーザーを作成したときに同じ問題があり、サウンドだけでなくwifiの設定、シリアルポートへのアクセスなどにも問題がありました...次に/などを開きました/グループファイル。そして、私はユーザー「pi」が挿入されたすべてのグループにユーザーを追加し、すべてが完全に機能しました。次のように:

ルート:x:0:
デーモン:x:1:
ビン:x:2:
sys:x:3:
adm:x:4:pi、carlos 
tty:x:5:pi、carlos
ディスク:x:6:
lp:x:7:
メール:x:8:
ニュース:x:9:
uucp:x:10:
男性:x:12:
プロキシ:x:13:
kmem:x:15:
ダイヤルアウト:x:20:pi、カルロス
ファックス:x:21:
声:x:22:
cdrom:x:24:pi、カルロス
フロッピー:x:25:
テープ:x:26:
sudo:x:27:pi、carlos 
audio:x:29:pi、carlos、press
ディップ:x:30:
www-data:x:33:
バックアップ:x:34:
演算子:x:37:
リスト:x:38:
irc:x:39:
src:x:40:
ブヨ:x:41:
影:x:42:
utmp:x:43:
ビデオ:x:44:pi、カルロス
sasl:x:45:
plugdev:x:46:pi、カルロス
スタッフ:×:50:
ゲーム:x:60:pi、カルロス 
ユーザー:x:100:pi、カルロス
nogroup:x:65534:
入力:x:101:pi、カルロス
systemd-journal:x:102:
systemd-timesync:x:103:
systemd-network:x:104:
systemd-resolve:x:105:
systemd-bus-proxy:x:106:
crontab:x:107:
netdev:x:108:pi、carlos
パイ:x:1000:
メッセージバス:x:109:
ssh:x:110:
ブルートゥース:x:111:
アバヒ:x:112:
spi:x:999:pi、カルロス 
i2c:x:998:pi、カルロス 
gpio:x:997:pi、カルロス
lightdm:x:113:
epmd:x:114:
ssl-cert:x:115:
カルロス:x:1001:
rtkit:x:116:
プレス:x:117:
パルスアクセス:x:118:
 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.