I 2 Cサブシステムのまとめ


I 2 Cサブシステムの構造はカーネル全体に適合した駆動モデルである.
I 2 Cサブシステムは主に4大部品を含む
1.i2c bus
2.adapter device
3.client device
4.adapter driver
ここで、i 2 c busは管理用であり、通信バスではない.i 2 c busに掛かっています
adapter(ホスト)device、client(スレーブ)device、adapter driver.
操作を統一するために、adapter device、client device、adapter driverは直接ではありません.
登録関数でi 2 c busに登録します.platformによって実現されます
まずadapter関連情報を含むplatform_デバイスはplatform busに登録されています.
それからplatform_デバイス対応platform_driverはplatformに登録されています.
ここでplatform_デバイスとplatform_driverはマッチングに成功し、呼び出されます
platform_driverのprobe関数.
最後にprobe関数でi 2 c busにadapter deviceを登録する操作を実現する.
一方、adapter driverがi 2 c busを考えている登録操作は、i 2 c文字駆動登録で実現される.
システムはi 2 cデバイスを文字デバイスとして統一して処理し,汎用fopsで動作する.
adapter driverドライバ登録後、/devでadapter対応のデバイスファイルを作成します.
すべてのadapterがシステム呼び出しによって呼び出されるのは、同じ文字デバイス操作セットfopsの方法である.
では、異なるadapterが使用する操作方法は間違いなく異なりますが、これはどのように実現されますか?実現方法は具体的に以下の通りである.
まず、システム呼び出しopen()によって汎用fopsに呼び出されるopen()メソッドi 2 cdev_open().
i 2 cdev_Open()の最初のパラメータに基づいて、open(「/dev/i 2 c-x」)の最初のパラメータに基づいてadapterのデバイス番号を見つけることができます.
このデバイス番号を見つけると具体的なadapterが見つかり、adapterは登録を駆動するときにadapterのアルゴリズムを初期化しました.
i2c->adap.algo    = &s3c24xx_i2c_algorithm;

platform_driverのprobeメソッドで初期化しました.
このalgoこそ、異なるi 2 c adapterの送信データ機能を実現するために使用される.
そしてホストの送信について
ホストの送信はmsg構造により実現される.
送信データはmsgに保存する.bufでは、送信データの長さなど
スレーブアドレス等の情報はmsgに保存する.len msg.addrなどで.
システム送信はmsg本数に基づいて情報を送信し、msg間でstop信号は送信されない
その後、最後のmsg送信が完了するとstop信号が送信される.
一方,システム実装のwriteとreadの2つの動作は,固定するたびに1つのmsgしか送信できない.
write readを1回呼び出すとstop信号が生成されます.
これは、at 24 c 02のrandom read動作など、いくつかのデバイスのいくつかの動作にとって非合法なタイミングである.
マルチ送信msgはioctlで実現できるため、at 24 c 02のrandom readは
ioctl操作を実現します.