2016-05-29 7 views
0

tmp102 sensorthermo3 clickがあります。tmp102センサー・ドライバーのユーザー空間アプリケーション

それからデータを読み取るために、次のように私は、I2Cを使用してユーザ空間のアプリケーションを書かれている:

fd = open("/dev/i2c-0", O_RDWR)) 
ioctl(fd, I2C_SLAVE, 0x48) 
read(fd, &buf, 2) 

をしかし、私はlinux source codeでそのドライバを見つけました。

だから私は疑問に思って:

1)私は、このドライバのAPIの(手段ドライバのデバイスファイルを使用して)を使用してユーザー空間のアプリケーションを書くことができますか?

2)このドライバを使用せずにI2Cユーザスペースアプリケーションを動作させる方法(i2cユーザスペースアプリケーションを使用しているときにこのドライバがカーネルで有効になっていないため)またはこれがI2Cの仕組みですか?

答えて

0

1)これは火のようなデバイスです。使用するデバイスファイルはありません。代わりにapiは/sys/class/hwmonにあります。特に、ファイルを読むには

2)/dev/i2c-0を使用すると、i2cバス上で直接通信し、カーネルドライバを実質的にバイパスすることができます。一般的なLinuxカーネル抽象化を使用するのではなく、使用するデバイスの詳細(読み込むためのレジスタとその意味...)を知っておく必要があります。

+0

は、/ sys/class/hwmon/hwmonX/tempX_inputからデータを読み取ることは、i2cバスを読み取るのに比べて理想的です。 – Patrick

+0

デバイスドライバ - >ハードウェアモニタリングサポート - > tmp102をカーネルで有効にしましたが、/sys/class/hwmonの下に作成されたファイル。しかし、ここに/ sys/bus/i2c/drivers/tmp102というファイルがいくつか作成されています – Patrick

+0

おそらく、必要なものすべてを有効にしていないかもしれません。イベントに基づいてドライバを読み込むためのメカニズムを提供するudevについて忘れないでください。いつもそうはないと思います(古い、つまり非ACPIの非DTプラットフォームでは、組み込みコード、または手動で)。 – 0andriy

0

ユーザーレベルアプリケーションは、ハードウェアと対話できません。システムコール(ioctl、オープン、読み書きなど)とSysfs(sysfsは仮想ファイルシステム)によって通信できます。

1: - あなたのデバイスはhwmomデバイスです。あなたのドライバは "tmp102"です。ドライバこれらの3つを公開してください。ユーザレベルアプリケーションのsysfsエントリ。temp1_input,temp1_max_hystおよびtemp1_max

SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, tmp102_show_temp, NULL , 0); 
SENSOR_DEVICE_ATTR(temp1_max_hyst, S_IWUSR | S_IRUGO, tmp102_show_temp, tmp102_set_temp, 1); 
SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, tmp102_show_temp, 
      tmp102_set_temp, 2); 

あなたは/ SYS /クラス/ hwmom/TMP102/temp1_inputのsysfsファイルを読み込むことができます。 これらの2つのsysfsファイル/ sys/class/hwmom/tmp102/temp1_max_hystとsys/class/hwmom/tmp102/temp1_maxを読み書きできます。

2: -/devのファイルは、実行時にUDEVが作成する実際のデバイスファイルです。デバイスファイルは、通常のファイルのようにファイルシステムに表示されるデバイスドライバのインターフェイスです。ドライバが他のデバイスファイルを公開しています。 thermal_zone_of_sensor_register(hwmon_dev、0、hwmon_dev、& tmp102_of_thermal_ops)。/dev/hwmom_devノードがあります。

ユーザレベルのアプリケーションは、i2cデバイスまたはハードウェアのいずれも直接通信できません。 Linuxカーネルには制限があります。アプリケーションは、いずれかのデバイスを制御するためのインタフェースとしてドライバを必要とします。

関連する問題