Linuxドライバの作成

  

作業には、当社のネットワークカード用のLinuxドライバを作成する必要があります。プロセスを最初から体験して、テクニカルコミュニケーションの重要性を感じてください。ソフト独占に挑戦するための強力な武器として、Linuxはますます多くの人に愛されています。彼女が中国で急成長できることを本当に願っています。プログラムの文書を投稿し、中国でのLinuxの普及を促進するためにあなたとLinuxの技術やアプリケーションについて話し合うことを望みます。

Linux オペレーティングシステム
ネットワークドライバの書き方1. Linuxシステムデバイスドライバの概要1.1 Linuxデバイスドライバの分類1.2ドライバの基本概念の書き方II。Linuxシステムネットワークデバイスドライバ2.1ネットワークドライバの構造2.2ネットワークドライバの基本的な方法2.3ネットワークドライバで使用されるデータ構造2.4一般的なシステムサポートIII。Linuxネットワークドライバの作成時に発生する可能性がある問題3.1割り込み共有3.2ハードウェアがビジーを送信したときの処理3.3フロー制御3.4デバッグIV。さらに読むことV.その他


A. Linuxシステムデバイスドライバの概要1.1 Linuxデバイスドライバの分類LinuxにおけるLinuxデバイスドライバカーネルのソースコードが大きな割合を占めており、主にドライバの増加により、ソースコードの長さが伸びています。進行中のLinuxカーネルのアップグレードでは、ドライバの構造は比較的安定しています。 2.0.xxから2.2.xxへの変更では、ドライバはいくつかの変更を加えて書かれましたが、2.0.xxから2.2.xxへの移行にはわずかな作業しか必要ありません。 Linuxシステムデバイスは、キャラクタデバイス(charデバイス)、ブロックデバイス、およびネットワークデバイスの3種類に分類されます。キャラクタデバイスは、アクセス時にキャッシュされないデバイスです。ブロックデバイスは読み取りと書き込みをサポートするためにキャッシュされ、ブロックデバイスはランダムアクセスにアクセスできる必要がありますキャラクタデバイスにはこの要件はありません。典型的なキャラクタデバイスはマウス、キーボード、シリアルポートなどを含む。ブロック装置は、主にハードディスクフロッピーディスク装置、CD − ROM等を含む。オペレーティングシステムにインストールするには、ファイルシステムをブロックデバイスにインストールする必要があります。ネットワークデバイスはLinuxで特殊な処理を行います。 Linuxネットワークシステムは主にBSD unixのソケットメカニズムに基づいています。データ転送のために、システムとドライバの間に特別なデータ構造(sk_buff)が定義されています。システムは、データ送信およびデータ受信のキャッシングをサポートし、フロー制御メカニズムを提供し、複数のプロトコルをサポートします。

