Linux で char デバイス ドライバを作成するにはどうすればよいですか?
6 に答える
非常に良い例は、Linux の「softdog」またはソフトウェア ウォッチドッグ タイマーです。ロードされると、書き込み用の特別なデバイスを監視し、それらの書き込みの頻度に応じてアクションを実行します。
また、非常に役立つ初歩的な ioctl インターフェースの実装方法も示します。
確認するファイルは drivers/watchdog/softdog.c です。
例から学ぶのであれば、それは非常に良いものです。他の人が示唆する基本的なキャラクターデバイス (ヌル、ランダムなど) も良いですが、ioctl() インターフェイスを実装する必要がある方法を十分に示していません。
余談ですが、ドライバーは Alan Cox によって書かれたと思います。例から学ぶのであれば、トップレベルのメンテナの仕事を学ぶのは決して悪い考えではありません。ドライバーは、適切な Linux 標準への準拠も示していると確信できます。
ドライバーに関する限り (Linux で)、キャラクター ドライバーは最も簡単に作成でき、コードが非常に高速に動作することがわかるため、最もやりがいがあります。幸運と幸せなハッキング。
次の本を読んでください: O'Reilly 発行のLinux Device Drivers 。
とても助かりました。
カーネルがどのように機能するかを学ぶための私のお気に入りの本、BY FAR (そして私はそれらのほとんどを読んだ) は次のとおりです。
この本はかなり短いので、最初に読んでから、ドライバーに関する O'Reilly の本を読んでください。
ここからキャラクタードライバーのスケルトンを確認してくださいhttp://www.linuxforu.com/2011/02/linux-character-drivers/....先に進んで、ここにあるすべてのトピックを読み、完全に理解してください(これはちょっとしたチュートリアルです)。 -だから、言ったように一緒に遊んでください)。
「copy_to_user」関数と「copy_from_user」関数がどのように機能するかを確認してください。これらは、ドライバー関数のコールバックの読み取り/書き込み部分で使用できます。
これが終わったら、基本的な「tty」ドライバーを読み始めます。
まず、ドライバー登録アーキテクチャに焦点を当てます。これは、次のことを意味します。-
- 埋める構造体を確認してください-例:-struct file_operations f_ops=...。
- 特定の構造をコアに登録する機能はどれですか。例:-_register_driver。上記が完了したら、ドライバー(ポリシー)に必要な機能を確認し、そのポリシー(メカニズムと呼ばれる)を実装する方法を考えます。ポリシーとメカニズムにより、ドライバーのさまざまな側面を区別できます。
- コンパイルmakefilesを作成します(複数のファイルがある場合は難しいですが、難しいことではありません)。
- エラーと警告を解決してみてください。そうすれば完了です。
メカニズムを作成するときは、それがユーザースペースのアプリケーションに提供するものを決して忘れないでください。
標準カーネルの「null」、「zero」、「mem」、「random」など、非常に単純な標準のものをいくつか見てみましょう。それらは簡単な実装を示しています。
明らかに、実際のハードウェアを操作している場合は、より複雑になります。デバイスのサブシステム API (PCI、USB など) だけでなく、ハードウェアとのインターフェイス方法を理解する必要があります。割り込み、カーネルタイマーなどの使用方法も理解する必要があるかもしれません。