驱动程序运行程序

在驱动程序主机环境中运行的组件。

使用驱动程序运行程序

如需使用驱动程序运行程序,组件的清单必须包含类似于以下内容的 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 字段互斥。对于驱动程序,只有其中一个可以为 true。

默认调度程序选项

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 时,如果驱动程序意外停机,系统会将节点从驱动程序框架的节点拓扑中移除。

Service Connect 验证

service_connect_validation 字段由驱动程序 SDK 的 DriverBase 使用,用于在服务功能连接上运行可用性验证。

它通过查看可供驱动器绑定节点使用的优惠,并确保所有 incoming()->Connect() 请求都尝试连接到有效的优惠来实现此目的。

在单个父级的情况下,这只会确保该服务可供节点使用,因为当用户未指定任何实例时,所有请求都应发送到 "default" 实例。

在复合情况下,这可确保请求的实例名称和 "default" 实例名称用例具有来自该父级的对应优惠。

如果这些验证失败,Connect() 方法将立即返回 ZX_ERR_NOT_FOUND,而不是建立连接,因为只有在对其调用双向方法时,连接才会失败。

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

如果未设置此字段,则默认停用验证。

深入阅读

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