微信扫一扫 分享朋友圈

已有 8108 人浏览分享

开启左侧

【随手记】oc进win7/bug10引导过程蓝屏的解决过程与方案手记

[复制链接]
8108 29
好久没有来论坛写帖子了,算算从搞毕设到现在正式就职,也很久没有发表一些分享帖了,今天就随手记下我在升级潮7000 EFI时解决某个问题的过程吧,供大家参考和讨论。大家都可以在我的帖子下面回复你们的看法和心得。理性交流,不要引战,文明用语,争做文明坛友。


事情是这样的,在潮7000 OC EFI里遗留了一个非常久远的问题:我的潮7000在引导win7/bug10的时候会发生蓝屏问题,具体来说就是会显示ACPIxxx(具体内容我也记不清了,但基本就是告诉我是ACPI的错误)。有关这个错误的问题,大概在两年前OC预制变量法刚出来的时候,我曾经与@Bat.bat同学讨论过,他跟我说可能与ACPI没有预制变量SSDT有关系。但是当时我在把能想到的SSDT都做过预制变量之后,仍然存在这个问题。我百思不得其解,这个问题也就这么留着两年多。虽然这个问题并不影响我启动win7(从BIOS直接引导),但这样来说,仍然不算很方便。


今天,当我将我EFI的版本升级到0.7.6时,我的升级过程不是特别顺利,我的nvme无法识别。为了排除故障,我借用了@yippeeghost这位坛友的EFI里的config文件(https://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1911901&highlight=0.7.6)进行排查故障的时候,我竟然有了意外的收获。当我尝试使用该坛友的config文件引导win7时,奇迹居然出现了,win7居然成功被引导了,这是什么问题呢?我没有放弃这个敏感的点,开始了我的研究。

评论 29

fxcad2008  新手上路  发表于 2023-2-28 22:59 | 显示全部楼层
众所周知,NUC8是一个mini台式主机,具有类似台式机安装的特性之一:不需要改写大量的DSDT代码。这位同学的EFI也是这样,里面仅有两个修正过的SSDT文件加载:





观察这两个SSDT,我发现它的绝大多数代码都是使用darwin括弧修正过的:







联想到bat跟我说过的话,我当时做出了一个大胆的猜测:是否是因为我的SSDT里面存在的某些修正,在OC引导时被OC注入到win内,与win产生了冲突,从而导致了OC引导win出现蓝屏问题。带着这个疑问,我开始进行了尝试。

举报 使用道具

回复 支持 反对
gslzkgh  新手上路  发表于 2023-2-28 23:00 | 显示全部楼层
为了验证我的想法,首先,我在OC的ACPI界面,去掉了我所有加入的SSDT修正,然后重启。奇迹出现了,win7完全正常引导,没有出现任何问题。这个实验的成功初步验证了我的想法,就是我的问题出在了SSDT修正里。

接下来,我还需要验证另一个方面的问题,就是加入darwin括弧是否可以解决问题。我找到了我EFI下的SSDT-PNLF文件测试,对文件修改如下:

  1. DefinitionBlock ("", "SSDT", 2, "ACDT", "_PNLF", 0x00000000){    External (_SB_.PCI0.GFX0, DeviceObj)    // (from opcode)    External (RMCF.BKLT, IntObj)    // (from opcode)    External (RMCF.FBTP, IntObj)    // (from opcode)    External (RMCF.GRAN, IntObj)    // (from opcode)    External (RMCF.LEVW, IntObj)    // (from opcode)    External (RMCF.LMAX, IntObj)    // (from opcode)    If (_OSI ("Darwin"))    {        ... // 原有代码    }}
复制代码

保存,并在配置文件的ACPI里勾选它,重启,进入win,一切似乎都是那么顺理成章,win7成功启动了。到这里,我似乎觉得问题已经得到了解决,为了保险,我将PNLF文件还原了回去,去win7下重启试验。奇怪,win7仍然是正常启动了,这到底是怎么回事呢?


我仔细思考了下刚才的启动过程,在出现“正在启动Windows”这个界面时出现了一个小细节:正常win7在这里不会有什么异常,但是刚才的启动,这里卡顿黑屏了一下,然后又显示了一次“正在启动Windows”,然后进入了桌面。联想到PNLF与显卡亮度有关,我突然想到,也许PNLF不具有代表性,毕竟win可能用不到这个设备。那么我就需要多找几个DSDT作参考。


在这个思路的指引下,我又勾选了SSDT-EC、SSDT-DGPU这两个文件继续进行测试,这次又复现了之前的故障,然后,我分别改写这两个文件的代码:

  1. DefinitionBlock ("", "SSDT", 2, "ACDT", "AddOn", 0x00000000){    External (_SB_.PCI0, DeviceObj)    // (from opcode)    External (_SB_.PCI0.LPCB, DeviceObj)    // (from opcode)    If (_OSI ("Darwin"))    {        Scope (\_SB.PCI0)        {           ...... //原有代码        }   }
复制代码
  1. DefinitionBlock ("", "SSDT", 2, "ACDT", "spoof", 0x00000000){    If (_OSI ("Darwin"))    {        If (CondRefOf (\_SB.PCI0.PEG0.PEGP._OFF))        {           ...... //原有代码        }     }}
复制代码

重启测试,这一次,win7顺利启动,没再出现任何问题。到此我断定,darwin括弧就是解决这个问题的关键


不过到这里,问题还不算完。在测试SSDT-Fnkey(亮度调节快捷键)这个文件时,我发现虽然在win7下它不存在问题了,但是进入到黑果之后,它居然发生了五国问题。这个方法的代码非常简单,并且存在替代品(Brightess.kext),我简单地把它从我的EFI里去掉,修正了这个问题。


经过这一连串的排查与解决,我成功地对所有的SSDT进行了适配,最终成功从OC引导了win。

举报 使用道具

回复 支持 反对
hh_136  新手上路  发表于 2023-2-28 23:00 | 显示全部楼层
总结下来,我这次解决的问题具有如下明显特征:

1、从OC引导win时发生的问题
2、引导时发生了蓝屏并且明显提示了ACPIxxx的问题


针对这个问题的修正方法也十分明确:使用darwin括弧来在win下屏蔽掉黑果的修正代码

  1. if (_OSI  "Darwin"){      ...... //原有代码}
复制代码
另外在测试中,我还发现了一些特殊的SSDT不需要使用这个方式来屏蔽。比如SSDT-RMNE(Rehabman提供的仿冒内置网卡SSDT)、SSDT-PNLF(亮度调节)这样的SSDT,因为修正过的代码对win影响很小,因此无需采用此法修正。再比如SSDT-TPAD(触摸板),因为已经采用预制变量法做过修正,因此也无需采用此法来修正。


目前暂时记录这么多,后续如果发现其他问题再补充。




鸣谢
@Bat.bat 思路参考
@宪武  OC SSDT预制变量法
@yippeeghost 参考思路

举报 使用道具

回复 支持 反对
fengcai119  新手上路  发表于 2023-2-28 23:00 | 显示全部楼层
snycruntimepermisstion开启

举报 使用道具

回复 支持 反对
wangjie-pc  新手上路  发表于 2023-2-28 23:01 | 显示全部楼层
并不是这个的问题,我早就测试过了,而且目前我没有开启这个也正常引导了

举报 使用道具

回复 支持 反对
Xyz583  高级会员  发表于 2023-2-28 23:01 | 显示全部楼层
用MOD版也可以

举报 使用道具

回复 支持 反对
清扬谷  新手上路  发表于 2023-2-28 23:01 | 显示全部楼层
mod版我没有测试,不过我个人不是特别爱用mod版

举报 使用道具

回复 支持 反对
sljiuming  新手上路  发表于 2023-2-28 23:01 | 显示全部楼层
主要加入了如上补丁,076之前引导win不蓝屏,但076就不行了目前还没解决

举报 使用道具

回复 支持 反对
smuybld1981  新手上路  发表于 2023-2-28 23:02 | 显示全部楼层
这个补丁可以分享下吗 还有 snycruntimepermisstion要不要一起开启?谢谢

举报 使用道具

回复 支持 反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

关注

21

粉丝

12

主题
精彩推荐
热门资讯
网友晒图
图文推荐
  • 微信公众平台

  • 扫描访问手机版

Archiver|手机版|小黑屋|水窝ibm

GMT+8, 2024-11-17 03:39 , Processed in 0.118808 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2022 Comsenz Inc.