NetBSD-RPI / AudioデバイスをAttachする

| コメント(0) | トラックバック(0)

デバイスドライバとは!Hardware を駆動させるプログラムである。

というのはまぁ常識なんですが、性格には Hardware を駆動させるプログラム、すなわちHWのレジスタを直接操作するコード郡と、Kernel の UpperLayer からデータや制御コードを受け取ることが重要です。というか、UpperLayer からあれこれもらわないと、ドライバだけ存在してもなーんも意味がありません。
オーディオデバイスのドライバーは、UserLand からの音声データを Kernel に中継してもらって、受け取らないといけないわけです。

でだ、ドライバは 「わっちは、オーディオデータ受け取れるですぜ、だんな」 と宣言してオーディオドライバとして動くわけですよ。ドライバの Attach 関連の処理って、config_found() を使うんですが、こいつはまぁ関数ポインタ使いまくりなので、追いかけるのが大変。

ちうわけで、オーディオドライバーの Attach 関連で分かってることをつれずれと。


まず、ドライバがオーディオに Attach する API が audio_attach_mi()

プロトタイプはこんなの

device_t audio_attach_mi(const struct audio_hw_if *, void *, device_t);

構造体 audio_hw_if が特徴ですな。ここから、Attach 処理の実体 audioattach() までの呼び出しがこんな感じ

device_t     audio_attach_mi(const struct audio_hw_if *, void *, device_t);
  device_t   config_found(device_t, void *, cfprint_t);
    device_t config_attach_loc(device_t, cfdata_t, const int *, void *, cfprint_t);
      void   audioattach(device_t, device_t, void *);

先ほどの audio_hw_if は、audioattach() 関数内で hwp = sa->hwif として、hwp 変数に受け渡される。

Attach 処理がうまくいかないときは、この hwp を追いかけるといいようだ。

トラックバック(0)

トラックバックURL: http://horliy.seri.gr.jp/MTcgi/mt-tb.cgi/55

コメントする

このブログ記事について

このページは、ほーりーが2015年11月29日 19:05に書いたブログ記事です。

ひとつ前のブログ記事は「手作りアンプの会 関西支部合宿」です。

次のブログ記事は「Thinkpadユーザはただちに保守延長の検討を」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。