드디어.. 막바지에 다다렀습니다.

스피드스텝, 그리고 잠자기 SSDT 마지막편에 오신걸 환영합니다.

 

아주 길고도 긴 여정이었습니다.

이제 종지부를 찍을 때가 온 것 같아 마무리를 지으려합니다.

 

잠자기 관련 삽질만 장장 수 주를 해보았는데

가장 베일에 쌓여있는 미지의 영역인만큼 삽질이 쉽지 않았습니다.

 

제게 큰 도움을주신 @IanMinchangShin, @아이뱅크, @맥토피아 이 세분께

감사의 말씀을 올립니다.

 

요번 글은 아마도 기존보다도 더 불친절한 글이 될거라 생각합니다.

dsdt의 큰 패치가 필요한데, 이부분을 모든 커맥에 맞게끔 설명할 능력이 안되기 때문입니다.

기본적으로 필요한 문구를 복붙해서 넣었을 때 발생하는 오류에대한 추가적인 수정방안은

제가 직접 패치해둔 제 메인보드의 dsdt를 첨부하오니 참고하시어 작성해주시면 감사하겠습니다.

 

하여튼 각설하고 시작하기에 앞서 켁스트와 관련하여 깔끔하게 정리해서 말씀드리자면,

잠자기와 연관되어 가장 큰 역할을 하는 켁스트들은

X86PlatformPlugin, X86PlatformShim 켁스트를 꼽을 수 있겠더라는 것입니다.

 

그리고 스피드스텝과 관련하여 가장 큰 역할을 하는 켁스트를 꼽는다면

AppleLPC.kext, AppleAPIC.kext를 꼽을 수 있겠으며

 

그리고 전력관리 기술과 관련하여 가장 큰 역할을 하는 켁스트를 꼽는다면

AppleACPI*.kext (약 7종)을 꼽을 수 있겠습니다.

 

이들은 서로 얽히고 섥혀 잠자기 및 스피드스텝, 전력관리와 관련한 모든부분을 총괄합니다.

그런만큼 어느 것 하나 중요하지 않은 켁스트가 없다고 말씀드리고 싶습니다.

 

이 모든 켁스트는 반드시 로드되지 않아도됩니다.

가장 주축이되는 켁스트들이 따로 있기 때문입니다.

 

가장 큰 주축은

X86PlatformPlugin, X86PlatformShim (이 2개가 로드되지 않는 경우에는, ACPI_SMC_PlatformPlugin.kext 로 대체)

AppleLPC, AppleAPIC, 이정도의 켁스트라고 볼 수 있겠습니다.

 

구체적으로 얘네들이 무슨역할을 하는지는 제게 묻지 말아주세요... 저도 잘 모르거든요..ㅠㅠ

다만 삽질의 노고로 알아낸건 이 켁스트들이 로드되면 적어도 안정성이 좋아진다? + 문제가 덜 발생한다 정도입니다.

 

삽질을 하는 와중에 알게된 사실은

리얼맥에는 로드되는 켁스트가 있지만, 커스텀맥에는 로드되지 않는 켁스트가 있다는 것이었습니다.

아이뱅크님의 스샷으로 하여금 덜미가 잡힌 녀석이었는데

 

요번 글은 그녀석을 로드하는 방법에대해 서술해보려합니다.

(덜미를 잡게끔 도와주신 아이뱅크님께 감사의말씀 다시 올립니다.)

 

이 녀석이 잡히면 특별히 두드러지는 부분은 없습니다만,

전력관리 기술의 추가적인 안정성과 함께 리얼맥에서 볼 수 있는

잠자기 전 모니터 밝기 감소라는 부분이 전력관리기술에 추가로 붙는다는 사실입니다.

 

다만 모니터가 리얼맥 모니터가 아닌관계로 -_-;;

노트북에서나 동작하리라 보여집니다.

 

스크린샷 2016-03-07 오후 6.07.50.png

 

첨부해둔 FakeSMC.kext 에서 Info.plist를 열어주셔서 살펴보시면

smc-compatible과 REV, RVBF, RVUF 가 있는데, 이 값들을 PlistEditor로 열어주셔서

