Linux Distro를 빌드 할 수있는 것처럼 Darwin Distro를 소스에서 컴파일 할 수 있습니까? 것과 크게 다를

나는 읽었고 착수했다. 처음부터 리눅스 (그리고 BLFS)와 나는 궁금해했다. 나는이 안내서를 따라 다윈 배포판을 만들 수 있는가? xnu 핵심? 프로세스가 LFS에서 설명한 것과 크게 다를 것입니까?

현재 나의 이해는 “Linux”가 아닌 “Darwin”시스템이 커널 대체가 될 필요가 있다는 것입니다. 이 올바른지?


편집하다:

killermist의 의견에 따라이 질문을 수정합니다. 이 주제에 대한 정보를 일반적으로 찾고있는 동안, 구체적으로 찾고있는 것은 ” Darwin Distro Creation Guide “LFS와 매우 흡사 한 것은” Linux Distro Creation Guide “.

그러한 정보는 아마 사람들로부터 온 것일뿐입니다. 푸라 다윈 , OpenDarwin 또는 GNU / 다윈 그래서 이것은 도움을 청하는 것입니다. A ” How-We-Made-PureDarwin-Nano-Start-To-Finish “LFS와 같은 가이드는 완벽 할 것입니다. 그러나 나는 그것이 많은 것을 요구하고 있음을 압니다.



답변

2015 년 4 월 19 일 업데이트 :

2 년 후에도 여전히이 분야에 관심이 거의없는 것처럼 보입니다. 그러나 Hackintosh 커뮤니티는 여전히 활발한 활동을하고있어 xnu (Chameleon and forks)를 부팅 할 수있는 몇 가지 오픈 소스 비 Apple 부트 로더 중 하나는 여전히 유지되고 있으며 요세미티를 부팅 할 수 있습니다. OS X Yosemite를 QEMU 내에서 부팅하는 성공 사례도 있습니다. 게다가 (현재 애플에 고용 된) 개발자 덕분에 winocm , 우리는 xnu 커널의 ARM 포트 . 그녀는이 분야에서 내가 가장 잘 알고있는 개발자였습니다.

또한 속편이있다. Amit Singh의 Mac OS X 내부 곧 올거야. 나는 보통 사람들의 개인적인 페이지를 언급하는 것을 좋아하지 않지만 모든 정보가있는 블로그 서버는 약간 신뢰할 수없는 것으로 보이므로 정보 상자를 참조하십시오. 아메이지 트위터 페이지.

필자는 Apple의 개발 툴 체인 (자체 호스트, “Darwin SDK” 또한 리눅스로 포팅되었다. ). 나는 Darwin OS가 아직 처음부터 빌드 할 수 있다고 믿습니다. 우리가 누락 된 부분은 오픈 소스 Kexts입니다. 이 공간을보고 관심을 북돋는 방법을 알고 있다면 알려주십시오! 🙂


이 질문에 대한 간단한 대답 :

기술적으로 :

거의: 아니*

이진 요령으로 : 아마도, 합법적 인 (테스트되지 않은)

일반 하드웨어 용 이진 요령 : 위 (테스트되지 않음)

* Apple에서 일하지 않는 한 (* 캘리포니아의 일반적인 방향으로 목구멍을 깨끗이합니다.)


더 긴 대답 :

이것은 오히려 길어질 것입니다. 나는 커피를 제안한다. 모든 것을 읽을 시간 / 경향이 없다면 “결론을 내리는 말”으로 건너 뛸 수 있습니다.

실질적으로 가능함 (아니오) :

안타깝게도 애플은 너무 많은 소스 코드를 철회했다. 다윈의 필요한 KEXT 소스로부터 순수하게 Darwin OS 컴파일을 가능하게하는 바이너리. 여전히 기술적으로 가능합니다 (소스를 직접 작성하여 제대로 패치 할 수는 있지만). 시간을 할애 할 필요가 없으며 기술을 선호하지 않습니다. (커뮤니티에 관심이 많을 수도 있습니다.)

