linux – 操作系统如何知道要调用哪个设备驱动程序?

我一直在打开和写入/读取文件/设备文件并一直读取操作系统,但从未理解设备驱动程序不可避免地被调用的流程.

例如,当我们写入stdout时,fd = 1.
当我写这篇文章时,我明白操作系统会调用已经打开的特定设备文件的设备驱动程序,但我不明白的是我们如何到达设备驱动程序本身.

>甚至首先创建设备文件(即stdout)需要什么?安装?内核模块加载?
>(后续[1])因此,如果我有一个外围设备,例如连接到我的计算机的单个LED灯,并且已经安装了LED的正确设备驱动程序,并且/ dev / singleled中创建了设备文件,那么当我打开/ dev / singleled?

(特别)

>当我写入设备文件时,操作系统如何知道要为此设备文件调用哪个设备驱动程序?
>当我们在此设备文件上打开时,我们是否在文件描述符中存储信息?

我真的想了解这个设置是如何创建的.
提前感谢大家

最佳答案
在简短的概述术语中,设备节点由主要和次要编号标识,您可以使用ls -l之类的命令查看这些编号,如果从用户空间创建它们,则需要将其传递给mknod等命令.

在内核方面,驱动程序可以为这些数字的范围注册自己.

然后问题减少到管理适度大小的关联数据表并使用它来查找注册以处理用户空间调用的适当驱动程序和方法.

您还提到了LED,但这些LED通常作为sysfs节点处理,即/ sys / class / LED / xxx,它是一个独特的接口,通过匹配名称而不是主/次数来操作.

您可能会发现实际查看一些设备(包括它们作为/ dev或/ sys中的节点以及相关的内核代码)会很有帮助.编写用于解释概念的示例/教程驱动程序可能是最清晰的.

转载注明原文:linux – 操作系统如何知道要调用哪个设备驱动程序? - 代码日志