驱动程序运行程序

使用驱动程序运行程序

如需使用驱动程序运行程序,组件的清单必须包含类似于以下内容的 program 块:

{
    program: {
        runner: "driver",
        binary: "driver/example.so",
        bind: "meta/bind/example.bindbc",
    }
}

驱动程序组件的 program 代码块至少需要以下字段:

  • runner - 此字段必须设置为字符串 driver
  • binary - 组件软件包中驱动程序二进制输出的路径。
  • bind - 组件软件包中已编译的绑定程序的路径。

选填字段

除了必填字段之外,驱动程序运行程序还接受一组可选字段,用于指定元数据或配置驱动程序组件的运行时环境。

主机托管

如果 colocate 字段设置为字符串 true,驱动程序将被放置在与其父驱动程序相同的驱动程序主机中(如果可能)。不过,这是建议性的。驱动程序管理器可能仍会将驱动程序放在单独的驱动程序主机中,例如,如果父设备设置了 MUST_ISOLATE。在 DFv1 中,如果父设备是复合设备,则驱动程序会始终共置;仍然可以通过在复合的主要 fragment 上设置 MUST_ISOLATE 来强制执行隔离。

{
    program: {
        runner: "driver",
        binary: "driver/example.so",
        bind: "meta/bind/example.bindbc",
        colocate: "true"
    }
}

如果未指定 colocate 字段,则其值默认为字符串 false

colocatehost_restart_on_crash 字段互斥。对于驾驶员来说,只能有一个情况是正确的。

默认调度程序选项

default_dispatcher_opts 字段提供了在创建驱动程序的默认调度程序时使用的选项,例如:

{
    program: {
        runner: "driver",
        binary: "driver/example.so",
        bind: "meta/bind/example.bindbc",
        default_dispatcher_opts: [ "allow_sync_calls" ]
    }
}

此字段中的选项对应于此 types.h 文件中定义的标志。目前,支持的选项包括:

  • allow_sync_calls:此选项表示调度程序可能不会与其他驱动程序共享 Zircon 线程。此设置允许驱动程序对调度程序进行同步 Banjo 或 FIDL 调用,而不会出现死锁的情况。

后备

如果 fallback 字段设置为字符串 true,则只有在所有基础驱动程序软件包都编入索引后,此回退驱动程序才会尝试绑定。此外,如果此驱动程序与节点匹配,且非回退驱动程序与同一节点匹配,则非回退驱动程序将改为绑定到该节点。

{
    program: {
        runner: "driver",
        binary: "driver/example.so",
        bind: "meta/bind/example.bindbc",
        fallback: "true"
    }
}

如果未指定 fallback 字段,则其值默认为字符串 false

下一个 vDSO

如果 use_next_vdso 字段设置为字符串 true,则驱动程序将被放在驱动程序主机中,并动态关联下一个 vdso。驱动程序还必须将 colocate 设置为 true,否则此字段会被忽略。

{
    program: {
        runner: "driver",
        binary: "driver/example.so",
        bind: "meta/bind/example.bindbc",
        colocate: "true"
        use_next_vdso: "true"
    }
}

如果未指定 use_next_vdso 字段,则其值默认为字符串 false

设备类别

device_categories 字段提供指示驱动程序控制的设备类别的元数据,例如:

{
    program: {
        runner: "driver",
        binary: "driver/example.so",
        bind: "meta/bind/example.bindbc",
        device_categories: [
            { category: "board", subcategory: "i2c" },
            { category: "sensor", subcategory: "temperature" },
        ]
    }
}

这些元数据用于确定驱动程序在其认证过程中将进行的测试。请参阅 FHCP 架构中设备类别和子类别的完整列表。

主机崩溃时重启

host_restart_on_crash 字段会告知驱动程序框架,如果驱动程序意外停机,应重启驱动程序绑定到的节点的驱动程序主机。

其中包括:

  • 驱动程序主机崩溃。
  • 驱动程序在运行时会关闭其客户端以连接到 fuchsia.driver.framework/Node 协议。

由于这会影响驱动程序主机,因此只能由主机的根驱动程序进行设置。 根驱动程序是指为其创建主机的驱动程序。当且仅当 colocate 字段设置为 false 时,才会出现这种情况。

因此,host_restart_on_crashcolocate 是互斥的。对于驱动程序来说,其中只有一个可以是 true

{
    program: {
        runner: "driver",
        binary: "driver/example.so",
        bind: "meta/bind/example.bindbc",
        host_restart_on_crash: "true"
    }
}

如果未指定 host_restart_on_crash 字段,则其值默认为字符串 false

host_restart_on_crashfalse 时,如果驱动程序意外关闭,系统会从驱动程序框架的节点拓扑中移除该节点。

深入阅读

如需详细了解驱动程序如何绑定,请参阅驱动程序绑定