I2C中的I2C读写函数

时间:2017-01-21 19:59:52

标签: linux-kernel linux-device-driver i2c

linux的I2C驱动程序中的读写函数如何与linux通信?在linux源代码中I2C设备的所有驱动程序中,file_operations结构不用于告诉内核有关这些函数的信息。如何将各种功能传达给内核,以便可以在不使用file_operations的情况下从用户空间调用它们?

1 个答案:

答案 0 :(得分:-1)

linux中的I2C驱动程序也支持文件操作。因为当你从你的应用程序开始打开i2c时;

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

它将调用linux内核中的i2c-dev.c文件

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,
};

但是如果你想在没有file_operatoin的情况下从用户空间读取和写入,那么你可以使用驱动程序中的kobject来通过sysfs进行读写。

从用户空间阅读:

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

从用户空间写作

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

但在使用这些API之前,您需要在驱动程序中创建kboject。