자신에게 맞는 smc타입 및 최신 버전으로 수정해주시면 되겠습니다.

[수정방법은 넘어갑니다.]

 

만일 iMac 17,1을 사용중이시라면 그냥 켁스트 그대로 사용하셔도 무방합니다.

구글링을 통하여 실제 리얼맥 키값을 해당 켁스트에다 추가해준 것으로써

FakeSMC 최신버전이 나오면 또 다시 패치해주어야하는 단점이 있습니다 -_-;;

 

Device (ALS0)
                {
                    Name (_HID, "ACPI0008")
                    Name (_CID, "smc-als")
                    Name (BUFF, Buffer (0x02) {})
                    CreateByteField (BUFF, Zero, OB0)
                    CreateByteField (BUFF, One, OB1)
                    CreateWordField (BUFF, Zero, ALSI)
                    Method (_STA, 0, NotSerialized)
                    {
                        If (LGreaterEqual (OSYS, 0x07D9))
                        {
                            Return (0x0F)
                        }
                        Else
                        {
                            Return (Zero)
                        }
                    }

                    Method (_ALI, 0, NotSerialized)
                    {
                        Store (^^EC.ALB0, OB0)
                        Store (^^EC.ALB1, OB1)
                        Store (ALSI, Local0)
                        Return (Local0)
                    }

                    Name (_ALR, Package (0x05)
                    {
                        Package (0x02)
                        {
                            0x0A, 
                            Zero
                        }, 

                        Package (0x02)
                        {
                            0x14, 
                            0x0A
                        }, 

                        Package (0x02)
                        {
                            0x32, 
                            0x50
                        }, 

                        Package (0x02)
                        {
                            0x5A, 
                            0x012C
                        }, 

                        Package (0x02)
                        {
                            0x64, 
                            0x03E8
                        }
                    })
                }

 

이 문구가 LPCB에 추가됩니다.

