我想在没有连接交流适配器的情况下使用Macbook air在翻盖模式下。但是,当我关上盖子时,Mac OS会强制系统进入睡眠状态。重写Mac XNU内核而不重新编译源代码
我发现XNU内核的这部分从苹果的开源可能与此行为:
由于IOKit /核心/ IOPMrootDomain.cpp
...
6362 /*
6363 * Evaluate clamshell and SLEEP if appropiate
6364 */
6365 if (eval_clamshell && clamshellClosed)
6366 {
6367 if (shouldSleepOnClamshellClosed())
6368 privateSleepSystem (kIOPMSleepReasonClamshell);
6369 else
6370 evaluatePolicy(kStimulusDarkWakeEvaluate);
6371 }
...
3061 //******************************************************************************
3062 // sleepOnClamshellClosed
3063 //
3064 // contains the logic to determine if the system should sleep when the clamshell
3065 // is closed.
3066 //******************************************************************************
3067
3068 bool IOPMrootDomain::shouldSleepOnClamshellClosed(void)
3069 {
3070 if (!clamshellExists)
3071 return false;
3072
3073 DLOG("clamshell closed %d, disabled %d, desktopMode %d, ac %d sleepDisabled %d\n",
3074 clamshellClosed, clamshellDisabled, desktopMode, acAdaptorConnected, clamshellSleepDisabled);
3075
3076 return (!clamshellDisabled && !(desktopMode && acAdaptorConnected) && !clamshellSleepDisabled);
3077 }
当然,我可以编译内核,但我怀疑它是否是最新的Mavericks内核。所以我想知道是否可以通过插入动态库来替代内核空间函数,就像我们为用户空间函数所做的那样。
通读,你是正确的,clamshellDisabled是真的如果外部显示出现。我会尝试启用调试标志本周末,看看我能否找到任何东西,我猜可能是内核签名。我不确定如何实现option2,所以我最终可能会编译内核,无论如何,感谢您的指导,我对于快速响应感到非常惊讶,我相信这个特性在Apple中非常流行笔记本电脑客户 –
'mach_kernel'完全没有签名:'codesign -v/mach_kernel'表示''/ mach_kernel:代码对象根本没有签名',所以修改/替换它不成问题。 – pmdj