驱动程序绑定

如需为 Fuchsia 系统中的设备提供服务,驱动程序必须绑定到代表设备的节点。驱动程序管理器负责维护节点的拓扑,其中每个节点表示对系统中硬件或虚拟设备的访问。当驱动程序与节点匹配时,驱动程序可以绑定到该节点。绑定到节点后,驱动程序就可以开始为该节点所代表的设备提供服务。例如,USB 键盘驱动程序可以绑定到表示键盘设备的节点。

为了确定哪些驱动程序可以绑定到哪些节点,每个驱动程序都有绑定规则,并且每个节点都有一组节点属性。驱动程序的绑定规则描述了驱动程序能够有效提供的节点的资格。当驱动程序框架尝试将驱动程序与节点匹配时,系统会将每个未绑定节点的属性与驱动程序的绑定规则进行比较。如果节点属性满足驱动程序的绑定规则,驱动程序框架将允许驱动程序绑定到节点。

绑定序列

当 Fuchsia 系统启动时,驱动程序管理器会尝试构建一个节点拓扑来代表系统中的所有硬件和虚拟设备,而驱动程序索引则枚举系统已知的所有驱动程序。

在 Fuchsia 系统初次启动期间,会发生以下事件:

  1. (从根节点及其驱动程序开始)驱动程序请求驱动程序管理器创建新的子节点。
  2. 驱动程序管理器会要求驱动程序索引找出哪个驱动程序与此节点的属性最匹配:
    1. 驱动程序索引会将每个已知驱动程序的绑定规则与节点的属性进行比较。
    2. 驱动程序索引会将匹配驱动程序的网址返回给驱动程序管理器。
  3. 驱动程序管理器将驱动程序绑定到节点:
    1. 驱动程序管理器为驱动程序创建(或分配)驱动程序主机。
    2. 驱动程序主机会启动驱动程序的实例。
  4. 正在运行的驱动程序可能决定创建子节点。
    1. 此过程从第 1 步开始重复。

首次运行扫描和绑定之后,每当出现新的驱动程序时(例如,将新的驱动程序加载到系统),驱动程序管理器都会将拓扑中的所有未绑定节点发送到驱动程序索引,以便与新驱动程序进行匹配。当某个节点匹配时,驱动程序管理器会将这个新驱动程序绑定到该节点,驱动程序的实例会放置在驱动程序主机中,而驱动程序主机会开始将设备的功能提供给系统中的其他 Fuchsia 组件。

如需详细了解绑定规则,请参阅之前为驱动程序框架版本 1 (DFv1) 编写的驱动程序绑定

开发板驱动程序和 USB 设备

acpi这些设备通过由驱动程序索引编排的常规绑定进程绑定到驱动程序。从此时开始,这些驱动程序(绑定到主板驱动程序的子节点)便会动态查询硬件以获取其他信息。根据这些信息,驱动程序可能会发现要添加到拓扑中的新设备。随着更多设备被发现并引入拓扑,此过程以递归方式进行。