操作系统补丁

描述

  • 操作系统补丁 用于解除系统对某些部件的限制。通常情况下,「不建议」 使用 操作系统补丁 。对于受系统限制而无法正常工作的部件,应根据 ACPI 的具体情况定制补丁。

  • 有关 操作系统补丁 方面的简要叙述见附件《操作系统补丁由来》。

更名

  • OSID to XSID

    Find:     4F534944
    Replace:  58534944
    
  • OSIF to XSIF

    Find:     4F534946
    Replace:  58534946
    
  • _OSI to XOSI

    Find:     5F4F5349
    Replace:  584F5349
    

    在原始 DSDT 中搜索 OSI,如果除了 _OSI 函数以外、还有其它包含 OSI 的字段(如 Dell 笔记本的 OSID、部分 ThinkPad 和联想笔记本的 OSIF),必须先添加 对这些包含 OSI 字段的重命名(如 OSID to XSIDOSIF to XSIF)、然后再添加 _OSI to XOSI
    如果除 _OSI 函数以外无其它包含 OSI 的字段、直接添加 _OSI to XOSI 即可。

补丁: SSDT-OC-XOSI

Method(XOSI, 1)
{
    If (_OSI ("Darwin"))
    {
        If (Arg0 == //"Windows 2009"  //  = win7, Win Server 2008 R2
                    //"Windows 2012"  //  = Win8, Win Server 2012
                    //"Windows 2013"  //  = win8.1
                    "Windows 2015"  //  = Win10
                    //"Windows 2016"  //  = Win10 version 1607
                    //"Windows 2017"  //  = Win10 version 1703
                    //"Windows 2017.2"//  = Win10 version 1709
                    //"Windows 2018"  //  = Win10 version 1803
                    //"Windows 2018.2"//  = Win10 version 1809
                    //"Windows 2018"  //  = Win10 version 1903
            )
        {
            Return (0xFFFFFFFF)
        }
        Else
        {
            Return (Zero)
        }
    }
    Else
    {
        Return (_OSI (Arg0))
    }
}

使用

  • 最大值

    对于单系统,可以设定操作系统参数为 DSDT 所允许的最大值。如:DSDT 的最大值是 Windows 2018,则设定 Arg0 == "Windows 2018"。通常 Arg0 == "Windows 2013" 以上就能解除系统对部件的限制。

    :单系统不建议使用 操作系统补丁

  • 匹配值

    对于双系统,设定的操作系统参数应和Windows系统版本一致。如:Windows系统是win7,设定Arg0 == "Windows 2009"。

注意事项

  • 某些机器的 Method 使用了和 _OSI 相似的名称(如 dellOSID),当它位于 _SB(不足4个字符)并出现全路径时,其二进制数据和 _OSI 相同,导致被操作系统更名(_OSI to XOSI)连带更名而产生错误。这种情况下需先于 _OSI to XOSI 之前对它更名为其他(如 OSID to XSID)以避免错误。

附件:操作系统补丁由来

  • 当系统加载时,ACPI 的 _OSI 会接收到一个参数,不同的系统,接收的参数不同,ACPI 执行的指令就不同。比如,系统是 Win7,这个参数是 Windows 2009,系统是 Win8,这个参数就是 Windows 2012。如:

    If ((_OSI ("Windows 2009") || _OSI ("Windows 2013")))
    {
        OperationRegion (PCF0, SystemMemory, 0xF0100000, 0x0200)
        Field (PCF0, ByteAcc, NoLock, Preserve)
        {
            HVD0,   32,
            Offset (0x160),
            TPR0,   8
        }
        ...
    }
    ...
    Method (_INI, 0, Serialized)  /* _INI: Initialize */
    {
        OSYS = 0x07D0
        If (CondRefOf (\_OSI))
        {
            If (_OSI ("Windows 2001"))
            {
                OSYS = 0x07D1
            }
    
            If (_OSI ("Windows 2001 SP1"))
            {
                OSYS = 0x07D1
            }
            ...
            If (_OSI ("Windows 2013"))
            {
                OSYS = 0x07DD
            }
    
            If (_OSI ("Windows 2015"))
            {
                OSYS = 0x07DF
            }
            ...
        }
    }
    

    ACPI 还定义了 OSYSOSYS 和上述参数关系如下:

    • OSYS = 0x07D9: Win7 系统,即 Windows 2009
    • OSYS = 0x07DC: Win8 系统,即 Windows 2012
    • OSYS = 0x07DD: Win8.1 系统,即 Windows 2013
    • OSYS = 0x07DF: Win10 系统,即 Windows 2015
    • OSYS = 0x07E0: Win10 1607,即 Windows 2016
    • OSYS = 0x07E1: Win10 1703,即 Windows 2017
    • OSYS = 0x07E1: Win10 1709,即 Windows 2017.2
    • OSYS = 0x07E2: Win10 1803,即 Windows 2018
    • OSYS = 0x07E2: Win10 1809,即 Windows 2018.2
    • OSYS = 0x????: Win10 1903,即 Windows 2019
    • ...
  • 当加载的系统不被 ACPI 识别时,OSYS 被赋予默认值,这个值随机器不同而不同,有的代表 Linux,有的代表 Windows2003,有的是其他值。

  • 不同的操作系统支持不同的硬件,比如 Win8 以上才支持 I2C 设备。

  • 当加载 macOS 时,_OSI 接受的参数不会被 ACPI 识别,OSYS 被赋予了默认值。这个默认值通常小于 Win8 要求的值,显然 I2C 无法工作。这就需要补丁来纠正这种错误,操作系统补丁源于此。

  • 某些其他部件也可能和 OSYS 有关。

results matching ""

    No results matching ""