당연히 중요한 전환점은 xnu를 x86_64로 가져온 Darwin 10의 출시입니다. 필요한 소스의 대부분은 이전에 있었지만 x86 만있었습니다. 시간이 지남에 따라 애플의 “오픈 소스”의 의미는 “애플의 하드웨어에서만 오픈 소스”로 바뀌었다. 애플의 KEXT는 이제 하드웨어별로 다르다. 달리기 (아래 참조)는 여전히 Apple 하드웨어에만 국한됩니다.

기술적으로 가능 (예) :

그러나 모든 것이 사라지지 않습니다. LFS 가이드는 편리하게 제공되었으므로 확실히 Darwin OS를 실제로 구축하지 않고도 필요한 모든 설정을 수행 할 수 있습니다. 또한 제시된 단계는 커널, KEXT 및 부트 로더가없는 경로의 거의 정확한 로드맵을 제공합니다. 나는 부트 로더 문제를 해결할 수 있었다 (적어도 애플 하드웨어에서는).

관심이 있으시면 다음을 수행하십시오.

  • 드라이브 (내부 또는 외부는 중요하지 않음)에서 파티션 (8GB 이상 권장)을 지우고 Mac OS 확장 (저널링) (HFS +)으로 포맷하십시오.
  • GUID 파티션 테이블 (GPT)과 EFI 파티션이있을 때의 GUID 파티션 테이블 (GPT)이 있는지 확인하십시오. 가장 쉬운 방법은 Apple의 디스크 유틸리티를 사용하는 것입니다. 원하는 경우 명령 줄에서 수행 할 수 있습니다 (이 작업을 수행하는 방법에 대한 자습서가 있습니다). 중요한 점은 당신이 달릴 때 distil list diskNsM 다음 정보가 정확해야합니다.

파티션 유형 : Apple_HFS

OS를 설치할 수 있음 : 예

읽기 전용 미디어 : 아니요

읽기 전용 볼륨 : 아니요

  • 이제 LFS 가이드 (적응 포함)를 따르십시오.

  • ‘DFS = / Volumes / DarwinOS ‘(인용 부호가없고 실제 마운트 지점이 분명히 있음)을 .bashrc.bash_profile

  • 사용자 디렉토리 만들기 ( chown 맨 끝에서 0 : 0).

    sudo mkdir -v $ DFS / usr

  • 들어가다 root:

    sudo su -

  • sources 디렉토리를 만들고 스티키 비트를 설정하십시오 :

    mkdir -v $ DFS / sources # 여전히 $ DFS가 정의되어 있는지 확인하고, $ DFS가 정의되어 있지 않은 경우 다시 정의하십시오.

    chmod -v a + wt $ DFS / sources

  • tools 디렉토리를 만들고 심볼릭 링크를 만들어 나중에 $ PATH에 쉽게 추가 할 수 있습니다 (여전히 root 그건 그렇고) :

    mkdir -v $ DFS / tools

    ln -sv $ DFS / tools /

    로그 아웃 # 루트로 남겨주세요.

  • 원하는 모든 패키지의 소스를 다운로드하십시오. 이것은 물론 당신이 붙어있는 곳입니다. 필요한 모든 것들은 거기에 없습니다. (덧붙여서 나는 GNU binutils 어쨌든.)

