2017-01-21 22 views
0

linuxのI2Cドライバの読み書き機能は、どのようにLinuxに伝えられていますか? linuxソースのI2C上のデバイス用のすべてのドライバでは、file_operations構造体は関数についてカーネルに伝えるために使用されません。さまざまな機能はどのようにカーネルに伝達されるのですか?file_operationsを使わずにユーザ空間から呼び出すことができますか?linuxのI2C読み書き機能

+1

可能な複製http://stackoverflow.com/questions/41492850/does-i2c-driver-need-to-be-implemented-just-like-any-other-character-device-driv – 0andriy

+1

確定的に複製答えはまったく同じです。また、OPが間違っている、正確に1つのクライアントドライバがfile_opsを使用しています:http://lxr.free-electrons.com/source/drivers/i2c/i2c-dev.c –

+0

可能な複製[i2cドライバは実装する必要がありますか他の文字デバイスドライバのように?](http://stackoverflow.com/questions/41492850/does-i2c-driver-need-to-be-implemented-just-like-any-other-character-device-driv) –

答えて

-1

linuxのI2Cドライバもファイル操作をサポートしています。アプリケーションからi2cを起動すると、

snprintf(filename, 19, "/dev/i2c-%d", adapter_nr); 
file = open(filename, O_RDWR); 

それは

static int i2cdev_open(struct inode *inode, struct file *file); 

static const struct file_operations i2cdev_fops = { 
    .owner   = THIS_MODULE, 
    .llseek   = no_llseek, 
    .read   = i2cdev_read, 
    .write   = i2cdev_write, 
    .unlocked_ioctl = i2cdev_ioctl, 
    .open   = i2cdev_open, 
    .release  = i2cdev_release, 
}; 

Linuxカーネルでは、I2C-dev.cファイルに呼び出します。しかし、あなたが読んでfile_operatoinせずにユーザー空間から書き込みたい場合は、あなたがあなたでたkobjectを使用することができますsysfsを介した読み書きのためのドライバ。ユーザ空間

static ssize_t module_store__status(struct kobject *kobj,struct kobj_attribute *attr,const char *buf, size_t count); 

からしかし、あなたがあなたのドライバにkbojectを作成する必要があり、これらのAPIを使用する前に、書き込みのため

static ssize_t module_show_status(struct kobject *kobj,struct kobj_attribute *attr,char *buf); 

:ユーザ空間からの読み出し

関連する問題