全能の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への自由なアクセスを与えることも同様に悪い考えです(私が認めるのははるかに困難ですが)。
うまくいけば、これはあなたの質問に答えます。
/dev/vhciq
一般に、オーディオを実行するためにアクセスする必要はないことに注意してください。この場合、OPがオーディオの実行に使用omxplayer
しているためです。これはおそらく理想的ではありません。