解析LinuxのI2Cドライバ

  

I2Cフィリップスが開発した2線式シリアルバスプロトコルです。組み込みシステムは、異なる通信コンポーネントは、PCボードは、異なるセンサとI2Cを介して通信することができることを可能に一般的に使用されます。これらのセンサは、典型的には、ファン速度、温度、及び全体の情報処理装置のハードウェアシステムを報告し、このプロトコルは、 OSの
を提供するために、RAMチップ上のDIMMをも使用することができます。

2.0 I2Cカーネルソースはカーネルではないが、2.4カーネルは、I2C、主にビデオドライバのサポートのビットを含みます。 2.6カーネル、カーネルへのI2Cコードの多くで。より簡単にカーネルコミュニティに受け入れられインターフェースを作る多くのカーネル開発者の努力に感謝します。一部のドライバは、それらが移植される前に、kernel.orgに置くが、時間の問題はありません、CVSツリーの外に残っています。

カーネルソースがいくつかの部分に分割されているI2C:I2Cコア、I2Cバスドライバ、I2CアルゴリズムドライバとI2Cチップドライバ。私たちは、I2Cコア部分を無視するが、駆動バスやアルゴリズムを作成する方法を懸念します。

I2Cバスドライバは、定義に/のlinux /i2c.hを含む説明i2c_adapter構造、構成ファイルバスドライバとI2Cバスを駆動します。バスドライバに必要な次のフィールドが提供されます:structモジュール*所有者、このドライバがサポートするI2Cクラスデバイスの-theタイプ通常これは、適切なモジュール参照counting.unsigned INTクラスを可能にする値(THIS_MODULE)に-set。値I2C_ADAP_CLASS_SMBUS.struct i2c_algorithmに設定*アルゴ; I2C_NAME_SIZEこの構造上のデータは、このI2Cバスコントローラを介して転送される詳細情報は、名前below.char提供される方法を記述する構造体i2c_algorithm構造;.に-setへ-aポインタI2Cバスドライバのわかりやすい名前。この値は、このI2Cアダプタに関連付けられたsysfsファイル名に表示されます。ドライブI2Cアダプタtiny_i2c_adap.cの次の例から

タグを
、LinuxのジャーナルFTPサイトであってもよく、 [ftp.ssc.com/pub/lj/listings/issue116/7136.tgz [1]]が得られます。構造体i2c_adapterが設けられているかを確認する:= {.owner = THIS_MODULE、の.class = I2C_ADAP_CLASS_SMBUS、.algo =& tiny_algorithm、.nameの="小さなアダプタ"};静的構造体i2c_adapterのtiny_adapter

を登録I2Cアダプタは、ドライバは、構造体i2c_adapterパラメータがポインタである、機能i2c_add_adapterを呼び出します。 RETVAL = i2c_add_adapter(& tiny_adapter);

I2Cアダプタを記録するために、運転者がi2c_del_adapter呼び出し、構造体i2c_adapterポインタパラメータ。このように:i2c_del_adapter(& tiny_adapter);

I2CアルゴリズムDriversI2Cアルゴリズムは、独自の定義とアルゴリズムを使用するためにI2Cバスとの対話が可能、多くのI2Cバスの運転手の間でI2Cバスを駆動します。それらが密接に接続されているので、バスの運転手は、どのように対話し、ハードウェアの特定の種類を達成するために。いくつかのI2Cバスの運転手のために、多くのI2Cアルゴリズムが書き込まれています。いくつかの例:ITEアダプタ、ディレクトリ・ドライバ/I2C /I2C-ALGO-ite.c; IBM PPCディレクトリ・ドライバ/I2C /I2C-ALGO-ibm_ocp.c 405のアダプタ、ディレクトリ・ドライバにおける一般的なI2Cのビットシフトアルゴリズム/I2C /I2C-ALGO-bit.c;これらのすべては、アルゴリズムを書かれている、独自の機能を持って、I2Cバスの運転手は、使用するために登録する必要があります。この点でより多くの情報を取得するには、カーネルのソースディレクトリ・ドライバ/I2C /I2C-アルゴを表示することができます - 。* C.

我々は自身のドライブにI2Cアルゴリズムを作成し、駆動アルゴリズムはi2c_algorithm構造が定義され、構造が挙げ/リナックス/i2c.hで定義され、以下に一般的に使用されるフィールドの説明である:文字名[32];: algorithm.unsigned INT IDの名前;この構造は、これらの異なるタイプが含ま/リナックス/I2C-id.hファイルで定義された文字で始まるれる定義アルゴリズムの種類の説明I2C_ALGO_
INT(* master_xfer)(構造体i2c_adapter * ADAP、構造体i2c_msgのMSG []、int型NUM):このアルゴリズムドライバが直接レベルのアクセスI2Cを行うことができれば、関数ポインタを設定することが設定されている場合、この関数が呼び出されます。いつでもI2Cチップドライバは、チップデバイスと通信したい。それがNULLに設定されている場合、smbus_xfer関数が代わりに使用されている。

のint(* smbus_xfer)(構造体i2c_adapter * ADAP、U16のADDR、符号なしの短いフラグ、char型のREAD_WRITE、U8コマンド、int型のサイズ、組合i2c_smbus_data *データ);:。このアルゴリズムドライバはSMBバスは、ほとんどのPCI-BASにアクセスして行うことができれば関数ポインタを設定します編I2Cバスドライバは、これを実行することができ、そして、彼らは、この関数ポインタを設定する必要があります。それが設定されている場合は、この機能はI2Cチップドライバはチップデバイスと通信したいときに呼び出されます。それはNULL、master_xfer機能に設定されている場合使用されているinstead.u32(*機能)(構造体i2c_adapterの*);:。種類の読み込み、I2Cアダプタドライバが行うことができます書き込みかを決定するためにI2Cコアによって呼び出される関数ポインタ

私たちI2Cアダプタ構造参照変数tiny_algorithm i2c_adapter、構造は次のように定義されている、で駆動:静的構造体i2c_algorithmのtiny_algorithm = {.nameの="小さなアルゴリズム", ID = I2C_ALGO_SMBUS、.smbus_xfer = tiny_access、.functionality = tiny_func ,.};機能tiny_func非常にこのアルゴリズムの簡単な、I2CコアはI2Cメッセージの種類を伝えることができます。 | {戻りI2C_FUNC_SMBUS_QUICKを静的U32のtiny_func(構造体i2c_adapterの*アダプタ):このドライブでは、我々は、I2Cメッセージの多くの異なる種類をサポートしたいです I2C_FUNC_SMBUS_BYTE | I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_BLOCK_DATA;} I2C_FUNC_を開始するように定義挙げ/リナックス/i2c.h内のすべてのI2Cメッセージタイプ。

対話とI2CバスへのI2Cクライアントドライバがある場合はtiny_accessの関数が呼び出されます。この例の機能のために非常に簡単です、それだけでI2Cチップ呼び出し元に正常に戻っている間、syslogにドライバレコードを要求。

Copyright © Windowsの知識 All Rights Reserved