问题特征
1. 开机出现禁行 2. OsxAptioFixDrv-64.efi 出现错误: - Error - requested memory exceeds our allocated relocation block
复制代码3. OsxAptioFix2Drv-64.efi 出现错误: - Error allocating 0x800 pages at ... alloc type 2
- Error loading kernel cache (0x9) // 或者(0xe)
- Boot failed sleeping for 10 seconds before exiting...
复制代码
原因 1. 系统请求存放kernel cache的空间大于OsxAptioFixDrv-64.efi所分配的内存空间.
解决方法 1. 提高OsxAptioFixDrv-64.efi默认分配的空间. 修改OsxAptioFixDrv.c - #define KERNEL_BLOCK_NO_RT_SIZE_PAGES 0x6000
复制代码或者 - #define KERNEL_BLOCK_NO_RT_SIZE_PAGES 0x8000
复制代码成为 - // syscl - Increase the reloc size for 10.11.4 to 256MB(0x10000)
- #define KERNEL_BLOCK_NO_RT_SIZE_PAGES 0x10000
复制代码保存后编译. 我知道, 我知道你们懒,所以我用Clover v2.3 r3465替你们编译了一份, 直接下载复制到/EFI/CLOVER/drivers64UEFI/下面,删掉OsxAptioFix2Drv-64.efi以及OsxLowMemFixDrv-64.efi避免冲突. 2. 在config.plist中删掉slide=XXX (XXX代表数值). 3. 如果仍旧无法启动, 表明内核请求分配的空间仍旧太大, 将CsrActiveConfig设置成0x67.
P.S. 这个问题在升级到10.11.4之后尤为明显,曾经可以使用的OsxAptioFixDrv-64.efi变得根本无法使用, 而换做OsxAptioFix2Drv-64.efi又会出现随机禁行的情况, 十分恼人. 这个问题差点让我换了主板, 不过既然在10.11.3上面OsxAptioFixDrv-64.efi是完美的, 相信稍微修改源码就能够完美运行. 我测试了64MB, 96MB, 128MB, 160MB, 192MB, 224MB, 256MB, 发现在H67-M上面只有当relocation size大于160MB才会出现加号(引导), 最终能够顺利进入系统的relocation size 是256MB. 这也能理解10.11.4之后, kernel请求的空间增加了很多, 甚至SIP的状态开启与否都会影响kernel请求内存空间的大小, 0x3消耗的内存空间大, 0x67则很小... 不难理解, SIP作为OS X中重要的一环, Apple一定会期望SIP能够在系统初始化的阶段就保护内核/缓存(扮演越来越重要的作用), 导致kernel被放到更高位的内存地址上. 我已向Clover社区反馈了这个修复/数值, 应该会在下一个新的版本到来之际修复. 在这之前大家请大家使用本文中的驱动吧!
祝好!
|