デバイスドライバ入門【LDD301】



Introduction Device Drivers Ldd3 01



ldd3: https://lwn.net/Kernel/LDD3/

しばらくの間、Linuxドライバーの開発の下で行いますが、Linuxカーネル、次にカーネルについて、関係する部分が不明なままになることがあるので、いくつかの関連する本を読み、同時に彼ら自身の理解を共有する予定です。ドライバーをやっているので、ldd3から始めました。導入は非常に単純で明白に見えますが、導入から開始まで、今日が最初ですが、多くの場合、デバイスドライバーを包括的に理解するための重要なヘルプに焦点を当てて遊んでいます。



Linuxカーネルと巨大な複合体ですが、コアはまだデバイスドライバーの一部です。なんで言うの?基盤となるオペレーティングシステムカーネルは、デバイスに直接接続されているすべてのものを管理するため、ユーザーは事実上すべての操作を物理デバイスに対応させることができます。たとえば、キャラクターによるキーストローク、処理ルーチン、USBデバイスドライバー、キャラクター処理プログラムを中断する必要があり、次にユーザーモードにすると、画面に表示されるコンテンツが変更され、Windowsマネージャーなどを再描画する必要があります。Xサーバーフレームバッファ図面を駆動するGPUを使用して、最後にディスプレイドライブに移動し、最後にディスプレイに表示します。デバイスドライバーはカーネルの非常に中心的な部分であり、OSは操作の最終的なターゲットであると言えます。

開発者にとって、デバイスドライバーは、もちろんデバイス自体に応じて、簡単なものから難しいものまで、単純なものから複雑なものまでありますが、個々の開発者の能力もあります。 ldd3は、デバイスドライバーの基本原則には2つのメカニズム(メカニズム)とポリシー(ポリシー)があることを認識しています。これはデバイスドライバーの開発ではありません。インターフェイスの設計と実装など、開始点としてこれら2つの原則に基づいてプログラムを設計する必要があります。実装メカニズムのみを検討する必要があり、何が起こるかについて心配する必要はありません。クライアントと。どのような機能を実現するのか、どのような機能しか実現しないインターフェースを設定しました。クライアントは使用法を想定していません。そうしないと、インターフェースロジックの混乱、モジュールの結合、インターフェースの不合理などが発生します。デバイスドライバはさらにそうです。複雑なデバイスドライバーは、メモリ管理、スケジュール、読み取りおよび書き込みアクセスデバイスレジスタ、機能的なユーザー状態プログラムの実装などに関連している可能性があります。書き込みドライブヘッドが明確でない場合、インターフェイスを実装するたびに、他の人がどのように行動するかを考慮する必要があります。使用する場合は、デバイスドライバの外にバグ100が必要であり、保守が難しいことを認識してください。要するに、ポリシーフリーは原則を実装するために非常に重要ですが、そのコーディングがポリシーであるメカニズムである場合は明確に考えることができますが、それを行うのは簡単ではありません。



上記のメモリ管理、スケジューリング、さらにはデバイスレジスタへのアクセスなど、さまざまな機能を実現するためにユーティリティカーネルに依存することを目的として生まれた、ロード可能なモジュールドライバとしてのデバイスドライバ。カーネルの自然な役割は非常に重要です。プロセス管理、メモリ管理、ファイルシステム、デバイス制御、データネットワーク管理などは、どの部分に関係なく、オペレーティングシステム全体の基盤です。ドライブは良いか悪いか、これらの機能がカーネルに馴染みがあるかどうかに依存します。適切に使用されている場合、ドライバー開発ここにこすりがあります。ビジネスロジックを実現するために機能カーネルの組み合わせが必要です。走行性能・機能の違い。したがって、デバイスドライバーを作成する場合でも、カーネル全体を包括的に理解できれば、フル機能、優れたパフォーマンス、スケーラビリティ、保守性に優れたドライバーを実現するのに役立ちます。

カーネルには、モジュールなどの優れた設計がたくさんあり、各ドライバーが個別のモジュールドライバーであり、実行時に動的にロードおよびアンロードできるようになっています。これは、ダイナミックリンクライブラリ、カーネルがマネージャー、モジュールドライバーが弟の一人であり、上司、上司に必要なリソースをオンデマンドで適用することを意味します。多くのグループに分けられたタイプまたはクラスに応じたすべてのドライバーは、編成と管理を容易にし、ドライバーはカーネルの要件に従って固定数のコールバックを実装するだけで済み、作業でき、作業ドライバーの難しさを大幅に軽減します開発者だけでなく、ビジネスの自由なロジックを実現するのに十分な柔軟性をドライバーに提供します。優れたオペレーティングシステムが当てはまります。あなたはあなたに与えたいと思っており、ほとんどの愛のようにあなたに完全な自由を与えました。



カーネルの一部であり、多くのコアですが、拡張のすべての部分は巨大なプロジェクトです。サブシステムダウンパッケージングデバイスドライバー、アップインターフェイスを提供し、各レイヤーのカーネルがその役割を果たし、同じ年のソフトウェアエンジニアリング標準で、レイヤーを追加する中間である限り、すべての問題を解決できます、各機能が緩んでいるようです実際には、互いに邪魔することなく、各機能の独立性が保証されます。

ほとんどの機器はキャラクターデバイス、そのキャラクターデバイス、クラスブロックデバイス、ネットワークデバイスに属しています。データを処理するためのこれらのタイプの装置は同じではなく、文字モードのバイトストリームに従ってデバイスが処理され、ブロックデバイスがデータブロックに従って処理され、ネットワークデバイスがパケットに従って処理される。ドライバー開発者は、機器が属する機器を知る必要があります。ドライバーは登録時に同じキャラクターデバイスを使用しないため、キャラクターデバイス固有のインターフェイスを呼び出す必要があり、ブロックデバイスとネットワーク機器も対応するインターフェイスを呼び出します。デバイスのプロパティが異なるため、これらのデバイスのカーネル処理は不透明であり、ドライバー開発者は独自に対処する必要があります。

モジュラーは、設計基準におけるすべてのソフトウェアエンジニアリング、各モジュールは独立して機能し、モデルを見るとcsに従って、各モジュールは両方ともクライアントサーバーであると言えます。

紹介するように、メインカーネルのコーディング部分とは関係なく、高レベルの説明があり、サンプルドライバーの背後にあるコーディングの準備をするためのカーネルとデバイスドライバーの役割と責任を明確に理解しています。

ldd3の概要:

第2章モジュール化の紹介

第3章実際のハードウェアデバイスの代わりにメモリに基づくサンプルドライバ。「デバイス」はサンプルドライバを介して読み取り/書き込みが可能です。

第4章デバッグ技術。

第5章並行性と競合状態。

第6章高度なトピック、charデバイスのブロック操作、selectおよびioctlの使用。

第7章カーネルでの時間管理

第8章メモリ割り当て。

第9章デバイスI / Oとデバイスメモリの管理。

第10章割り込みハンドル。

第11章では、カーネル構造とポータブルコードを使用します。

第12章pciデバイスドライバー。

第13章USBデバイス。

第14章カーネルボトムアップデバイスモデルインフラストラクチャ。

第15章カーネルメモリ管理。

第16章ブロックデバイスドライバー。

第17章ネットワークデバイスドライバー。