실제로 필요한 모든 파일을 다운로드 할 수 있다고 가정하고 계속 눌러 봅시다.

  • LFS가 제안한 DFS를 위해 특별히 불우한 사용자를 만듭니다.

    sudo dscl. -create / Users / lfs

    sudo dscl. -create / Users / lfs UserShell / bin / bash

    sudo dscl. -create / Users / lfs RealName “LFS DFS”

    sudo dscl. -create / Users / lfs UniqueID “2070”# 원하는대로 #

    sudo dscl. -create / Users / lfs PrimaryGroupID 20 # 기본값 ‘staff’

    sudo dscl. -create / Users / lfs NFSHomeDirectory / Users / lfs

    sudo dscl. -passwd / Users / lfs dfs # 다시 맛보기.

  • Mac에서 새 사용자의 homedir을 수동으로 만들어야합니다.

    sudo mkdir / 사용자 / lfs

    sudo chown -R lfs : staff / Users / lfs /

  • 이제 새 사용자에게 소스 및 도구에 대한 액세스 권한 부여

    sudo chown -v lfs $ DFS / tools

    sudo chown -v lfs $ DFS / sources

  • 로그인:

    su – lfs

    암호 : dfs

  • 다음 명령을 실행하여 환경을 정리하십시오 (LFS에서).

    고양이 & gt; ~ / .bash_profile & lt; & lt; “EOF”

    echo “깨끗한 환경에 들어가십시오 …”

    exec env -i HOME = $ HOME TERM = $ TERM PS1 = ‘\ u : \ w \ $’/ bin / bash

    EOF

  • 이제 다음 명령을 실행하십시오 (확실하지 않은 경우 LFS를 참조하십시오).

    고양이 & gt; ~ / .bashrc & lt; & lt; “EOF”

    + h 설정

    umask 022

    DFS = / Volumes / DarwinOS 이전처럼

    LC_ALL = POSIX

    LFS_TGT = $ (uname -m) -dfs-darwin1242 # 가능성을 위해 gcc / configure를 살펴보십시오!

    PATH = / tools / bin : / bin : / usr / bin # 이전의 심볼릭 링크 참고

    LFS LC_ALL LFS_TGT PATH 내보내기

    echo “.bashrc 스크립트가 완료되었습니다. 환경이 준비되었습니다.”

    EOF

  • GCC /configure 꽤 유연합니다. 그레이핑을 시도해보십시오. *- 패턴, 또는 그냥 실행 gcc -v 호스트 시스템이 어떻게 구성되었는지보고 복사하십시오.

  • 이제 lfs 사용자를 로그 아웃하고 다시 로그인하십시오. 이제는 깨끗한 환경을 유지해야합니다.
  • 이제부터 모든 것이 lfs 사용자 내부에서 일어납니다. 당신은 ‘LFS’기호의 반을 ‘DFS’기호로 변환하는 것에서 약간 게으른 것으로 나타났습니다. 미안해.하지만 너는 그 생각을.

이제 가설 섹션으로 가보겠습니다.

여기에서 표준 LFS 절차가 될 것입니다. 소스 추출, 빌드, 설치, 테스트, 소스 삭제. binutils, GCC 및 Glibc의 2 패스는 여전히 필요하지만, 당신은 또한 다음의 작업 카피를 가지고 있어야합니다. libc++.1.dylib – 당신은 2 패스에서도 그렇게해야합니다. LLVM 프로젝트의 libcxx 페이지 몇 가지 자세한 내용은. 일단 컴파일되면, 그것을 넣을 수 있습니다. /usr/lib. xnu 커널을 컴파일하고 설치해야합니다. 몇 가지 자습서 그 방법에 대한 웹 둘러보기) KEXT를 설치하십시오. 필요한 모든 KEXT를 사용할 수 있다고해도 손으로 .kext 패키지에 넣어야합니다. 다시 거기 튜토리얼 커맨드 라인에서 KEXT를 만드는 법.

마지막 비트는 시스템을 부팅 가능하게 만들고 있습니다. 이렇게하려면 다음 명령을 실행합니다.

“$ DFS / usr / sbin / bless”–folder “$ MOUNT / System / Library / CoreServices”–bootefi –verbose

사실 축복의 장소가 실제로 달라지는 것은 아닙니다. 이 폴더는 Apple 표준입니다.

어쨌든, 커널과 KEXT가 올바른 위치에 있다고 가정하면, dyld, launchd, 등등 및 boot.efi 시스템이 제대로 작동하고 부팅 가능해야합니다!

당신이 정말로 원한다면주의를 기울이십시오. launchd 그것은 bash 프롬프트를 실행하는 스크립트 일뿐입니다. PureDarwin Nano 않습니다.

원한다면 다시 한번 KEXT와 바이너리를 직접 작성하십시오. ~이다. 기술적으로 가능합니다. 네가 끝나면 나 한테 전화 해.


이진 요령으로 : 아마, 또한 합법적이지 않은 (테스트되지 않은)

