もともとIBM PCでは、I / Oアドレス0x61のビット1に1と0を書き込むことで、PCスピーカーを直接駆動することができました。これは基本的に1.19MHzタイマ周波数で動作する1ビットDACでした(システムクロックは4.77MHz、4)。
Linuxでこれを行う方法はありますか?理想的には、ファイルまたはライブビットストリームを供給し、マザーボードのTTLスピーカー電圧ピンに直接接続できるシリアルデバイスが必要です。私が見たほとんどのオンラインプログラムはioctlを介してPITの2を時計に設定しますが、タイマーを介さずにスピーカーを直接駆動したいと思います。
答え1
正確にこれを試みるカーネルモジュールと呼ばれるカーネルモジュールがありますsnd-pcsp
(ソースコードがあり、sound/drivers/pcsp/
ポート0x61をどのように処理するかを見ることができます)。 ALSAデバイスに公開されるので、ライブビットストリームを簡単に提供できます。
しかし、私のシステムでは、あなたが説明するものと非常によく似ていません。少なくとも私が試したものとは異なります。しかし、あなたはそれで何をしたいのか言っていませんでした。私はあなたも1.19MHzに達することができないと思います。ただし、必要に応じていつでもカーネルモジュールを変更できます。
これがうまくいかない場合は、ユーザースペースアプリケーションがルートであり、実行可能であればioperm
ポート0x61への書き込みを防ぐ方法はありません。しかし、もちろん問題が発生する可能性があります。 Linuxはリアルタイムオペレーティングシステムではないため、アプリケーションはいつでもプリエンプションできます。 (私はこの特定のアプリケーションのためのコアを予約するなど、これが起こらないようにする方法にも興味があります。)