驱动程序绑定

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

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

绑定序列

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

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

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

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

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

板驱动程序和 USB 设备

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