Linux kernel 内核的哪个部分帮助系统调用在运行时绑定到所需的驱动程序函数

Linux kernel 内核的哪个部分帮助系统调用在运行时绑定到所需的驱动程序函数,linux-kernel,kernel,linux-device-driver,system-calls,kernel-module,Linux Kernel,Kernel,Linux Device Driver,System Calls,Kernel Module,我看了很多文档和问题,还有我自己的幻灯片 但我想知道当我们打开任何文件时,可以是设备、常规、管道或套接字,代码的哪一部分绑定了系统调用,如打开、读取、写入到相关驱动程序文件的操作函数 我也能在SYSCALL_DEFINEx中找到函数的一些流程及其定义,然后sys_调用等,但由于无法连接点,直到驱动程序和绑定的fops结构,所以有点困惑,它是由udev完成的,任何其他内核恶魔,在探测驱动程序时,将单独定义任何其他函数或所有函数 正在寻找连接这些点的方法。系统调用通常调用虚拟fs层函数。因此,wri

我看了很多文档和问题,还有我自己的幻灯片 但我想知道当我们打开任何文件时,可以是设备、常规、管道或套接字,代码的哪一部分绑定了系统调用,如打开、读取、写入到相关驱动程序文件的操作函数

我也能在SYSCALL_DEFINEx中找到函数的一些流程及其定义,然后sys_调用等,但由于无法连接点,直到驱动程序和绑定的fops结构,所以有点困惑,它是由udev完成的,任何其他内核恶魔,在探测驱动程序时,将单独定义任何其他函数或所有函数


正在寻找连接这些点的方法。

系统调用通常调用虚拟fs层函数。因此,write系统调用将调用
vfs\u open
,它将调用
文件->f\u op->open
。这将是不同的功能,具体取决于文件类型。如果它是一个常规文件,它将依赖于文件系统,如
ext4\u file\u open
。在这种情况下,需要在
ext4
file\u operations
结构中查找实际函数名。类似的机制用于从文件系统层更改到驱动程序层。

进行反向工程,将了解这些文件操作是如何注册的。从那里,您将了解在系统调用期间如何使用正确的驱动程序。Trace
register\u chrdev

好的,已经提到了这些问题。但我要问的是,当我们打开任何文件时,让我们以/dev/sda和/dev/sdb为例,其中sda是硬盘驱动器,sdb是usb驱动器,它们在打开、读取和写入方面都有不同的实现。我想知道的是,当我们插入USB时,它会被探测并注册新文件,所以当我们打开sda硬盘时,会使用新的USB FOP,对于sdb,会使用新的USB FOP。那么谁负责选择相应的驱动程序呢。我也知道它是用不同的次要数字来区分的,但是谁来负责呢?在这种情况下,下层驱动程序负责在初始化时使用某种不同的register_*函数向上层注册。这将操作与上层结构绑定,并允许在稍后调用open或其他函数时选择适当的驱动程序。这是基本概念。但是我希望它能帮助你找到你想要的答案。。是的,需要更多的研究。我想为我的项目做点什么。无论如何谢谢你!这没有帮助,这是一个大海,每个司机都有不同的注册过程!