Я прочитал и начал использовать Linux From Scratch (и BLFS) и мне было интересно, могу ли я следовать этому руководству, чтобы создать Darwin Distro, заменив xnu
ядро? Будет ли процесс сильно отличаться от описанного в LFS?
В настоящее время я понимаю, что все, что потребуется для того, чтобы система «Дарвин», а не «Linux», было заменой ядра. Это верно?
РЕДАКТИРОВАТЬ:
В ответ на комментарий убийцы я уточню этот вопрос. В то время как я ищу информацию по этой теме в целом, я ищу что-то вроде « Руководства по созданию дистрибутива Darwin », так же как LFS - это « Руководство по созданию дистрибутива Linux ».
Я ценю, что такая информация, вероятно, будет поступать только от людей из Puredarwin , OpenDarwin или GNU / Darwin, так что это своего рода призыв к ним за помощью. Руководство " Как мы сделали PureDarwin-Nano-Start-To-Finish ", такое как LFS, было бы идеальным, но я знаю, что это требует много.
Ответы:
Обновление 19 апреля 2015 г .:
Спустя два года интерес к этой сфере все еще остается очень низким. Тем не менее, сообщество Hackintosh по-прежнему очень активно, а это означает, что один из немногих загрузчиков с открытым исходным кодом, не поддерживающих Apple, способных загружать xnu (Chameleon и вилки), по-прежнему поддерживается и может загружать Yosemite. Есть также истории успеха загрузки OS X Yosemite в QEMU. Кроме того, благодаря (в настоящее время работающему в Apple) разработчику, который работает с дескриптором winocm , у нас есть порт ARM ядра xnu . Она была самым активным разработчиком, которого я знаю в этой области.
Существует также продолжение Mac OS X Internals Амит Сингх в ближайшее время. Я обычно не люблю упоминать личные страницы людей; однако сервер блогов со всей информацией выглядит немного ненадежным, поэтому посмотрите информационное окно на странице Twitter ameaijou .
Мне удалось создать инструментарий разработки Apple (самодостаточный, однако «Darwin SDK» также был перенесен на Linux ). Я полагаю, что ОС Darwin, возможно, еще можно собрать с нуля - все, чего нам не хватает, - это некоторые Kexts с открытым исходным кодом. Посмотрите это место, и если вы знаете, как вызвать интерес, дайте мне знать! :)
Краткие ответы на этот вопрос:
Технически: да
Практически: нет *
С двоичными кодами: возможно, но не законно (не проверено)
С двоичными кодами для общего оборудования: как указано выше (не проверено)
* если вы не работаете в Apple (* прочищает горло в общем направлении Калифорнии *)
Более длинный ответ:
Это будет довольно долго. Я предлагаю кофе. Если у вас нет времени / желания читать все это, вы можете перейти к «Заключительным замечаниям».
Практически возможно (нет):
К сожалению, Apple отозвала исходный код для слишком большого количества необходимых KEXT и двоичных файлов Дарвина, чтобы сделать компиляцию Darwin OS исключительно из исходного кода. Это все еще технически возможно (вы могли бы написать источник самостоятельно, чтобы исправить его), но у меня просто нет времени, навыков или желания сделать это (и я сомневаюсь, что сообщество краудфандинга было бы очень заинтересовано).
Неудивительно, что ключевым переломным моментом стал выпуск Darwin 10, который привел xnu в мир x86_64. Большинство необходимых источников было до этого, но были только x86. С течением времени значение «открытого исходного кода» Apple, по-видимому, сместилось на «открытый исходный код только на оборудовании Apple», так как KEXT от Apple теперь по большей части зависят от аппаратного обеспечения, так что даже если бы вы могли все поднять и работает (см. ниже), вы все равно будете ограничены аппаратным обеспечением Apple.
Технически возможно (да):
Однако еще не все потеряно. Руководство по LFS пригодилось, и, безусловно, все необходимые настройки могут быть выполнены без фактической сборки ОС Darwin. Кроме того, представленные шаги дают вам почти точную дорожную карту будущего пути, за исключением ядра, KEXT и загрузчика. Хотя мне удалось решить проблему с загрузчиком (по крайней мере, для оборудования Apple).
Если вам интересно, вот полный обзор того, что вам нужно будет сделать:
Убедитесь, что у него есть таблица разделов GUID (GPT), и что когда вы это делаете, у нее есть раздел EFI. Самый простой способ сделать это - воспользоваться дисковой утилитой Apple, но вы можете сделать это в командной строке, если хотите (в других местах есть учебники о том, как это сделать). Важным моментом является то, что при запуске
distil list diskNsM
следующая информация должна быть правильной:Теперь, чтобы следовать руководству LFS (с адаптациями).
Вставьте (используя фактическую точку монтирования, очевидно) в и
DFS=/Volumes/DarwinOS
.bashrc
.bash_profile
Создайте каталог пользователя (
chown
в самом конце 0: 0):Введите
root
:Создайте каталог исходников и установите бит закрепления:
Создайте каталог tools и создайте символическую ссылку на него, чтобы мы могли легко добавить его в $ PATH позже (еще
root
кстати):Загрузите источник всех пакетов, которые вы хотите. Это, конечно, где вы застряли. Все необходимые не там. (Кстати, я все
binutils
равно предпочитаю GNU .)Предполагая, что вы действительно можете загрузить все, что вам нужно, давайте продолжим.
Сделайте непривилегированного пользователя специально для DFS (предложено LFS):
Обратите внимание, что вы должны сделать homedir нового пользователя вручную на Mac:
Теперь предоставьте новому пользователю доступ к источникам и инструментам.
Авторизоваться:
Выполните следующую команду, чтобы очистить среду (из LFS):
Теперь выполните следующую команду (посмотрите, что она делает в LFS, если вы не уверены):
GCC
/configure
довольно гибок. Попробуйте выполнить поиск по*-
шаблону или просто запустите,gcc -v
чтобы посмотреть, как настроен ваш хост-компьютер, и скопируйте его.Хорошо, теперь в гипотетический раздел.
Начиная с этого момента, это будет довольно стандартная процедура LFS: извлечение исходных файлов, сборка, установка, тестирование, удаление исходных текстов. Обратите внимание, что 2 прохода binutils, GCC и Glibc по-прежнему необходимы, НО у вас также должна быть рабочая копия
libc++.1.dylib
- и вам нужно будет сделать это также за 2 прохода. Вы можете увидеть страницу libcxx проекта LLVM для более подробной информации. После компиляции вы можете вставить его/usr/lib
. Вам нужно будет скомпилировать и установить ядро xnu (в Интернете есть несколько учебных пособий о том, как это сделать), а затем установить KEXT. Даже если бы все необходимые KEXT были доступны, вам все равно нужно было бы поместить их в пакет .kext вручную. Снова есть учебники о том, как вручную создать KEXT в командной строке.Последний бит делает систему загрузочной. Для этого вы должны выполнить следующую команду:
На самом деле расположение, чтобы благословить, не имеет значения. Эта папка просто стандартная для Apple.
В любом случае, предполагая , что ядро и кекстов были в правильных местах, вы имели правильные копии
dyld
,launchd
и т.д. на месте иboot.efi
работает правильно, то система должна работать и загрузочным!Обратите внимание, что если вы действительно хотите, вы можете запустить faux
launchd
- это всего лишь скрипт для запуска приглашения bash - это то, что делает PureDarwin Nano .Опять же , все средства, напишите кексты и бинарники себя , если вам нравится - это это технически возможно. Просто позвони мне, когда закончишь.
С двоичными кодами: возможно, но не законно (не проверено)
Итак, почему вы не можете просто скопировать двоичные файлы, KEXT и необходимые файлы из Mountain Lion, благословить том и уйти? Ну, вы, вероятно, можете. Но вам также нужна лицензия для этого. Кроме того, если вы сделаете это, вы просто сделали копию Mountain Lion. Разве это не относится к делу?
С двоичными кодами для общего оборудования: как указано выше (не проверено)
Это в значительной степени является проект OSx86. Опять же, вы сразу же столкнулись с юридическими проблемами. Нет сомнений в том, что эти два последних метода определенно возможны - тот факт, что вы можете запускать Mountain Lion на обычном оборудовании, является доказательством этого - но весь смысл этого заключался в том, чтобы иметь возможность легитимно скомпилировать вашу собственную ОС Darwin из исходных текстов.
Примечание
Вы могли заметить, что я сознательно избегал всего 32-битного. В мире, где каждая основная ОС доступна в 64-битной версии, нет смысла компилировать 32-битную. Apple действительно предоставила образы дисков Дарвина (вплоть до Darwin 9) здесь . Они отлично работали на моей коробке Windows.
Заключительные замечания
Я думаю, в конце концов, люди не покупают Mac для Дарвина, они покупают Mac для Aqua. В результате, поддержка Дарвина как отдельного продукта с открытым исходным кодом постепенно снизилась до такой степени, что это действительно просто символический жест для сообщества открытого кода. Другой немного ироничный факт заключается в том, что для того, чтобы узнать о многом из этого, вам нужно перейти прямо к проекту OSx86, который не является строго санкционированным (мягко говоря). Даже тогда вокруг не так много информации. PureDarwin - отличное место для начала, а книга Джонатана Левина - бесценный справочник по всем вещам.
Это был чрезвычайно образовательный год работы, и я почти так же рад знать, как это сделать, как и на самом деле. Я собираюсь прекратить работу над этим на каком-то этапе, хотя сейчас самое время. В качестве окончательного бесполезного крика Apple, будет ли слишком много просить иметь еще одну сборку Darwin, когда вы выпустите Mavericks?
источник
Очевидно, вы поняли, что LFS предназначена для Linux, и Darwin очень сильно отличается от применяемой LFS для Linux, поэтому просто приложить LFS к системам Darwin очень просто.
Есть много попыток сообщества заменить / улучшить системы Дарвина. Хотя проект OpenDarwin не имеет большого успеха, думаю, код Apple слишком сложен, в то время как остался еще один проект PureDarwin:
PureDarwin SourceForge
PureDarwin HomePage
Сначала получите учетную запись разработчика, соберите их инструменты сборки, а затем вы сможете получить пошаговые инструкции по созданию собственного ядра.
Ядро Дарвина не имеет той же архитектуры, что и ядро Linux, поэтому его нельзя заменить на ядро Linux, поэтому вам нужно скомпилировать его.
На самом деле все, что вам нужно сделать, это на 100% придерживаться проекта PureDarwin, а затем вызвать следующий скрипт: Google Code - Pure Darwin Switch Ядро с пользовательскими изображениями ядра, которые вы сделали, будет в порядке.
Но относительно того, как построить хорошо работающее ядро Дарвина, это был бы новый вопрос.
источник