Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> LinuxシステムFAQ >> PCI Linuxのデバイスドライバの開発者

PCI Linuxのデバイスドライバの開発者

  

A、PCIバスシステムアーキテクチャ

PCIは、周辺コンポーネント相互接続(周辺コンポーネント相互接続)は、汎用バス・インターフェース規格と呼ばれているの下で、それは今でありますコンピュータ・システムは、非常に広く使用されています。コンピュータ・システムに周辺機器を接続して一緒の構造化された方法で制御する方法を説明することを目的とする完全なPCIバスインタフェース仕様を提供するが、それはまた、電気的接続を示している場合、周辺装置特性および法令の挙動、及び適切にコンピュータ・システムの様々なコンポーネント間の対話方法を詳細に定義されるべきです。

かどうかは、IntelベースのPCで、またはAlphaチップベースのワークステーション上で、PCIは間違いなく最も広く使用されている標準バスインタフェースの一つなしです。示されるように異なるレガシーISAバスと、PCIが完全にコンピュータ・システム・バスサブシステムおよびストレージ・サブシステムから分離され、CPUサブシステムは、PCIブリッジ(PCIブリッジ)と呼ばれる装置によってバスとの相互作用を完了するために図。
図1 PCIサブシステムアーキテクチャ

より高いクロック周波数を使用する、PCIバスは、ISAバスよりも優れた全体的なパフォーマンスを得ることができるようにします。 64ビットシステムは、266MHzのにまで到達することができながら、PCIバスクロック周波数は、33MHzの、66MHzのまたはいくつかさえ達することができるの133MHzまでの25MHzの範囲です。機器のほとんどは、32ビットPCIデータバスを使用していますが、PCI仕様は、64ビットの拡張機能の実装について説明したが、プラットフォームからの独立を達成するので、より可能PCIバスは、PCIバスは現在、IA-32、アルファのために使用することができました、PowerPCの、SPARC64およびIA-64アーキテクチャーなどが挙げられます。それは最終的に歴史的な完全なISAバス置き換えることができるように

PCIバスは、3つの重要な利点があります:

は、コンピュータと周辺機器間のデータ伝送時の優れた性能を持っているが、特定のプラットフォームに依存しない可能な限り、プラグアンドプレイを容易に実現することができます。図2は、PCIバスとPCI-PCIブリッジによって互いに接続されているシステムのPCIバス論理概略図のそれぞれの部分に基づいて、典型的なコンピュータシステムです。 PCIインタフェースとグラフィックスは、一次PCIバスに直接接続することができるが、それは、PCIバス0(すなわち、一次PCIバス)を接続するPCIブリッジによって必要とされる図形、CPU、およびRAMから明らかです。 PCI-PCIブリッジは、1(すなわち、主PCIから)と共にPCIバス0とPCIバス、PCIバスは、一般に、下流のPCI-PCIブリッジ(下流)と呼ばれ、一方PCIバスを担当してPCI特別な装置、です0(上流)上流のPCI-PCIブリッジと呼びます。図は、SCSIカードからPCIバスに接続され、イーサネットカード。古い標準ISAバスとの互換性のために、PCIバスは、以前のISAデバイスをサポートすることができるPCI-ISAブリッジを介してISAバスに接続することができます。キーボード、マウス、およびフロッピードライブを制御するためのマルチファンクションI /Oコントローラと図ISAバスコネクタ。読者が詳細を知りたい場合は
図2 PCI系統図

