驱动程序绑定

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

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

绑定序列

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

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

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

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

如需详细了解绑定规则,请参阅绑定规则教程。

板载驱动程序和 USB 设备

虽然驱动程序通常绑定到设备,但有些驱动程序(例如 PCI 和 ACPI)是 绑定到 板载 {101

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