设备操作

请参考header comments 中的方法描述。

钩子函数顺序保证

Hook ordering guarantees

驱动实现的钩子函数将被其他驱动和运行时调用。在某些使用场景中,这些调用会和其他或者甚至相同钩子函数同时发生。本节内将会描述你可能依赖的顺序属性。

术语表

本节内使用术语 乱序不确定序列序列前 作为在 C++ 运行模型中使用。

驱动初始化

zx_driver_ops_t init 钩子函数将在驱动中其他任意钩子函数之前完成运行。

驱动卸载

zx_driver_ops_t release 钩子函数仅在驱动创建的所有设备都完成释放后开始运行。

驱动绑定

如果测试被打开, zx_driver_ops_t bind 钩子函数将仅在 run_unit_tests 钩子函数后才开始运行。

设备生命周期

在驱动成功调用device_add()时,设备生命周期就此开始。这可能发生在任意线程中。在设备生命周期开始之前或者结束之后, zx_device_ops_t 钩子函数都不会运行。

设备生命周期在设备 release 钩子函数开始运行时结束。

除非另有规定,否则zx_device_ops_t钩子函数彼此之间是没有顺序的。

注意:这意味着调用device_add()后,任何代码都可能运行,甚至在bind钩子函数中,对于所创建的设备生命周期的结束也是没有顺序的。

设备连接生命周期

zx_device_ops_t open钩子函数开始运行时,设备连接生命周期开始。如果存活设备连接数为0的话,zx_device_ops_tread/write/message/close 钩子函数都不会被调用。

zx_device_ops_t close钩子函数开始运行时,设备连接生命周期结束。任意read/write/message 钩子函数在此之前顺序运行。

因为read/write/message钩子函数只会在驱动主机的主线程中运行,它们将永远不会同时运行,但是从不同的连接中的外部请求处理将以不确定的序列执行。

Misc设备API

zx_device_ops_tget_sizeget_protocol 钩子函数与所有钩子函数相比是乱序的(包括对自己的并发性调用)。 但是唯一例外为在 release 钩子函数之前被排序。