我正在为OS X上的USB设备开发内核驱动程序。添加setPowerState
处理程序后,我注意到在调用start
方法后立即调用了唤醒事件。当我加载驱动程序时,以及当我插入USB设备时,这在OS X 10.6上发生。
kernel.log显示了我在每次方法调用时所做的iolog条目:
...(attach device)
MyDriver: Initializing
MyDriver: Probing
MyDriver: Starting
MyDriver: Waking
...(detach device)
MyDriver: Stopping
MyDriver: Freeing
我可以期待每次开始后都会发生唤醒吗?
如果是这样,将我的大部分初始化代码放入setPowerState
处理程序是否合理,知道它将在启动后被调用?
OS X 10.4和10.5也是如此吗?
答案 0 :(得分:1)
是的,您可以,提供您的驱动程序已正确连接到Power Plane并正确初始化Power Managment(请参阅实施基本电源管理标题下的链接。
这不仅是合理的,而且是预期的。请注意,唯一不在setPowerState
且位于start
或其他地方的初始化代码是仅加载一次的内容,并且具有{{1中的睡眠和唤醒事件的电源状态处理代码}}。
有关详细信息,请参阅here。
Mac OS X版本中setPowerState的唯一区别在于,在Mac OS X 10.5及更高版本中,setPowerState在其自己的线程中调用,而10.4则作为现有线程的一部分调用。