我经历了很多文档和问题,例如how system call implemented,disassemble a system call以及幻灯片共享Linux kernel tour我自己的幻灯片 但我想知道我们何时打开任何文件,可以是设备,常规,管道或套接字,这部分代码绑定系统调用,如打开,读取,写入其相关的驱动程序file_operation函数。
此外,我能够在SYSCALL_DEFINEx中找到函数及其定义的一些流程,然后是sys_calls等,但由于无法连接点直到fops结构的驱动程序和绑定,所以有点困惑,是否由udev完成,探测驱动程序时,任何其他内核恶魔,任何其他函数或所有函数都是单独定义的。
希望能够将这些点连接起来。
答案 0 :(得分:1)
系统调用通常调用虚拟fs层功能。因此,写入系统调用将调用vfs_open
,它将调用file->f_op->open
。根据文件类型,这将是不同的功能。如果它是常规文件,则它将与文件系统相关,如ext4_file_open
。在这种情况下,需要在file_operations
ext4
结构中查找实际的函数名称。类似的机制用于从文件系统层更改为驱动程序层。
答案 1 :(得分:0)
进行逆向工程,将了解这些文件操作是如何注册的。从那里你将知道在系统调用期间如何使用正确的驱动程序。跟踪register_chrdev