我正在学习Linux设备驱动程序编程第3版,我对open方法有一些疑问,这是本书中使用的“scull_open”方法:
int scull_open(struct inode *inode, struct file *filp){
struct scull_dev *dev; /* device information */
dev = container_of(inode->i_cdev, struct scull_dev, cdev);
filp->private_data = dev; /* for other methods */
/* now trim to 0 the length of the device if open was write-only */
if ( (filp->f_flags & O_ACCMODE) == O_WRONLY) {
if (down_interruptible(&dev->sem))
return -ERESTARTSYS;
scull_trim(dev); /* ignore errors */
up(&dev->sem);
}
return 0; /* success */
}
我的问题是:
有人会写我的开放式方法的典型“非脂肪”实现吗?
ssize_t scull_read(struct file * filp,char __user * buf,size_t count,loff_t * f_pos){ struct scull_dev * dev = filp-> private_data; ...}
答案 0 :(得分:2)
用户空间打开功能正是您所考虑的,这是一个返回文件描述符int的系统调用。很多很好的参考资料,例如APUE 3.3。
设备驱动程序“open method”是file_operations结构中的一个函数。它与用户空间“文件打开”不同。安装设备驱动程序后,当用户代码打开设备(例如访问/ dev / scull0)时,将调用此“打开方法”。
答案 1 :(得分:0)