devtmpfsとは
devtmpfsは、ドライバへの制御に関連するインターフェースを上位層に提供する為のファイルをRAM上で提供する仕組みです。
使い方
ltr578_i2c_probeから呼ばれるmisc_registerはLinuxカーネル内でmiscデバイス(Miscellaneous Device)を登録する為に使用される関数です。
kernel/mediatek/4.4/drivers/misc/mediatek/sensors-1.0/alsps/ltr578/ltr578.c
err = misc_register(<r578_device);
static const struct file_operations ltr578_fops = {
.owner = THIS_MODULE,
.open = ltr578_open,
.release = ltr578_release,
.unlocked_ioctl = ltr578_unlocked_ioctl,
};
static struct miscdevice ltr578_device = {
.minor = MISC_DYNAMIC_MINOR,
.name = "als_ps",
.fops = <r578_fops,
};
miscデバイスは、特定のデバイスクラスに分類されない雑多なデバイスを表します。misc_registerを呼び出すことで、カーネルは指定されたデバイス情報に基づいてmiscデバイスを登録します。この登録が成功すると、devtmpfs上に対応するファイルが作成され、上位層から制御できるようになります。
実際の制御は、misc_registerの引数に指定されている構造体である、ltr578_fopsに登録されているコールバック関数に記載されています。
最後に
devtmpfsのファイルは/dev配下に作成されます。近接照度センサドライバのmisc_register(<r578_device)で作られたファイルは、以下に作成されています。
maverick:/ $ ls /dev/als_ps
/dev/als_ps
このファイルを通した制御方法は次章で説明します。コールバック関数を登録しているunlocked_ioctl等はLinux特有の話の為、この時点ではよく分からないかもしれませんが、次章で説明するのでご了承下さい。
コメント