Linuxのデバイスドライバの深い理解をしたい、あなたは、次の質問をクリアする必要があります。
・リレーションシップ・アプリケーション、ライブラリ、カーネル、ドライバ
-deviceタイプ
*デバイスファイル、メジャー番号とマイナー番号の
違い-ドライバとアプリケーション
-userモードとカーネルモードの
機能・Linuxドライバ
まず、アプリケーション間の関係、ライブラリ、カーネル、ドライバ
- アプリケーションは、一連の機能を完了したファイルを操作することにより、一連のライブラリを呼び出します。
様々なハードウェアデバイスの形式でのファイルへのアプリケーションのアクセス(ファイルを読み書きするLinux固有抽象的、すべてのハードウェア抽象化アクセス、設定)
ライブラリ:
カーネルをサポートするために必要ないくつかの機能は、コードをライブラリ関数の内部で実装され、直接完了
ハードウェアやカーネルの動作に関連するサポート機能の一部は、カーネルは、我々はシステムコールを呼び出して対応する機能を、完了しました
-
コア処理システムコールは、デバイスは、ファイルタイプ、メジャー番号に従って、デバイス番号は、(後述する)、デバイスドライバを呼び出します。
-
ハードウェア・デバイス・ドライバと直接通信します。
第二に、デバイスの種類
のハードウェアが変更され、何も8000万人も存在しない、そして世界の人々の3種類があります同じように:すべてのハードウェアデバイス:男性、女性、および博士課程の学生と同じように、Linuxは非常に素晴らしい、非常にタフなカテゴリを作りましたキャラクタデバイス、ブロックデバイス、ネットワーク機器:3つのカテゴリに分類。
- キャラクタデバイス:文字(CHAR)デバイスは、バイト(類似ドキュメント)のストリームはデバイスとしてアクセスされることが可能です。
場合リード/ライト要求キャラクタデバイス、実際のハードウェアI / O操作は、一般的に直ちに起こります。
典型的には少なくとも開い達成するために、近い、読み文字のデバイスドライバ、およびシステムコールを記述します。
このような男性が同じで同じように動作するために使用さなど、私たちの共通のLCD、タッチスクリーン、キーボード、LED、シリアルポート、、として、彼らは一般的に発行された特定のハードウェアの収集、処理、伝送に対応しています。
- ブロックデバイス:アクセス・デバイスへの一次トランスポートブロックデバイスドライバ固定サイズ(典型的には512または1K)。
ブロックデバイスのバッファキャッシュ(メモリバッファ)アクセス、ランダムアクセス、すなわち:任意のブロックに関係なく、それが装置にある場合の、読み取ることができます。
ブロックデバイスは、そのデバイス特殊ファイルを介してアクセスが、より一般的に、ファイルシステムを介してアクセスすることができます。
唯一のブロックデバイスがマウントされたファイルシステムをサポートすることができます。
例えば、私たちの一般的なコンピュータのハードドライブ、SDカード、Uディスク、CD-ROM、女性は情報を格納するために使用されます。
- ネットワークインターフェース:ネットワークインタフェースを介して任意のトランザクションネットワークが形成され、即ち、ホスト装置および他のデータを交換することができます。
ネットワークインタフェースにアクセスするための方法は、それらを(eth0など)一意の名前を割り当てるが、対応するノードの名前は、ファイルシステムに存在しないままです。
カーネルとドライバとブロックキャラクタとの間の通信は全く異なるカーネルおよびネットワークデバイスドライバとの間の通信、カーネルではなく、リードの関数(ソケット関数)を呼び出し、書き込み、パケットの送信に関連する他のデータ。
このような稀ではあるが不可欠の数として博士課程の学生、のような私たちの共通のLANデバイス、Bluetoothデバイス、など。
すべてのLinuxドライバは最終的にこれらはSDカードなどにのみ、その部門のプログラムで、ある、我々はそれをラップすることができ、それらの間にはない非常に厳密な境界、当然のことながら、これらの3つのデバイスに戻ることができますキャラクタデバイス動作に入ることは問題ありません。以下のように。。。
第三に、デバイスファイル、メジャー番号、マイナー番号は
、デバイス部門のタイプがあり、そのアプリケーションは、特定のハードウェアデバイスにアクセスする方法をすべきですか?
それとも、彼が男であること、そしてやる世界の何千もの彼の異なるから彼を区別するためにどのように決定されていることを?
答えは次のとおりです。名前は、Linuxでのドライブは、デバイスファイル名です。
それでは、どのように同じ名前のですか?
答えは:LinuxドライバのID番号は、デバイス番号(マスターおよびスレーブ)です。
デバイスファイル:
Linuxシステムでの慣習がある、と言って:「すべてはファイルである」、アプリケーションがLinuxでハードウェアデバイスの様々なファイルとして/ devディレクトリに格納され、対応する機器にアクセスするためのデバイスファイルノードを使用して、あなたはLSを使用することができます/ dev(オープン、読み取り、書き込み、クローズ抽象化ファイルのすべてのペアのLinuxオペレーティング・ハードウェアの動作を確認し 、...)
各デバイスは、独自のファイルを持っているファイル属性(CまたはB)、LSは/ dev -l viewコマンドを使用して、デバイスは、文字またはブロックデバイスであることを示す、ネットワークデバイスと、このフォルダで、セックスの隣(男性女性)
マスタデバイスの数、からデバイス番号
、デバイス管理、デバイスタイプ、デバイスのパラメータの必要数からメインコアのペアに加えて、デバイスを一意に識別するために、ID番号と同様、ヒトと呼ばれ
マスター番号:
例えば同じ主デバイスドライバ、同じ数の使用、ドライバを識別するために使用される:タッチスクリーン、シリアルポートS3C2440、LCDを、3つのデバイス、それらのメジャー番号は様々 。
デバイス番号:
異なるハードウェアが同じドライバを識別するために使用され
例:PCのIDEデバイスは、各パーティションを識別するためのデバイス番号からハードディスクを識別するためのマスタデバイスの数、3つのシリアルポート2440があり、マスタ・デバイスの同じシリアル番号、スレーブデバイスの各々は、区別するために、その特定の数に属しシリアルポート。
第四に、ドライバーとのアプリケーション間の差
メイン起動するアプリケーション
ドライバがメインではないエントリとして、それはモジュールの初期化関数にある
アプリケーションが最初から最後までタスクを実行するために
ドライバを初期化した後に実行されなくなり終了し、呼び出すためのシステムを待つ
アプリケーションをすることができます他の標準Cライブラリglibcを使用して
ドライバは、標準Cライブラリを使用することはできませんが
第五に、ユーザーモードカーネルモードの区別
ドライバは、カーネル、カーネルモードの仕事の一部であり
、ユーザーモードで動作するアプリケーション
のデータ・スペース・アクセスの問題
に対処するために、両方のデータを直接ポインタによって送信することができない
システムでは、データを完了するのに役立つ関数のセットを提供します空間変換
GET_USER
put_user
copy_from_user
copy_to_user
六、Linuxドライバの機能
デバイスの初期化とリソースを解放し
、ハードウェアからカーネルとハードウェアからデータを読み取るために、送信されたデータに
デバイスファイルに送信されたアプリケーションデータを読み込み、アプリケーションによって要求されたデータ返送する
エラー検出とハンドリング機器(表示されます基礎となるプロトコル)
装置の具体例を区別するために使用されています