裝置作業

如需方法說明,請參閱標頭註解

掛鉤排序保證

掛鉤排序保證

驅動程式庫實作的掛鉤會由其他驅動程式和執行階段叫用。在某些情況下,這些呼叫可能會與其他 (甚至是相同) Hook 的呼叫平行發生。本節將說明您可能會依賴的排序屬性。

術語

本節會使用 C++ 執行模型中的「未排序」、「不確定排序」和「排序先於」等詞彙。

驅動程式初始化

該驅動程式庫的任何其他掛鉤之前,zx_driver_ops_t init 掛鉤都會完整執行。

驅動程式拆除

只有在發布這個驅動程式庫建立的所有裝置後,zx_driver_ops_t release 勾點才會開始執行。

驅動程式繫結

如果已啟用測試,只有在 run_unit_tests hook 之後,才會開始執行 zx_driver_ops_t bind hook。

裝置生命週期

當驅動程式成功叫用 device_add() 時,裝置生命週期就會開始。這可能發生在任何執行緒。裝置生命週期開始前或結束後,不會執行任何 zx_device_ops_t 勾點。

裝置的 release hook 開始執行時,裝置生命週期就會結束。

除非另有規定,否則 zx_device_ops_t 勾點彼此之間不會排序。

注意:這表示在呼叫 device_add() 後發生的任何程式碼 (即使在 bind 勾點中),都會與所建立裝置生命週期的結尾保持非循序關係。

裝置連線生命週期

裝置連線生命週期會在 zx_device_ops_t open hook 開始執行時啟動。如果有效裝置連線數為 0,系統就不會叫用任何 zx_device_ops_t read/write/message/close 勾點。

zx_device_ops_t close 掛鉤開始執行時,裝置連線生命週期就會結束。系統會先依序執行 read/write/message 勾點,再執行此勾點。

由於 read/write/message 勾點只會在驅動程式代管程序的主執行緒上執行,因此絕不會並行執行,但處理不同連線的待處理要求時,順序會不確定。

其他裝置 API

zx_device_ops_t get_sizeget_protocol 勾點與所有勾點 (包括自身並行呼叫) 都不會依序執行。但有一個例外,就是這些 hook 會在 release hook 之前排序。