그렇다면 Mountain Lion에서 바이너리, KEXT 및 필수 파일을 찢어 버릴 수없는 이유는 무엇입니까? 음, 아마도 할 수 있습니다. 그러나 이것을하기 위해서는 라이센스가 필요합니다. 또한이 작업을 수행하면 기본적으로 Mountain Lion의 사본을 만들었습니다. 요점 옆에 그런 종류가 아닌가?

일반 하드웨어 용 이진 요령 : 위 (테스트되지 않음)

이거 꽤 많이. ~이다. OSx86 프로젝트 다시 법적인 문제에 곧바로 직면합니다. 이 마지막 두 가지 방법이 확실히 가능하다는 것에는 의문의 여지가 없습니다. Mountain Lion을 일반 하드웨어에서 실행할 수 있다는 사실은 그 증거입니다. 그러나이 모든 사항은 소스에서 자신의 Darwin OS를 합법적으로 컴파일 할 수 있어야합니다.


사이드 노트

당신은 의도적으로 32 비트를 피했음을 눈치 챘을 것입니다. 모든 주요 OS가 64 비트에서 사용할 수있는 세계에서 32 비트를 컴파일하는 데는 별다른 의미가 없습니다. 애플은 실제로 다윈의 디스크 이미지를 제공했다 (Darwin 9까지) 이리 . 그들은 내 Windows 상자에서 완벽하게 작동했습니다.

끝 맺는 말

나는 하루가 끝날 무렵, 사람들이 Mac을 통해 Darwin을 위해, Aqua를 위해 Mac을 구매하지 않는다고 생각합니다. 그 결과 Darwin을 독립형 오픈 소스 제품으로 지원하는 것은 점차 오픈 소스 커뮤니티에 대한 토큰 제스처가되는 지점까지 점차 줄어 들었습니다. 약간의 아이러니 컬 한 사실은 이것에 대해 많은 것을 배우기 위해서는 OSx86 프로젝트로 바로 뛰어 들어야한다는 것입니다. OSx86 프로젝트는 정확하게 승인되지 않았습니다. 그때도 많은 정보가 주위에 없습니다. 퓨어 다윈 시작할 수있는 훌륭한 장소입니다. 조나단 레빈의 저서 모든 것 xnu에 대한 귀중한 참조입니다.

이것은 매우 교육적인 해였습니다. 저는 실제로 그것을하고있는 것처럼 그것을하는 방법을 아는 것만 큼 행복합니다. 나는 어떤 단계에서 작업을 중단해야 할 것입니다.하지만 지금은 그 때입니다. 애플에게 마지막으로 쓸데없는 소리가 들리면, 당신이 매버릭스를 석방 할 때 단지 한 번 더 다윈을 건설하도록 요청하는 것이 너무 많을까요?


답변

분명히 LFS가 Linux 용이고 Darwin이 Linux LFS와 매우 다르다는 것을 알고 있기 때문에 LFS를 Darwin 시스템에 적용하려는 단순한 노력을 넘어서 간단합니다.

Darwin 시스템을 대체 / 개선하려는 많은 커뮤니티 시도가 있습니다. OpenDarwin 프로젝트는 그다지 성공하지 못했지만 Apple의 코드는 너무 어렵다. PureDarwin이 아직 남아있는 프로젝트가 하나있다.
PureDarwin SourceForge
PureDarwin HomePage

개발자 계정을 먼저 얻고 빌드 도구를 가져와 자신 만의 맞춤 커널을 만드는 단계를 밟을 수 있습니다.

Darwin Kernel은 Linux Kernel과 동일한 아키텍처를 갖고 있지 않으므로 Linux Kernel로 대체 할 수 없으므로 컴파일해야합니다.

실제로 PureDarwin 프로젝트에 100 % 스틱을 넣고 다음 스크립트를 호출하면됩니다. Google 코드 – Pure Darwin Switch Kernel 당신이 만든 커스텀 커널 이미지는 괜찮을 것입니다.

그러나 잘 작동하는 다윈 커널을 만드는 방법에 관해서는 새로운 질문이 될 것입니다.