[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
writing devicedrivers
Hello,
I'm reading Linux device drivers 2nd edition by Alessandro Rubini & Jonathan Corbet.
there is a piece of code in chapter 3 (http://www.xml.com/ldd/chapter/book/ch03.html) I don't understand:
int scull_open(struct inode *inode, struct file *filp)
{
Scull_Dev *dev; /* device information */
int num = NUM(inode->i_rdev);
int type = TYPE(inode->i_rdev);
/*
* If private data is not valid, we are not using devfs
* so use the type (from minor nr.) to select a new f_op
*/
if (!filp->private_data && type) {
if (type > SCULL_MAX_TYPE) return -ENODEV;
filp->f_op = scull_fop_array[type];
return filp->f_op->open(inode, filp); /* dispatch to specific open */
}
If I read correctly the open syscall will set filp->private_data to NULL. Since
open in only used once to get a filedescriptor (I presume) the code in the if-block will never be
excuted and there will be no dispatching for different minor devicefiles.
Anyone who can tell me where I'm going wrong?
Richard
--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive: http://mail.nl.linux.org/kernelnewbies/
FAQ: http://kernelnewbies.org/faq/