Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxデバイスドライバベース

Linuxデバイスドライバベース

  

デバイスドライバは、オペレーティングシステムカーネルとマシンハードウェアの間のインタフェースであり、デバイスドライバはアプリケーションのハードウェア詳細を保護するため、アプリケーションビューではハードウェアデバイスデバイスファイルだけで、アプリケーションは通常のファイルと同じようにハードウェアデバイス上で動作できます。デバイスドライバはカーネルの一部で、その主な機能は、デバイスの初期化と解放、カーネルからハードウェアへのデータ転送、およびハードウェアからのデータの読み取り、アプリケーションからデバイスファイルへのデータの読み取り、およびアプリケーションの返却です。検出および処理装置で要求されたデータとエラー。


Linuxは、デバイスを2つの基本的なカテゴリに分類します。1つはキャラクタデバイス、もう1つはブロックデバイスです。キャラクタ型デバイスとブロック型デバイスの主な違いは、実際のハードウェアI /Oは通常、キャラクタ型デバイスに対して読み取り/書き込み要求が行われた直後に行われることです。キャラクタデバイスは通常バッファリングせずにシングルバイトでシーケンシャルな読み書き操作を実行します;ブロックデバイスはハードディスクやフロッピーディスクなどのような固定サイズブロ​​ックで保存され読み書きされ、バッファとしてシステムメモリを使用します。地区効率を向上させるために、システムはブロックデバイスの読み書き用のキャッシングメカニズムを提供しますが、バッファ管理、スケジューリング、および同期に関する問題のため、キャラクタデバイスよりも実装がはるかに複雑です。 LCDはキャラクタデバイスとしてアクセスおよび管理され、Linuxはディスプレイドライバをキャラクタデバイスとして扱い、表示するデータをバイト単位でLCDドライバに送信します。


Linuxデバイス管理はファイルシステムと密接に統合されており、さまざまなデバイスがデバイスファイルと呼ばれるファイルとして/devディレクトリに格納されています。アプリケーションはこれらのデバイスファイルを開いたり、閉じたり、読み書きしたりして、通常のデータファイルのようにデバイス上で操作を完了できます。これらの装置を管理するために、システムは装置に番号を付け、各装置番号は1次装置番号と2次装置番号に分けられます。プライマリデバイス番号は、異なる種類のデバイスを区別するために使用され、セカンダリデバイス番号は、同じ種類の複数のデバイスを区別するために使用されます。一般的なデバイスの場合、Linuxにはカスタム番号があります。たとえば、ハードディスクのメジャーデバイス番号は3です。 Linuxは、データ構造体struct file_operationsを使用して、すべてのデバイスファイルに対して統一された操作機能インタフェースを提供します。このデータ構造には、open()、close()、read()、write()などの多くの操作関数へのポインタが含まれていますが、周辺機器の種類によって操作モードが異なります。 Struct file_operations構造体のメンバは、読み書き用の読み書き関数や制御用のioctlなどの一連のインタフェース関数です。ファイルを開くとは、このファイルfile_operationsでopen操作を呼び出すことです。ファイルの種類が異なると、通常のディスクデータファイル、ディスクデータブロックの読み取りおよび書き込み操作を完了するためのインターフェイス機能、さまざまなデバイスファイルの場合は特定のデバイス用の各ドライバのI /O関数への最後の呼び出しなど、異なるfile_operationsメンバ関数があります。操作このようにして、アプリケーションは、デバイスが動作しているのか通常のファイルであるのかを考慮する必要がなく、非常に明確で統一されたI /Oインタフェースを持つファイルとして扱うことができます。したがって、file_operationsはファイルレベルのI /Oインタフェースです。

2回目の書き込み

友人がテンプレートとしてダウンロードできるように、コードにコメントを追加する方法を使用し、同時に複数のファイルをアップロードしました。各ファイルは==
で区切られています。

合計3つのファイル、1つのドライバヘッダファイル、1つのドライバファイル、およびドライバテストプログラムファイル

はtest.hです。 test.cおよびledtest.c

ドライバが何をするのか、それをどのように行うのかについて簡単に説明します。

1システムロードドライバ

2アプリケーションでデバイス(ファイル)を開きます。 Br>

3機器操作への応用

4アプリケーションシャットダウン機器(ファイル)

5システムシャットダウン機器

機器上でのアプリケーションの動作は?

C言語でファイルを書く方法を覚えていますか?これは非常に似ています。一般的なキャラクタ型デバイス(およびブロック型デバイス、ネットワークデバイスなど)には、主に3つの機能があります(たくさんありますが、わかります)。llseek read:write:ioctl:ここではioctl:control機能のみです。もちろん、readおよびwriteも使用できます。この機能はIOポート上で動作しますが、ioctl:がより適しているようです。

特定の実装はledtest.cファイルを見ることができます。

test.cには、初期化とクリア、開閉に責任を持つ主にいくつかの関数があります。そしてioctlはシリアルポートレジスタにデータを書き込みます。

初期化と片付け、開閉する機能には主文があり、別途コメントがあります。ちょうどいいことを忘れないでください。

登録操作だけではなく、44B0データシートをご覧ください。それでは、残りのコードを見てみましょう。

======================================================== == test.h ============================================================== =========

/**************************************** ****** Copyright(c)********************************************** **********

**無料

**

** --------------ファイル情報-------------------------------

**ファイル名:config.h

**最終更新日:2006-9-9

**最終バージョン:1.0

**説明:ユーザ設定ファイル

**

** -------------------------------------------------- ------

**作成者:ZLG CHENMINGJI

**作成日:2006-9-9

**バージョン:1.0

**説明:初版

**

** -------------------------- -----------------------

**更新者:MAMAJINCO

**更新日:2006-9- 9

**バージョン:1.0

**解説:私のテンプレートをZLGに感謝します高品質なプログラミング意識がここから生まれました

**

***************************************************** ***** /

//重複がこのファイルを含まないようにする設定マクロ

#ifndef __CONFIG_H

#define __CONFIG_H

//必要なヘッダファイルをインクルードする

#i nclude

#カーネルに情報を出力するために使用されるヘッダファイルが含まれていなければなりません。//

#含まれています。 file_oprationなどの構造体この構造体はファイルレイヤインタフェースに使用されます* /

#i nclude /*エラーコード* /

#i nclude

#i nclude

#i nclude

#i nclude

/***************************** *** /

/*アプリケーションの設定* /

/************************** ****** /

//必要に応じて次の変更が必要です。

//メインデバイス番号を定義します。デバイス名

#define LED_MAJOR_NR 231 //231〜239 240〜 255は

#define DEVICE_NAME" led" /*メッセージング用の名前* /

#define SET_LED_OFF 0

#define SET_LED_ON 1

# Endif

/************************ファイルの終わり

********* ***************************************************** /< Br>

============ END ============================================ ======== ============

=========== test.c ================ Br>

=============================================== ***** Copyright(c)**************************zh-CN"],null,[1],zh-TW"]]]

Copyright © Windowsの知識 All Rights Reserved