実際のハードウェアデバイス用のLinuxデバイスドライバーを作成したいと思います。どのRaspberry Pi周辺機器が適していますか?基本的に次のものが必要です。
初心者には十分な大きさでなければなりません(せいぜい数ヶ月、より良い数週間)。
データシートが利用可能でなければなりません。最初はUSB-Ethernetアダプターについて考えていましたが、データシートが非常に限られているようです。
何か案は?GPIO上でシリアルコンソールを動作させるようなものでしょうか?
実際のハードウェアデバイス用のLinuxデバイスドライバーを作成したいと思います。どのRaspberry Pi周辺機器が適していますか?基本的に次のものが必要です。
初心者には十分な大きさでなければなりません(せいぜい数ヶ月、より良い数週間)。
データシートが利用可能でなければなりません。最初はUSB-Ethernetアダプターについて考えていましたが、データシートが非常に限られているようです。
何か案は?GPIO上でシリアルコンソールを動作させるようなものでしょうか?
回答:
複雑なデバイスおよび/または複雑なバスとインターフェイスする場合、ドライバーの作成を学ぶのは難しい場合があります。そのため、マイクロコントローラで通常使用されるI²C/ SPIデバイスのような、いくつかの単純でよく知られたデバイス(カーネル内のドライバの既存の実装を無視)を使用することをお勧めします。たとえば、Arduinoコミュニティで「サポート」されているデバイス(ライブラリ/ドキュメントがあることを意味します)を見つけて、RaspberryPiで使用してみてください。
それだけでは不十分な場合や、あまり多くのハードウェアを購入したくない場合は、自分でハードウェアを作成できます。マイクロコントローラー(atmegaなど)を入手し、デバイスになるプログラムを作成してから、Linuxドライバーを使用してインターフェイスに接続してみてください。これにより、さまざまなクラスのデバイスをエミュレートするプログラムを簡単に作成できます。また、「ファームウェア」を自分で作成するため、問題のデバッグに役立ちます。
そのためにはマイクロコントローラのプログラミングスキルが必要ですが、Arduinoでプログラミングを習得するのは難しくなく、ドライバープログラマにとっても有益な知識だと思います。
BCM2835 ARM Peripherals
ドキュメントに記載されていると思います。ただし、それを使用するには、まずカーネル内の既存のドライバーを無効にする必要があることに注意してください。
個人的には、GPIOピンに直接接続された1つまたは複数のLEDなど、非常に単純なデバイスから始めます。
プラグイン可能なデバイスを購入するか、独自のデバイスを配線します。
これをお勧めする理由は、ドライバーのデバッグは一般に通常のプログラムよりもはるかに難しいため、開始するための簡単なチャレンジが有用であり、そのコードをより複雑なデバイスのデバッグ方法として使用できることですオシロスコープに接続するGPIOピン)タイミングが重要な場合。
興味があるなら、カーネルドライバーがあります LedBorgのここから入手できます。ソースは、GPIOピンを定期的に駆動するための合理的な単純な例です。
ハードウェアドライバーを作成できる最も単純な「デバイス」は(ハードウェアドライバーの開発が必要な場合)、LEDのように単純な場合もあります(技術的にはLEDはデバイスではないが、 @PiBorgが示唆したように。
他の選択肢は、フォトレジスター、受動赤外線センサー(略称:PIR)、温度センサー、PCファン(できれば、モニターだけでなく、 RPM)、LEDドットマトリックスなど。基本的に、このようなシンプルなデバイスを使用すると、ハードウェアを最小限に抑えることができ(実際に達成したことを確認して操作できます)、同時に、より複雑なデバイスで使用される多くのトピックについて学ぶことができます。複雑さは、主に使用するプロトコルに起因しています。
また、カーネルモジュールを掘り下げる必要はありません。もちろん、あなたがそれをしたいなら、誰もあなたを止めません。:)
パッシブ赤外線センサーとのインターフェイスの例を次に示します(PIRが配信されたらすぐにテストします:3)。これを利用して、Linuxカーネルの世界をさらに掘り下げて、たとえばPIRで動作するカーネルドライバーを作成する方法を確認できます。