*적용중인 도장
macOS가 시작할 때 초기에 금지 마크가 나오고 중지 될 수 있습니다. 종종 커널을 읽어 들이고 무 메모리를 확보 할 수없는 오류입니다. 이를 slide 옵션에서 해결합니다.
저 표시가 나와 서서히 정지 해 버리는 경우에 -v 옵션으로 시작하면 "Error Allocating xxxx pages at xxxxxxxx"라는 메시지가 나올수 있습니다.
예를 들어 아래의 메시지는 "0xe590000 번지에서 0x11c01 페이지의 메모리 공간을 확보하려고했지만 실패했습니다"라는 뜻입니다.
1 페이지는 0x1000 바이트, 즉 4096 바이트입니다. 10 진수를 사용하여 알기 쉽게 작성하고 "240 메가 바이트 당 번지에서 298 메가 바이트 정도의 메모리 공간을 확보하려고했지만 실패했습니다"라는 느낌의 오류입니다. 100 번대가되고 나서의 MSI 메인 보드에서 자주 발생하는 오류입니다.
이 문제를 고쳐주는 것이 다음 kext입니다.
테스트시 하나만 사용해야 합니다.
가장 강력한 것이 마지막 OsxAptioFix2Drv-free2000.efi입니다.
그 이름 그대로 메모리를 강제로 개방시킵니다. 어떤 메인 보드에서도 거의 작동 최강의 kext입니다. 하지만 너무 강력 때문에 괜찮은가라는 의견이 있습니다. Reddit에 OsxAptioFix2Drv-free2000.efi은 피해야 하고 slide 옵션으로 대응하는 것이 좋다는 의견 도있었습니다.
하지만 저도 MSI의 메인 보드에서 OsxAptioFix2Drv-free2000.efi를 사용하고 있습니다 만, 문제는 없습니다.
하지만 slide를 사용한 올바른 해결책을 시도합니다.
Clover 부팅시 Shell 로 들어갑니다.
마더 보드의 메모리 맵을 볼 수 있습니다. 사용하는 명령어가 memmap입니다.
fs0 : 등으로 드라이브를 지정하고 필요하다면 cd 명령으로 적당한 디렉토리로 이동 한 후 memmap> memmap.txt 등과 입력하면 해당 위치에 메모리 맵을 텍스트 파일로 저장합니다. 다음은 ASUS의 Z390 마더 보드의 예입니다. (memmap의 출력은 Attributes라는 항목도 있습니다 만, 길어 지므로 생략합니다.)
성공한 보드의 예시
여기를 보면 커널이로드 될 수있는 0x100000 번지를 선두로 0x5315CFFF 번지까지 공터로되어있는 것을 알 수 있습니다. 페이지 수하고 0x5305D 번지 공터입니다. 1.4GB 정도 비어있는 것 같습니다. 처음에 나온 오류 메시지에 따르면, 커널로드하는 데 필요한 메모리 양은 300MB 정도 인 것입니다. 그래서 그냥 비어 있으면 어느 번지에로드도 당연하게 메모리 확보 할 수 있습니다. 덕분에이 메인 보드는 메모리 할당 오류가 나온 것은 아닙니다.
연관되어있다이 공간의 용량은 시작할 때마다 다소 변화 할 수있는 것 같습니다. 그래도 변화는 기껏 100MB 정도입니다.또한 iGPU 할당 메모리를 변경하여도 거의 변화하지 않습니다. ASUS의 메모리 맵은 macOS에 적합한 것입니다.
실패한 보드의 예시
한편, 최근의 MSI 메인 보드에서 AptioMemoryFix.efi 등을 사용하면 상당한 확률로 시작하지 않습니다. MSI는 Z170 칩셋 모델에서 OsxAptioFix2Drv-free2000.efi가 놓을 수 없게되어 버렸습니다. 어떤 메모리 맵이 있는지 살펴 보겠습니다. 다음은 B350M 마더 보드의 메모리 맵입니다. 최근 MSI 메인 보드가 문제 입니다.
ASUS와 MSI의 메모리 맵을 비교하여 봅시다. 0x100000 번지부터 앞의 페이지로 보여줍니다. ASUS는 0x100000 번지부터 0x53000 페이지 이상이 공터입니다. 하지만 MSI는 0x100000 번지부터 0xFF00 페이지가 공터에서 다음 0xB 페이지 (10 진수로 11 페이지)이 사용되고 있고 (너무 작아서 그림에서는 보이지 않습니다), 다음 0x67510 페이지가 비어 있습니다.
즉, MSI 메인 보드는 0x100000 번지부터는 0xFF00 페이지, 즉 267MB 정도의 메모리 밖에 비어 있지 않습니다. 그런 다음 0x10000000 번지에서 겨우 11 페이지, 바이트하고 45MB 만 누군가가 사용하고 있습니다. BS_Code는 것이 그것입니다. 그리고 그 후, 0x1000B000 번지에서 0x7751AFFF 번지까지 대량으로 공터가 있습니다. 따라서 0x100000 번지부터 약 300MB를 확보하려고하면 사용중인 45MB가 방해를 확보 할 수 없습니다. 이제 오류가 나옵니다. 어째서 이런 방해 곳에 사용중인 메모리가 있구나라는 느낌입니다.
관련 원문https://www.insanelymac.com/forum/topic/331381-aptiomemoryfix/?do=findComment&comment=2564269
이되는 것으로 알려져 있습니다. 하지만 CPU만을 생각하면, slide 값을 0x200000 배하고 0x100000을 더하면 뿐이므로 간단합니다.
즉 config.plist의 Boot, Argument 다음과 같이 slide = 128 매개 변수를 추가하면 이러한 메모리 공터가 불연속적인 문제를 해결할 수 있습니다.
부팅 옵션 slide 값을 지정해도, KASLR이 효과가 있다고 slide 값은 여전히 난수 (0x00에서 0xFF까지의 난수)가 할당됩니다.
부팅 옵션 slide 값은 무시되는 것 같습니다. slide 값을 지정하면 동시에 KASLR을 해제해야합니다.
KASLR을 해제하기 위해서는, SIP를 CSR_ALLOW_UNRESTRICTED_NVRAM 플래그를해야합니다.
이것은 NVRAM의 변경 제한을 해제하는 플래그이지만, 동시에 KASLR도 해제되는 것 같습니다. 이 플래그는 Apple이 공개 된 소스 코드에 따르면,
#define CSR_ALLOW_UNRESTRICTED_NVRAM (1 << 6)
라고합니다. 1 6 비트 만 상위로 이동한다는 의미에서 결과는 0x40입니다. config.plist의 RtVariables, CsrActiveConfig에 0x40을 써 둡니다.
<key> RtVariables </ key> <dict> <key> CsrActiveConfig </ key> <string> 0x40 </ string> </ dict>
7 번째 비트가 1이면 다른 숫자로도 좋습니다. CsrActiveConfig로 원래 0x03이라는 설정되어 있었던 경우 0x43으로하면 좋다. 0x64이라는 설정을했다면, 이것은 이미 7 번째 비트가 서 있기 때문에, 그대로 좋습니다. 보안을 최대한 확보한다는 관점에서 0x40 것이 좋다고 생각합니다.
이제 부팅 옵션에서 지정한 slide 값이 사용되게됩니다.이제 OsxAptioFix2Drv-free2000.efi없이 끝나게되었습니다.
다만 CSR_ALLOW_UNRESTRICTED_NVRAM을 허용하면 NVRAM의 재 작성 SIP의 모든 설정이 바뀔 수 있기 때문에 보안은 취약합니다.
하지만 Hackintosh이므로 config.plist 다시 재부팅하면 SIP는 어떻게도 설정할 수 있으므로 걱정할 필요는 없을지도 모릅니다.
"님의 댓글"
이 댓글을 신고 하시겠습니까?
제목 | 조회 수 | 날짜 | 글쓴이 |
---|---|---|---|
macOS Sequoia 15.0.1 24A348 정식버젼 고스트 이미지 OC 1.0.2 ft: 전체공개 +29 | 941 | 24.10.1121:10 | 좌절금지 |
오픈코어 1.0.2 +23 | 578 | 24.10.0900:22 | 줌바이퍼 |
[중급편] 노트북 해킨 +16 | 1406 | 24.07.1219:19 | Stultus |
macOS Ventura 13.7 22H123 정식버젼 고스트 이미지 OC 1.0.1 ft: 전체 공개 +17 | 575 | 24.09.1917:09 | 좌절금지 |
macOS Sonoma 14.7 23H124 정식버젼 고스트 이미지 OC 1.0.1 ft: 전체공개 +31 | 910 | 24.09.1723:58 | 좌절금지 |
[초급편] 문제 스스로 해결하기 +20 | 4003 | 24.03.2920:07 | Stultus |
[입문편] 첫 해킨 길라잡이 +40 | 5087 | 24.01.1218:54 | Stultus |
[필독 - 안정화] macOS 해킨토시 설치 후 안정화 작업 목록 및 글타래 모음 총정리 📋 +67 | 5.1만 | 23.01.0913:39 | shl628 |
Hot AMD Sequoia용 AppleALC 1.9.2 +3 | 109 | 24.10.2319:04 | 사노라맨 |
Hot [Sequoia 15.0.1, OC r1.0.2] ASUS TUF B550-PLUS / RYZEN 5 5600X / RX470 +2 | 106 | 24.10.2322:26 | 뿌엥 |
Hot OCLP로 지원되지 않는 기기/dGPU를 사용하는 해킨토시의 사이드카 품질 문제 해결방법 +1 | 122 | 24.10.2321:29 | 해킨도전자 |
106 | 24.10.2322:26 | 뿌엥 | |
122 | 24.10.2321:29 | 해킨도전자 | |
109 | 24.10.2319:04 | 사노라맨 | |
787 | 24.10.1412:27 | shl628 | |
673 | 24.10.1316:00 | 수박 | |
346 | 24.10.1222:56 | Stultus | |
941 | 24.10.1121:10 | 좌절금지 | |
734 | 24.10.1115:53 | 수박 | |
578 | 24.10.0900:22 | 줌바이퍼 | |
1406 | 24.07.1219:19 | Stultus | |
1214 | 24.10.0500:31 | 줌바이퍼 | |
569 | 24.10.0410:49 | Tamy | |
749 | 24.09.2923:48 | 머트 | |
629 | 24.09.2822:28 | 머트 | |
463 | 24.09.2808:22 | Tamy | |
894 | 24.09.2321:32 | Stultus | |
995 | 24.09.2210:59 | 좌절금지 | |
644 | 24.09.2203:23 | 누림어멈 | |
1191 | 24.09.1919:17 | 좌절금지 | |
575 | 24.09.1917:09 | 좌절금지 | |
498 | 24.09.1813:37 | Stultus | |
910 | 24.09.1723:58 | 좌절금지 | |
601 | 24.09.1722:40 | 좌절금지 | |
453 | 24.09.1717:13 | 맥가즈아 | |
562 | 24.09.1708:13 | 김경석 | |
234 | 24.09.1617:47 | Panictosh | |
768 | 24.09.1504:35 | Tamy | |
584 | 24.09.1319:18 | Stultus | |
706 | 24.09.1019:44 | 치토 | |
484 | 24.09.0118:13 | 머핀X | |
462 | 24.09.0112:54 | 해킨도전자 | |
546 | 24.08.3115:34 | 머핀X | |
306 | 24.08.2601:42 | 화정큐삼 | |
305 | 24.08.2422:59 | 하나브 | |
318 | 24.08.2316:25 | 화정큐삼 | |
415 | 24.08.1810:56 | CanBe | |
363 | 24.08.1800:04 | 화정큐삼 | |
300 | 24.08.1722:03 | 화정큐삼 | |
201 | 24.08.1710:14 | jbhlyk | |
312 | 24.08.1622:06 | Stultus | |
218 | 24.08.1511:16 | hackillious | |
169 | 24.08.1421:30 | 세유니 | |
419 | 24.08.1419:58 | Stultus | |
377 | 24.08.1311:26 | 오디세이 | |
270 | 24.08.1115:46 | 좌절금지 | |
186 | 24.08.1111:21 | 티타보르 | |
233 | 24.08.1022:46 | Stultus | |
539 | 24.08.1022:10 | 오디세이 | |
168 | 24.08.1019:05 | jbhlyk | |
200 | 24.08.0923:20 | RogerT |
원글 사이트 chrome으로 들어가서 덧글과 함께 번역해서 읽으시면 훨씬 이해하기 좋습니다. z390M 에서 지금까지 OsxAptioFix2Drv-free2000.efi 써오면서 지속적인 부팅오류 참으면서 써왔는데, 깨끗하게 이해할 수 있었습니다. 소개해주셔서 감사합니다.
이 자료를 통해 다음과 같이 OsxAptioFix2Drv-free2000.efi를 사용하지 않고 AptioMemoryFix.efi 로 부팅오류문제를 해결할 수 있었습니다.
---
z390M 에서 memmap 으로 확인해보면 kernel을 올릴 수 있는 영역이 0x100000 ~ 0x17BEBFFF 로 0x17AEC page (1page는 4k byte)로 약 378M 정도 가능합니다.
그리고 kernel은 약 300M 정도 필요하므로 위의 빈 영역에 맞는 것 같지만 osx에서는 보안 관련하여 KASLR(Kernel address space location randomization) 에 의해 kernel을 올리는 시작번지가 0x100000 + x * 0x200000 (x는 slide 값으로 0 ~ 0xff 사이로 random하게 결정)로 세팅됩니다.
참조:https://www.insanelymac.com/forum/topic/331381-aptiomemoryfix/?tab=comments#comment-2564078
즉, z390M에서는 KASLR을 disable하지 않으면 거의 "Couldn't allocation runtime area" 부팅오류가 나게 됩니다. KASLR을 disable하는 것은 config.plist에서 RtVariables/CsrActiveConfig에 0x43값을 세팅하면 됩니다. 그리고 config.plist의 boot argument에 slide=0 를 세팅하여 로딩 주소를 고정합니다.