デバイスドライバは、オペレーティングシステムカーネルとマシンハードウェアの間のインタフェースであり、デバイスドライバはアプリケーションのハードウェア詳細を保護するため、アプリケーションビューではハードウェアデバイスデバイスファイルだけで、アプリケーションは通常のファイルと同じようにハードウェアデバイス上で動作できます。デバイスドライバはカーネルの一部で、その主な機能は、デバイスの初期化と解放、カーネルからハードウェアへのデータ転送、およびハードウェアからのデータの読み取り、アプリケーションからデバイスファイルへのデータの読み取り、およびアプリケーションの返却です。検出および処理装置で要求されたデータとエラー。
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"]]]
シェルを作成するときには、次のようなシナリオがあります。
例:passwdファイルをバックアップし、それをbak_path =&rdquo; /mnt /sql_bak /&rdquo;にバックアップします。
そしてファイル名はbakですか?
このようにシェルに慣れてください。
#!/bin /shbak_path =&quot; /mnt /bak /&quot; cp $ /etc
Grep java
Linuxのコマンドライン初心者でもベテランでも、これらのヒントは役に立ちます。時間の節約、効率の向上、効率の向上。 Interest&hellip ;. 履歴コマンド これらのテクニックの大部分は
以前にコンパイルされた通常のプロジェクト(IAR5.5で確立)を開くと、コンパイラは次のエラーを表示します(現在使用されているIAR6.3)。 エラー[Pe147]:宣言は、「__ interwork
LDM /STM命令は、主にフィールド保護、データコピー、パラメータ転送などに使用されます。 STMFD命令 STMFD Rn {!}、{reglist} {^} STMFD命令説明 例: S
= /dev /zero of =の場合、ddの意味は何ですか? Linuxでのddコマンドは、詳細な説明
ヒント:Linuxで暗号化暗号化パスワードを生成する
Red Hat Kickstartスクリプトやuseraddなどの手段で何かを書くとき、生成されたパスワードフォーマットを暗号化するためにcryptコマンドを使う必要があることがよくあります。それで、この形式でパスワードを生成する他の方法はありますか?実際、多くの方法があります。 mkpasswdコマンドを使用することができます。このコマンドは、暗号化形式でパスワードを生成するために使用されます。