我已经编写了一个简单的char设备驱动程序(mydev),其中包含“open”文件操作。
在用户空间应用程序中,我打开此驱动程序节使用open(“/ dev / mydev”,O_RDONLY); open()系统调用在内部调用sys_open()。
我只想知道sys_open()函数如何调用我的驱动程序的打开文件操作的后续内容。 VFS如何处理它,它在内部调用哪个函数。
我在第12.5.1节中找到了解Linux内核本书的答案
步骤是,
i. Invokes lookup_dentry( ) to interpret the file pathname and gets the
dentry object associated with the requested file.
ii. Performs a series of checks to verify whether the process is permitted
to open the file as specified by the values of the flags parameter. If so,
returns the address of the dentry object; otherwise, returns an error code.
d。如果访问是用于写入,则检查inode对象的i_writecount字段的值。负值表示文件已经过内存映射,指定必须拒绝写访问(参见第15章第15.2节)。在这种情况下,返回错误代码。任何其他值指定实际写入文件的进程数。在后一种情况下,递增计数器。
即初始化文件对象的字段;特别是,将f_op字段设置为inode对象的i_op-> default_file_ops字段的内容。这为将来的文件操作设置了所有正确的功能。
F。如果定义了(默认)文件操作的open方法,则调用它。
G。清除f_flags中的O_CREAT,O_EXCL,O_NOCTTY和O_TRUNC标志。
H。返回文件对象的地址。