はここで、私は、PCIバスシステムアーキテクチャへの一般的な紹介をした、Linuxカーネルではデビッド・A Ruslingます(http://TLDP。 LinuxのPCIの詳細な説明とORG /LDP /TLK /DD /pci.html)サブシステム。

2、Linuxのドライバフレームワーク

すべての外付けデバイスのLinuxは、特殊なファイル、'&と呼ばれるよう、デバイスファイル'、システムコールはLinuxカーネルとアプリケーションである場合プログラム間のインタフェースは、次に、デバイス・ドライバは、Linuxカーネルと外部装置との間のインターフェースと見なすことができます。アプリケーションは、外部デバイスを動作させるために、通常のファイルとして動作することができるように、アプリケーション上のデバイスドライバのハードウェア実装の詳細を遮蔽します。

Linuxのハードウェア抽象化処理は、すべてのハードウェアデバイスは、通常のファイルと同じように見ることができ
1文字とブロックデバイス:彼らは同じ動作ファイルを使用することができ、標準システムコールのオープンを完了するためのインタフェース、クローズ、読み取り、およびI /O制御操作は、ドライバの主なタスクは、これらのシステムコールを達成することです。すべてのハードウェアのLinuxシステムでは、例えば、IDEハードディスクは/dev /hdaの図を使用して第1のシステムを示すために、特殊なデバイスファイルを使用します。デバイス番号2に対応する各デバイスファイル:一つは、デバイスのタイプを識別する、メジャー番号であるが、が使用され、このデバイス用のドライバを識別し、他のマイナー番号は、異なるハードウェア・デバイス・ドライバを使用して同じ識別であります機器。そして、デバイスにログインするとき、デバイスのマスタデバイスファイル番号のための主要な数は、デバイスドライバに提出しなければならない、そうでない場合、プロセスは、ユーザのデバイスドライバにアクセスすることはできません。 Linuxオペレーティングシステムで

は、デバイスファイルの2つの主なタイプがあります。一つはキャラクタデバイスで、他はブロックデバイスです。 1つのI /O操作、文字デバイスの書き込み要求を発行するとき、実際のハードウェアは、I /Oは、一般的にキャッシュに、直ちに発生によるバイト装置1の文字デバイスは、キャラクタデバイスが有していてもよいですことができず、ランダムアクセスをサポートしていません。ブロック・デバイスは、ユーザ・プロセスが読み込まれ、要求をデータバッファは、対応するデータを返すユーザーの要件を満たすことができる場合、バッファの内容を表示するためのデバイスドライバを書くとき、バッファなどのシステムメモリを使用することで、それ以外の場合は、実際のI /O操作を要求するために適切な関数を呼び出します。ブロックデバイスは、主に、ディスクなどの低速デバイス用に設計されており、その目的は、操作を待つために完全な消費あまりにも多くのCPU時間を避けるためです。一般的には、PCIカードは、通常、キャラクタデバイスを持っています。

すべての主要機器は、ハードウェア・デバイスの/proc /デバイスファイルから取得することができる(すなわち、既にロードされて運転者)に登録されています。 mknodコマンドは、デバイスファイルの指定された型を作成し使用し、適切なメジャー番号とマイナー番号を割り当てます。たとえば、次のコマンドを実行します。

[ルート@ゲイリールート]#mknodをは/dev /lp0にC 6 0

メジャー番号6、マイナーデバイス番号0キャラクタデバイスを作成します。ファイルは/dev /lp0に。アプリケーションは、デバイスのファイルシステムを要求するとき、デバイスの主要な数のファイルのそれぞれのデバイスタイプに基づいて、Linuxカーネルドライバとは、ユーザモードから入力するモードをカーネルに呼び出し、その後、デバイスドライバによって決定されますマイナー番号は、各ハードウェアの動作の最終完了。

2.デバイスドライバインタフェース

LinuxのI /Oサブシステムは/Linuxの/FSを含むことであるカーネルの他の部分への統一標準デバイス・インターフェースを提供します。データ構造file_operations hを達成:

のstruct file_operations {

のstructモジュール*所有者;

loff_t(* llseek)(構造体ファイル*、loff_t、INT);

はssize_t(*読み込み)(構造体ファイル*、char型*、size_tの、loff_t *);

はssize_t(*書き込み)(構造体ファイル*、constのchar型*、size_tの、loff_t * );

int型(*のreaddir)(構造体ファイル*、void *型、filldir_t);

unsigned int型(*ポール)(構造体ファイル*、構造体poll_table_struct *);

int型(*のioctl()のinode構造*、構造体ファイル*、unsigned int型、unsigned long型);

int型(* MMAP)(構造体ファイル*、構造体するvm_area_struct *);

int型(*オープン)(構造体のinode *、構造体ファイル*);

int型(*フラッシュ)(構造体ファイル*);

int型(*リリース)(構造体のinode *、構造体ファイル*);

int型(* FSYNC)(構造体ファイル*、構造体のdentry *、int型のdatasync);

int型(* fasync)(int型、構造体ファイル*、INT);

int型(*ロック)(構造体ファイル*、int型、構造体file_lock *);

はssize_t(* READV)(構造体ファイル*、constの構造体の*、unsigned long型、loff_t *)IOVEC;

はssize_t(* writev)(構造体ファイル*、 constの構造体IOVEC *、unsigned long型、loff_t *);

はssize_t(* sendpage)(構造体ファイル*、構造体のページ*、int型、size_tの、loff_t *、int型);

unsigned long型(* get_unmapped_area)(構造体ファイル*、unsigned long型、

、符号なしの長い長い符号なし、長い符号なし);

};

ときに、ファイルのようなデバイスのアプリケーション、機能は、オープン、クローズ、読み取り、書き込み、および他の操作は、いつ、Linuxカーネルは、ドライバfile_operations構造によるアクセスを提供します。例えば、アプリケーションは、デバイスファイルの読み出し動作を行う場合、カーネルは、読み出し関数file_operations構造を呼び出します。

Copyright © Windowsの知識 All Rights Reserved