ModernStandby调试的准备

《人月神话》是一本软件工程的著名书籍。其中“人月”的是一种表示劳动时间的计量单位。比如,一个软件需要3个人5个月来完成,这个软件的工作量就可以描述为 3*5=15人月。当然,因为软件设计是复杂的思维劳动,用上面的衡量办法很可能出现下面这样的推理:一头猪五个月下五个仔,换算下来一个猪仔相当于一个猪月,那么如果需要十个猪仔只需要十头猪一个月即可…….

其中的一章名称是“没有银弹”。“银弹”这个词来源于欧洲中世纪的传说。说的是狼人这样的怪物,一般的子弹是打不死它的。必须使用银子做的子弹才能杀死它。(说道这里我忽然发觉这个词听起来充满了贵族气息,比如月光下帅气的男主角从容的掏出手枪,装上散发出银色光芒的子弹然后射死怪物;相比之下国产的盗墓小说提到的对付“大粽子”的墨线糯米还有黑驴蹄子则充满了乡土气息……)后来“银弹”这个词就被用来形容,那些特别有效果、一用就很灵的方法。这章节 “没有银弹”的意思是,软件工程是一个超级复杂系统,没有任何特效的方法,可以一直提高效率。在Debug Modern Standby 的时候同样 “没有银弹” 。需要有足够的心理预期,因为整个过程可能会拉的很长有很多试验需要进行,必须保持足够的耐心。最常见的问题是在Debug 过程中因为灵光一闪而进行跳跃试验,漏掉一些因素最终导致数据和结论相互矛盾。因此,建议在上手的时候保持足够的耐心和勇气,尽量不厌其烦的将试验和条件逐一记录下来。

在动手之前,请保证如下事宜:

  1. 有一台能够进行参考的系统,最好是Intel RVP。在出现进入 MS死机或者重启时,可以非常有效的比对出当前是HW还是FW 问题。如果出现HW工程师开始研究FW设定,然后FW工程师反复研究电路图,通常意味着问题已经进入了死胡同;
  2. 在干净的系统上进行试验。这里的干净系统指的是只包括Windows和BKC驱动的系统。比如,XX电脑管家可能会导致系统无法进入MS,爱奇艺的存在也会影响进入 MS;
  3. 使用已经验证过的,确定支持 MS 的外围设备,特别是硬盘。作为工程师我们只能解决自己设计上的问题,无法解决部件的问题。特别是硬盘这种外观型号能够完全一致但是内部 FW版本不同的部件。另外,用具体试验来作为认定一些部件有问题是非常有说服力同时容易让人接受的。比如,硬盘是进入 MS 的关键部件,Intel SoC 无法兼容UMIS的 NVME 和FORESEE的SSD会让系统Block在 PC2;
  4. 进行测试时请拔掉USB设备,包括键盘鼠标和 Hub,理论上这些都不会影响MS,唯一的问题是你不知道你手上的是不是不影响MS的;
  5. 显示器可能会影响进入 MS。我听说过这样的事情,但是并没有亲见,如果有条件建议多用几个显示器试验;
  6. 检查所有的 GPIO 设定。最好让 HW 提供GPIO 设定的表格,虽然他们通常并不情愿,但是这个确实应该他们做,只有他们才能深刻的理解每一根GPIO的功能。设定之后在 Windows下用 GPIO 工具导出最终结果然后检查是否和HW设定匹配。我不认为有“高级错误” 和“低级错误”的差别。但是你可以想象当你和老板解释为什么某个问题花费了3周才能解决时,“GPIO设定错误”和“Intel 给出来的 PMC 有Bug,结果他们用了二十多天在我们不停的催促下才给出了更新的版本”哪种解释更容易让他接受;
  7. 如果设计有 ThunderBolt/TCSS ,务必请 HW保证设计同 RVP 相同,理论上用任何GPIO都是可行的,但是因为涉及到诸多的 FW 你无法保证其中能够配合你的设计。之前我碰到过一个 Camera 模块一直无法点亮,HW 测量表明对应的 MIPI Clock 频率不正确,在我研究三天无果焦头烂额甚至找不到能够配置频率的寄存器后,驱动工程师承认他在驱动中Hard Code成固定的频率;
  8. 尽量关闭BIOS中的安全相关的设定,比如:Secure Boot。因为这些项目可能会影响测试软件以及测试结果。当然如果试验发现确实会这样,后面找 Intel 来解决就好了(这也意味着其他家会有同样的问题,不用担心);
  9. 不要连接互联网。这句话的意思是:从安装系统开始,可以连接局域网,但是必须保证没有连接到互联网上。 Windows 后台有升级操作,但是你不知道的动作和进度。我碰到过多次工作正常的系统在连接一次互联网之后就变得不稳定,明确的结果能够给我们明确的方向,不稳定的结果非常有可能误导我们。
  10. 建议在开始之前关闭 RTD3 功能,这个功能对省电有帮助,但是 MS 没有帮助。在项目开始的时候,Codebase 中的 RTD3 设定的 GPIO 和你项目硬件设定不符有可能导致奇怪的问题;
  11. 可以多用用全盘镜像的工具,比如:Macrium Reflect 【参考1】,这样可以及时发现因为驱动更新导致的问题;

当上述工作完成后,就可以开始进行 Debug 了, 具体的方法就是运行 Power House Mountain 然后查看结果。具体有如下操作:

  1. 如果Sleep MS 的时候有异常重启,可以通过BIOS设定 CPU C-Status Limitation的方式来判断是否和MS相关。比如,Limit 到 C8 之后不会发生重启,就能确定问题是SLPS0 信号发出时导致的问题;通常这种问题是和硬件设计相关还需要请 HW 帮忙测试找到原因;
  2. 如果PHM提示某个设备有问题没有 Power Gated, 最简单的方法是关闭之然后继续试验。特别注意的是:Audio设备不要轻易关闭,一些能够正常工作的系统关闭 Audio 之后反倒变得无法进入CS,据说这个问题是同 GFX Driver 有关;
  3. 如果发现某个外部 PCIE 设备有问题,需要确认对应的 Clock Request Pin 是否正确。在 PHM 的 Log中有这个的读取结果,结合电路图进行确认。当然,这里我非常建议用示波器之类的确认这个Pin是否工作正常。
  4. 如果PHM 提示 CSME 工作异常,首先需要确认 BIOS中的ME 版本和系统驱动是否匹配,其次还要检查没有使用的SMB Pin之类是否正确关闭;

从上面的描述也可以看到,几乎所有的方面都会对 MS 产生影响,这也是为什么“在Debug Modern Standby 的时候同样 ‘没有银弹’ 。” 的原因。如果考试之前老师表示这本书全部都是重点,那么也就相当于没有重点........

Good Luck, BIOS Engineer!

参考:

1. http://www.lab-z.com/newghost/   Ghost 替代者,新的全盘备份工具

发表评论

电子邮件地址不会被公开。 必填项已用*标注