본문 바로가기
  • 산행..,,
컴퓨터/해킨토시 (Hackintosh)

xnumake-10.13.6

by 산에사는꽃사랑 2021. 3. 18.

github.com/jslegendre/xnumake-10.13.6

 

jslegendre/xnumake-10.13.6

A self contained build system for creating a bootable xnu-4570.71.2 kernel - jslegendre/xnumake-10.13.6

github.com

 

xnumake-10.13.6

부팅 가능한 xnu-4570.71.2 커널을 만들기위한 자체 포함 된 빌드 시스템. 인터넷에 떠 다니는 수많은 XNU 빌드 스크립트와 Makefile이 있지만 4570.71.2 (macOS 10.13.6)  부팅 가능한 빌드 를 만드는 작업을 특별히 처리하는 것은 찾을 수 없습니다 .

4570.71.2의 문제는 Apple이 사전 연결을 가능하게하는 필수 기능을 포함하지 않았으므로 부팅되지 않는다는 것입니다. 그러나 수정 사항을 보여주는 Panicall  트위터 게시물을 알려준 AMD-OSX의 Shaneee 덕분에 맞춤형 커널을 사전 링크하고 부팅 할 수있었습니다.

이 빌드 시스템은 원본 SDK를 수정하지 않도록 로컬 "XNU 특정"SDK도 생성합니다. 이것은 테스트 중에 저에게 큰 짜증이 났으므로 대신이 경로를 선택했습니다.

구축 방법

모든 종속성을 다운로드하려면 SDK를 만들고 필요한 XNU 파일을 패치하고 커널의 릴리스 버전을 빌드합니다.

sudo make

이것은 시간이 오래 걸리며 다른 버전의 커널을 빌드하거나 자신의 버전에서 작업하고 있고 적절한 SDK를 원하는 경우 이상적이지 않습니다. 따라서 XNU-SDK  빌드 하려면 다음을 사용할 수 있습니다.

sudo make sdk

이것은 xnu를 패치하지는 않지만 자신의 진행중인 프로젝트에서 포함 된 패치를 자유롭게 사용할 수 있습니다.

경고!

모두 같은 지속적인 커널 개발을 위해 이것을 사용하는 것은 권장하지 않습니다 make및 make sdkXNU 소스에 대한 모든 수정 사항을 덮어 쓰게됩니다. 커널 빌드는 SDK가 작동하는지 확인하기위한 테스트로 엄격하게 수행됩니다. make다음과 같이 한 번 사용하는 것이 좋습니다.XNU에 포함 된 Makefile은 다음과 같습니다.

path/to/xnu-src$ make SDKROOT=$(PWD)/MacOSX10.13-xnu.sdk [XNU_LOGCOLORS=y] ARCH_CONFIGS=X86_64 KERNEL_CONFIGS=(RELEASE/DEVELOPMENT/DEBUG/etc)

다음 make install_sdk과 같이 XNU Makefile을 사용 하여 XNU-SDK를 설치할 수도 있습니다 .

path/to/xnu-src$ make SDKROOT=macosx10.13-xnu [XNU_LOGCOLORS=y] ARCH_CONFIGS=X86_64 KERNEL_CONFIGS=(RELEASE/DEVELOPMENT/DEBUG/etc)

연결 및 부팅

사용자 지정 커널로 부팅하려면 SIP를 비활성화해야합니다. 이를 수행하려면 복구 모드로 부팅하고 터미널에서 다음을 입력하십시오.

csrutil disable

이제 커널을 미리 연결하고 다음을 사용하여 재부팅 할 수 있습니다.

$ sudo mv /System/Library/Kernels/kernel /System/Library/Kernels/kernel.backup

$ sudo cp /path/to/kernel /System/Library/Kernels/

$ sude kextcache -invalidate /

다음과 같은 누락 된 기호에 대한 경고 홍수가 표시됩니다.

kxld[com.apple.<kextname>]: In interface com.apple.kpi.private of __kernel__, couldn't find symbol <symbol>

이는 Apple이 독점 기호를 내 보내지 않기 때문에 예상됩니다. 사전 연결이 실패하면 다음 메시지가 표시됩니다.

Failed to generate prelinked kernel.

Child process /usr/sbin/kextcache[1574] exited with status 71.

이제 재부팅하고 .NET을 사용하여 커널의 타임 스탬프를 확인합니다 uname -a.