Device (EC)
                {
                    Name (_HID, EisaId ("PNP0C09"))
                    Name (_UID, Zero)
                    Name (_CRS, ResourceTemplate ()
                    {
                        IO (Decode16,
                            0x0062,             // Range Minimum
                            0x0062,             // Range Maximum
                            0x00,               // Alignment
                            0x01,               // Length
                            )
                        IO (Decode16,
                            0x0066,             // Range Minimum
                            0x0066,             // Range Maximum
                            0x00,               // Alignment
                            0x01,               // Length
                            )
                    })
                    Name (_GPE, 0x17)
                    Method (_PRW, 0, NotSerialized)
                    {
                        If (OSDW ())
                        {
                            Return (Package (0x02)
                            {
                                0x23, 
                                0x04
                            })
                        }
                        Else
                        {
                            Return (Package (0x02)
                            {
                                0x23, 
                                0x03
                            })
                        }
                    }

                    Name (CFAN, Zero)
                    Name (CMDR, Zero)
                    Name (DOCK, Zero)
                    Name (PLMX, Zero)
                    Name (PECH, Zero)
                    Name (PECL, Zero)
                    Name (PENV, Zero)
                    Name (PPSL, Zero)
                    Name (PSTP, Zero)
                    Name (RPWR, Zero)
                    Name (LSTE, Zero)
                    Name (VPWR, Zero)
                    Name (WTMS, Zero)
                    Name (AWT2, Zero)
                    Name (AWT1, Zero)
                    Name (AWT0, Zero)
                    Name (DLED, Zero)
                    Name (IBT1, Zero)
                    Name (PB10, Zero)
                    Name (ECOK, Zero)
                    OperationRegion (ECOR, EmbeddedControl, Zero, 0xFF)
                    Field (ECOR, ByteAcc, Lock, Preserve)
                    {
                        ECVS,   8, 
                                Offset (0x02), 
                                Offset (0x03), 
                        G3HT,   1, 
                                Offset (0x04), 
                        WBCB,   1, 
                        DSLP,   1, 
                                Offset (0x05), 
                                Offset (0x06), 
                        WKRS,   8, 
                                Offset (0x10), 
                        ECSS,   8, 
                        PLIM,   8, 
                        ALB0,   8, 
                        ALB1,   8, 
                        WTLB,   8, 
                        WTMB,   8, 
                                Offset (0x20), 
                        SPTR,   8, 
                        SSTS,   8, 
                        SADR,   8, 
                        SCMD,   8, 
                        SBFR,   256, 
                        SCNT,   8, 
                        SAAD,   8, 
                        SAD0,   8, 
                        SAD1,   8, 
                        SMUX,   8, 
                                Offset (0x60), 
                        ELSW,   1, 
                        EACP,   1, 
                        ECDI,   1, 
                        ENMI,   1, 
                                Offset (0x61), 
                        EMHP,   1, 
                                Offset (0x62), 
                                Offset (0x63), 
                                Offset (0x64), 
                        SWLO,   1, 
                        SWLC,   1, 
                        SWAI,   1, 
                        SWAR,   1, 
                        SWCI,   1, 
                        SWCE,   1, 
                        SWMI,   1, 
                        SWMR,   1, 
                        SWPB,   1, 
                        SWGP,   1, 
                        SWPM,   1, 
                        SWWT,   1, 
                        SWLB,   1, 
                                Offset (0x66), 
                                Offset (0x67), 
                                Offset (0x68), 
                        EWLO,   1, 
                        EWLC,   1, 
                        EWAI,   1, 
                        EWAR,   1, 
                        EWCI,   1, 
                        EWCE,   1, 
                        EWMI,   1, 
                        EWMR,   1, 
                        EWPB,   1, 
                        EWGP,   1, 
                        EWPM,   1, 
                        ENWT,   1, 
                        EWLB,   1, 
                                Offset (0x6A), 
                                Offset (0x6B), 
                                Offset (0x6C), 
                        LWLO,   1, 
                        LWLC,   1, 
                        LWAI,   1, 
                        LWAR,   1, 
                        LWCI,   1, 
                        LWCE,   1, 
                        LWMI,   1, 
                        LWMR,   1, 
                        LWPB,   1, 
                        LWGP,   1, 
                        LWPM,   1, 
                        LWWT,   1, 
                        LWLB,   1, 
                                Offset (0x6E), 
                                Offset (0x6F), 
                                Offset (0x70)
                    }

                    Field (ECOR, ByteAcc, Lock, Preserve)
                    {
                                Offset (0x03), 
                        G3AD,   1, 
                        BLOD,   1, 
                        S4WE,   1, 
                        APWC,   1, 
                                Offset (0x04), 
                                Offset (0x6C), 
                        LWE0,   8, 
                        LWE1,   8, 
                        LWE2,   8, 
                        LWE3,   8
                    }

                    Field (ECOR, ByteAcc, Lock, Preserve)
                    {
                                Offset (0x24), 
                        SBDW,   16, 
                                Offset (0x46), 
                        SADW,   16
                    }

                    Method (WAKE, 0, NotSerialized)
                    {
                        If (ECOK)
                        {
                            Return (WKRS)
                        }
                        Else
                        {
                            Return (Zero)
                        }
                    }

                    Method (_Q40, 0, NotSerialized)
                    {
                        Notify (ALS0, 0x80)
                    }

                    Method (_Q5A, 0, NotSerialized)
                    {
                        Notify (SLPB, 0x80)
                    }

                    Method (_Q80, 0, NotSerialized)
                    {
                        Notify (\_PR.CPU0, 0x80)
                        Notify (\_PR.CPU1, 0x80)
                        Notify (\_PR.CPU2, 0x80)
                        Notify (\_PR.CPU3, 0x80)
                        If (LEqual (^^^IGPU.VID0, 0x8086))
                        {
                            Store (IGPS, Local0)
                            Subtract (RP0C, Local0, Local0)
                            Store (Local0, RPSL)
                        }
                        Else
                        {
                            Notify (GFX0, 0x81)
                        }
                    }

                    Method (_REG, 2, NotSerialized)
                    {
                        If (LOr (LEqual (Arg0, 0x03), LGreaterEqual (OSYS, 0x07D6)))
                        {
                            Store (Arg1, ECOK)
                            If (LEqual (Arg1, One))
                            {
                                Store (Zero, ECSS)
                            }
                        }
                    }

                    Method (ECWT, 2, Serialized)
                    {
                        Store (Arg0, Arg1)
                    }

                    Method (ECMD, 1, Serialized)
                    {
                        If (ECON)
                        {
                            While (CMDR)
                            {
                                Stall (0x14)
                            }

                            Store (Arg0, CMDR)
                        }
                    }

                    Method (ECRD, 1, Serialized)
                    {
                        Return (DerefOf (Arg0))
                    }
                }

 

