如需方法說明,請參閱標頭註解。
掛勾保證
其他驅動程式和執行階段會叫用驅動程式庫實作的掛鉤。在某些情況下,這些叫用可能會與其他叫用可能同時發生,甚至是同一個掛鉤。本節將說明您可能依賴的排序屬性。
術語
本節使用的詞彙將與 C++ 執行模型相同,而使用「非序數」、「不確定順序」和「先後順序」的字詞。
驅動程式初始化
zx_driver_ops_t init 掛鉤會在該驅動程式庫的其他掛鉤之前完全執行。
駕駛撕裂
只有在這個驅動程式庫建立的所有裝置都已釋出後,zx_driver_ops_t 版本掛鉤才會開始執行。
驅動程式繫結
如果啟用測試,zx_driver_ops_t bind 掛鉤只會在 run_unit_tests 掛鉤之後開始執行。
裝置生命週期
當部分驅動程式庫成功叫用 device_add() 時,裝置生命週期就會開始。這可能會在任何執行緒上發生。在裝置的生命週期開始前或結束後,系統不會執行 zx_device_ops_t 掛鉤。
裝置的版本掛鉤開始執行後,裝置生命週期就會結束。
除非另有指定,否則 zx_device_ops_t 掛鉤不會依序相互對應。
注意:這表示呼叫 device_add() 後發生的程式碼 (即使是在 bind 掛鉤中),對於建立裝置的生命週期結束都會維持不變。
裝置連線生命週期
當 zx_device_ops_t 開啟掛鉤開始執行時,裝置連線生命週期即開始。如果使用中的裝置連線數為 0,則不會叫用任何 zx_device_ops_t read/write/message/close 掛鉤。
zx_device_ops_t close 掛鉤開始執行時,裝置連線生命週期就會結束。系統會先對任何 read/write/message 掛鉤的執行作業進行排序。
由於 read/write/message 掛鉤只會在驅動程式代管程序的主要執行緒上執行,因此一律不會同時執行,但處理來自不同連線的待處理要求會以明確順序進行。
其他 Device API
針對所有掛鉤 (包括本身的並行叫用),zx_device_ops_t get_size 和 get_protocol 掛鉤則不受順序影響。唯一的例外是,這些意圖是在 release 掛鉤之前的順序。