1.2ドライバを書くためのいくつかの基本概念どんなオペレーティングシステムドライバにもいくつかの一般的な概念があります。オペレーティングシステムによってドライバに提供されるサポートも大体同じです。ネットワークデバイスドライバの基本的な要件は次のとおりです。 1.2.1送信と受信これはネットワークデバイスの最も基本的な機能です。ネットワークカードがすることは、送受信することに他なりません。そのため、ドライバはシステムに送信機能がどこにあるかを伝え、送信するデータがあるときにシステムが送信プログラムを呼び出します。さらに、ドライバはハードウェアを直接操作するので、ネットワークハードウェアは最初にデータを受信します。つまり、ドライバは元のデータを処理してからシステムに送信します。ここで、オペレーティングシステムは2つのメカニズムを提供する必要があります。1つはドライバーの送信機能を見つけること、もう1つは受信したデータをシステムに送信することです。 1.2.2割り込み割り込みは現代のコンピュータアーキテクチャにおいて重要な位置を占めています。オペレーティングシステムは、ドライバが割り込みに応答する能力を提供しなければなりません。システムに割り込みハンドラを登録するのが一般的です。ハードウェア割り込みが発生すると、オペレーティングシステムはドライバのハンドラを呼び出します。 Linuxは、複数のデバイスが割り込みを共有する割り込み共有をサポートしています。 1.2.3。クロック クロックはドライバを実装するとき多くの場所で使用されます。たとえば、一部のプロトコルでのタイムアウト処理、割り込みメカニズムなしのハードウェアポーリングなどオペレーティングシステムは、ドライバにタイミングメカニズムを提供する必要があります。所定の時間が経過した後に登録された時計機能をコールバックすることは一般的である。ネットワークドライバでは、ハードウェアが割り込み機能を持たない場合、タイマはポーリング方式でハードウェアへのアクセスを提供できます。あるいは、特定のプロトコルを実装するために必要なタイムアウト再送です。 2. Linuxシステムのネットワークデバイスドライバ2.1ネットワークドライバの構造すべてのLinuxネットワークドライバは共通のインタフェースに従います。オブジェクト指向アプローチは設計に使用されます。デバイスは、内部に独自のデータとメソッドを持つオブジェクト(デバイス構造)です。各デバイスのメソッドの最初のパラメータは、デバイスオブジェクト自体と呼ばれます。このようにして、あなたはあなた自身のデータにアクセスすることができます(オブジェクト指向プログラム設計へのこの参照と同様に)。ネットワークデバイスの最も基本的な方法は、初期化、送信、および受信です。 ------------------- --------------------- | パケットを配信する  | 受信パケットキュー|  | (dev_queue_xmit())|  | それら(netif_rx())  ------------------- --------------------- |  |  //|  |  -------------------------------------------------- ----- |  メソッドと変数(初期化、開く、閉じる、hard_xmit、|  |  割り込みハンドラ、設定、リソース、ステータス...)|  -------------------------------------------------- ----- |  |  //|  |  ----------------- ---------------------- | ハードウェアに送る  | ハードウェアからの受け取り|  ----------------- ---------------------- |  |  //|  |  -------------------------------------------------- --- |  ハードウェアメディア  -------------------------------------------------- ---初期化プログラムは、ハードウェアの初期化、デバイス内の変数の初期化、およびシステムリソースの適用を完了します。ドライバーの上位プロトコル層に送信するデータがあると、送信者が自動的に呼び出されます。一般的なドライバでは、送信データはバッファリングされませんが、データ送信機能は直接データの送信に使用されます。受信データは一般にハードウェア割り込みによって通知されます。割り込みハンドラでは、ハードウェアのフレーム情報をskbuff構造体に入れてからnetif_rx()を呼び出して上位層の処理に渡します。

2.2ネットワークドライバの基本メソッドネットワークデバイスはオブジェクトとして機能し、システムアクセスのためのメソッドを提供します。ハードウェアの独立性を達成するために、システムが統一された形式で様々なネットワーク装置にアクセスするように、ハードウェアの特定の詳細を隠すのは統一されたインターフェースを有するこれらの方法である。最も基本的な方法を以下に説明します。 2.2.1初期化ドライバは初期化メソッドを持っていなければなりません。この初期化プログラムは、ドライバがシステムにロードされたときに呼び出されます。以下の作業を行います。試験装置初期化プログラムでは、ハードウェアの特性に応じてハードウェアの存在を確認してから、ドライバを起動するかどうかを決定できます。ハードウェアを設定して初期化します。初期化プログラムでは、現時点でプラグアンドプレイハードウェアを設定できるなど、ハードウェアリソースの設定を完了できます(LinuxカーネルはPnP機能を適切にサポートしていません。ドライバでこれを実行できます)。ハードウェアが占有するリソースを設定またはネゴシエートした後、これらのリソースをシステムに申請できます。割り込みなど、一部のリソースは他のデバイスと共有できます。 IO、DMAなど、共有されていないものもあります。次に、デバイス構造内の変数を初期化する必要があります。最後に、ハードウェアを正式に機能させることができます。

Copyright © Windowsの知識 All Rights Reserved