이부분은 H_EC or EC부분입니다.

자신의 dsdt에 맞게끔 수정하여 없는 부분들을 패치해주시면 되겠습니다.

 

Method (OSDW, 0, NotSerialized)
    {
        If (LEqual (OSYS, 0x2710))
        {
            Return (One)
        }
        Else
        {
            Return (Zero)
        }
    }

    Method (PINI, 0, NotSerialized)
    {
        Store (0x07DC, OSYS)
        If (CondRefOf (_OSI, Local0))
        {
            If (_OSI ("Darwin"))
            {
                Store (0x2710, OSYS)
            }
            Else
            {
                If (_OSI ("Linux"))
                {
                    Store (0x03E8, OSYS)
                }
                Else
                {
                    If (_OSI ("Windows 2009"))
                    {
                        Store (0x07D9, OSYS)
                    }
                    Else
                    {
                        If (_OSI ("Windows 2012"))
                        {
                            Store (0x07DC, OSYS)
                        }
                    }
                }
            }
        }
        Else
        {
            Store (0x07DC, OSYS)
        }
    }

    Method (DTGP, 5, NotSerialized)
    {
        If (LEqual (Arg0, Buffer (0x10)
                {
                    /* 0000 */    0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44, 
                    /* 0008 */    0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
                }))
        {
            If (LEqual (Arg1, One))
            {
                If (LEqual (Arg2, Zero))
                {
                    Store (Buffer (One)
                        {
                            0x03
                        }, Arg4)
                    Return (One)
                }

                If (LEqual (Arg2, One))
                {
                    Return (One)
                }
            }
        }

        Store (Buffer (One)
            {
                0x00
            }, Arg4)
        Return (Zero)
    }

 

추가 패치입니다.

 

스크린샷 2016-03-07 오후 6.18.24.png

 

적당히 잘 버무려서 오류없게 패치해주시면 위처럼

ACPIEC와 SMCLMU 켁스트가 추가로 로드되어 동작하게됩니다.

 

이렇게 저렇게.. 하다보니 너무 불친절한 글이 되어버려 죄송스럽게 생각합니다.

패치는 이정도면 되겠으며, 마지막으로 여담을 좀 풀어보려고 합니다.

 

다름이 아닌 스탠바이모드에 대하여서인데

확실하지는 않지만 스탠바이의 경우에는 일부 맥 모델 (맥북시리즈)에서만 정상동작하며

그외의 경우에는 동작하지 않는다는 이야기를 본 적이 있습니다.

 

노트북은 시간이 지나면 배터리가 줄어들어 자동으로 파워를 종료할 필요가 있지만

아이맥이나 맥프로는 그럴 이유가 없다는 것입니다. (정전을 제외하고는)

 

그로 인하여 쓸데 없이 자원을 낭비하는 스탠바이모드로 진입하게되는 것을 차단하며

하버네이트 모드도 1, 3, 25를 지원하지 않고 0만 정상동작하는 것으로 보여집니다.

 

최근 실험한 바로는 hibernatemode 0, darkwake=10 일 때에

파워냅이 활성화되어 동작한다는 사실이 입증되었으며 (1번도 가능할겁니다.)

 

파워냅을 활성화하기 위하여서는 반드시 X86PlatformPlguin, X86PlatformShim 이 두 켁스트가

로드되어 정상적으로 동작하고 있어야만 한다는 것입니다.

 

3번모드에 대해서는 현재 추가로 실험중에 있는 상태이지만,

