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