오늘 밤으로도 동작이 되지 않으면 마무리를 지으려합니다. ㅎㅎ

 

짧고도 긴 글 읽어주셔서 감사드립니다.

[아 참, 적용관련하여 질문 주시는 것은 언제든 환영입니다 ^^.]

조회수 증가를 위해 #해시태그를 넣어보세요. 글 수정을 눌러 본문 아무곳에나 글 내용 키워드#기호와 함께 붙여서 적으면 됩니다.

ex) #N당 #해상도 #성공후기

Odd Customer

★ 글쓴이에게 고마우시면 커피한잔 후원(클릭) ★ 후원 정보를 입력하지 않았습니다.

"[CPU] SpeedStep의 진실과 SSDT, 그리고 잠자기에 관하여 [번외편 - 하]"글의 댓글은 현재 16개 있습니다.
비회원은 36분 49초 후에 댓글을 열람할수 있습니다.
로그인 하시면 바로 확인 하실수 있습니다.



No 제목 조회 닉네임 추천
732 강좌/연재| [1편] 만약 New Macbook Air가 나온다면? 7 117 KsJ 1 - 0
731 강좌/연재| HOT [하스웰] 초보자들을 위한 개념 이해하기 부터 커스텀맥 설치하기 까지 [2부] 59 11838 comed78 24 - 0
730 팁/안정화| 잠자기가 안될때! 한가지방법! 2 497 홍대퀸카 0 - 0
729 팁/안정화| Clover Graphics 해결 예 4 667 아이뱅크 2 - 0
728 강좌/연재| HOT [하스웰] 초보자들을 위한 개념 이해하기 부터 커스텀맥 설치하기 까지 [1부] 54 9359 comed78 25 - 0
727 강좌/연재| 샨님 글에 이은 B형 변환킷 테스트 결과 . _.., 19 285 KsJ 1 - 0
726 강좌/연재| 간략한 클로버 사용 후기 12 467 KsJ 2 - 0
725 팁/안정화| B형카드 실험 테스트 결과 3 87 IanMinchangShin 0 - 0
724 팁/안정화| HOT 해킨설치가 win7설치보다 쉬웠어요! 마우스 클릭만으로 앨캐피탄 설치!(win7 환경에서) 5 1107 홍대퀸카 3 - 0
723 macOS팁| OS 아이메세지에서 live photo 보는 법 5 198 Mactopia 1 - 0
722 팁/안정화| 애플리모트, IR Receiver 후기 36 339 comed78 1 - 0
721 팁/안정화| HOT 1개의 SSD [HDD]에 윈도우 8~10 과 OS X 듀얼구성하기 6 1307 KsJ 4 - 0
720 팁/안정화| BCM94360CS 장착 완료. 32 422 IanMinchangShin 0 - 0
719 팁/안정화| HOT AMD R9 390X 설치하기 (엘캐피탄) 27 1665 Min-wooYoon 8 - 0
718 macOS팁| HOT 로그인항목 초기화 문제 해결 4 290 Soluzers 3 - 0
717 팁/안정화| 잠자기가 잘안될때 해결방법2 6 449 홍대퀸카 0 - 0
716 팁/안정화| 커스텀맥 10.11.4 업데이트 성공 23 652 IanMinchangShin 1 - 0
715 팁/안정화| HOT S/L/E에 수정한 AppleGraphicsDevicePolicy.kext 넣지않고 부팅시 블랙스크린(모니터 절전모드)에서 해방되... 14 739 comed78 4 - 0
714 팁/안정화| 잠자기가 안될때 간단한 해결방법! 5 631 홍대퀸카 2 - 0
713 팁/안정화| HOT 일부 DSDT Error, Warning, Remarks 오류 수정 방법 (1) 19 480 IanMinchangShin 3 - 0
712 팁/안정화| HOT 블루투스 관련하여 최근 알게된 사실. 10 736 KsJ 3 - 0
711 팁/안정화| 타 컴의 타임머신 백업을 이용해서 커맥 세팅하기. 5 249 각시수련 2 - 0
710 팁/안정화| 새로운 블투 모듈킷 제품은... 3 95 KsJ 0 - 0
709 팁/안정화| 공동구매한 데스크탑 킷 A형 장착후 블루투스 깨어나기 후기... 3 231 LeeDeaRi 1 - 0
708 팁/안정화| BCM94360CS B형 변환킷을 사용한 BCM94360CD 사용 후기 [데이터 폭탄주의] 32 463 KsJ 1 - 0
707 팁/안정화| 저도 레이드카드 하나 설치하였습니다. RocketRAID 2720SGL 9 262 니포 1 - 0
706 팁/안정화| 잠자기 후 wifi 느려지는 현상 5 219 bl 1 - 0
705 강좌/연재| HOT BCM94360CD 를 위한 DSDT 패치. 10 435 KsJ 3 - 0
704 팁/안정화| HOT 모든 글을 정리하며.... [최종 후기] 20 780 KsJ 7 - 0
703 강좌/연재| HOT [끝판왕] 오즈모시스 167x를 사용하여 커스텀맥 구성하기 Rev. 2016.03.14 58 1670 KsJ 7 - 0
702 팁/안정화| HOT 잠자기 후 사운드 문제, 와이파이 느려짐 이슈에 대한 해결책 7 875 IanMinchangShin 3 - 0
701 팁/안정화| HOT 삭제 9 466 IanMinchangShin 5 - 0
700 팁/안정화| HOT Apple Mac SMC keys와 FakeSMC 8 983 아이뱅크 6 - 0
699 HOT [끝판왕] 당신의 CPU에 휴식시간을 부여하라! [Rev 16.03.08] 103 5325 KsJ 24 - 0
» 강좌/연재| [CPU] SpeedStep의 진실과 SSDT, 그리고 잠자기에 관하여 [번외편 - 하] 16 984 KsJ 1 - 0
697 팁/안정화| HOT [설명서] 해킨토시 입문자가 한번쯤 읽어보면 좋을 자료 입니다. 11 1670 임한혁 5 - 0
696 팁/안정화| 입문자 커스텀맥설치가이드 5 1946 아이뱅크 2 - 0
695 팁/안정화| HOT 잠자기 후 사운드 잡기 [ CodecCommander.kext ] [ALC 1150 테스트 해봄] 4 655 JuSungHwang 5 - 0
694 팁/안정화| HOT 잠자기 후 사운드가 안잡힐 때 6 562 IanMinchangShin 3 - 0
693 팁/안정화| HOT 삭제 7 670 IanMinchangShin 6 - 0
692 팁/안정화| HOT 테스트중 이모저모 모니터 케이블 종료 18 232 아이뱅크 3 - 0
691 팁/안정화| HOT 잠자기모드(sleep mode) 2 968 아이뱅크 5 - 0
690 팁/안정화| HOT 잠자기 깨면 먹통되는 문제 아주 소소한 경험상 팁 16 898 Blackwood 4 - 0
689 강좌/연재| HOT [CPU] SpeedStep의 진실과 SSDT, 그리고 잠자기에 관하여 [번외편 - 중] 18 854 KsJ 3 - 0
688 팁/안정화| exfat 인식이 안될때 팁 3 650 piano 1 - 0
687 팁/안정화| 클로버가 잠자기 되어 안 일어날때 3 240 아이뱅크 1 - 0
686 팁/안정화| HOT [CPU] 스피드스텝 :: AppleLPC.kext, ACPI_SMC_PlatformPlugin.kext 를 로드하는 방법에 대해서 32 1872 IanMinchangShin 8 - 0
685 강좌/연재| HOT 커스텀 세계에 처음 발을 내민 분들을 위한 용어 해설 0.2v 25 1663 KsJ 14 - 0
684 강좌/연재| HOT [CPU] SpeedStep의 진실과 SSDT, 그리고 잠자기에 관하여 [번외편 - 상] 49 2032 KsJ 7 - 0
683 macOS팁| 터미널에서 달력 보는 법 :-) 1 139 Mactopia 1 - 0
서버에 요청 중입니다. 잠시만 기다려 주십시오...