He leído y realizado Linux From Scratch (y BLFS) y me preguntaba, ¿puedo seguir esta guía para crear una distribución de Darwin sustituyendo el xnu
kernel? ¿El proceso sería muy diferente al descrito en LFS?
Mi comprensión actual es que todo lo que se necesitaría para hacer que el sistema "Darwin" en lugar de "Linux" fuera la sustitución del núcleo. ¿Es esto correcto?
EDITAR:
En respuesta al comentario de Killermist, refinaré esta pregunta. Mientras busco información sobre este tema en general, lo que busco específicamente es algo así como una " Guía de creación de distribución de Darwin ", al igual que el LFS es una " Guía de creación de distribución de Linux ".
Aprecio que tal información probablemente solo provenga de personas de Puredarwin , OpenDarwin o GNU / Darwin, por lo que es una especie de reclamo de ayuda. Una guía " How-We-Made-Pure-Darwin-Nano-Start-To-Finish " como LFS sería perfecta, pero sé que es mucho pedir.
Respuestas:
Actualización 19 abr 2015:
Después de dos años, todavía parece haber muy poco interés en esta esfera. Sin embargo, la comunidad Hackintosh sigue siendo muy activa, lo que significa que uno de los pocos gestores de arranque de código abierto que no son Apple capaces de arrancar xnu (Chameleon and forks) todavía se mantiene y puede arrancar Yosemite. También hay historias de éxito que arrancan OS X Yosemite dentro de QEMU. Además, gracias a un desarrollador (ahora empleado por Apple) que utiliza el winocm , tenemos un puerto ARM del núcleo xnu . Ella ha sido la desarrolladora más activa que conozco en esta área.
También hay una secuela de Mac OS X Internals de Amit Singh próximamente. Por lo general, no me gusta mencionar las páginas personales de las personas; sin embargo, el servidor de blogs con toda la información parece ser poco confiable, por lo tanto, consulte el cuadro de información en la página de Twitter de ameaijou .
He logrado construir la cadena de herramientas de desarrollo de Apple (un auto-host, sin embargo, el "Darwin SDK" también se ha portado a Linux ). Creo que un sistema operativo Darwin aún puede ser posible construir desde cero, sobre todo lo que podría faltar son algunos Kexts de código abierto. Mire este espacio, y si sabe cómo despertar interés, ¡hágamelo saber! :)
Respuestas cortas a esta pregunta:
Técnicamente: sí
Prácticamente: no *
Con trucos binarios: probablemente, pero tampoco legal (no probado)
Con trucos binarios para hardware genérico: como arriba (no probado)
* a menos que trabajes en Apple (* se aclara la garganta en dirección general de California *)
Respuesta más larga:
Esto va a ser bastante largo. Sugiero café. Si no tiene el tiempo / ganas de leerlo todo, puede saltar a "Observaciones finales".
Prácticamente posible (No):
Lamentablemente, Apple ha retirado el código fuente de demasiados KEXTs y binarios necesarios de Darwin para hacer posible la compilación de un sistema operativo Darwin únicamente desde la fuente. Todavía es técnicamente posible (podría escribir la fuente usted mismo para repararlo correctamente), pero simplemente no tengo el tiempo, las habilidades o la inclinación para hacerlo (y dudo que la comunidad de financiación colectiva esté muy interesada).
Como era de esperar, el punto clave fue el lanzamiento de Darwin 10, que llevó a xnu a x86_64-land. La mayoría de las fuentes necesarias existían antes, pero solo eran x86. A medida que pasó el tiempo, el significado de "código abierto" de Apple parece haber cambiado a "código abierto solo en el hardware de Apple", ya que los KEXT de Apple ahora son específicos de hardware en general, por lo que incluso si pudiera obtener todo corriendo (ver más abajo) todavía estaría confinado al hardware de Apple.
Técnicamente posible (sí):
Sin embargo, no todo está perdido. La guía LFS fue útil y ciertamente toda la configuración necesaria se puede llevar a cabo sin construir realmente el sistema operativo Darwin. Además, los pasos presentados le dan una hoja de ruta casi exacta de la ruta por delante, menos el núcleo, los KEXT y el gestor de arranque. Sin embargo, logré resolver el problema del cargador de arranque (al menos para el hardware de Apple).
Si está interesado, aquí hay una descripción completa de lo que tendrá que hacer:
Asegúrese de que tenga una tabla de particiones GUID (GPT) y que cuando lo haga tenga una partición EFI. La forma más fácil de hacerlo es a través de la Utilidad de Discos de Apple, pero puede hacerlo en la línea de comandos si lo desea (hay tutoriales en otros lugares sobre cómo hacerlo). El punto importante es que cuando ejecuta
distil list diskNsM
, la siguiente información debe ser correcta:Ahora a seguir la guía LFS (con adaptaciones).
Insertar (usando el punto de montaje real, obviamente) en y
DFS=/Volumes/DarwinOS
.bashrc
.bash_profile
Haga el directorio del usuario (
chown
a 0: 0 al final):Ingrese
root
:Haga el directorio de fuentes y establezca el bit fijo:
Cree el directorio de herramientas y cree un enlace simbólico para que podamos agregarlo fácilmente a $ PATH más tarde (aún
root
por cierto):Descargue la fuente de todos los paquetes que desee. Esto es, por supuesto, donde te quedas atascado. Todos los necesarios no están allí. (Por cierto, prefiero GNU de
binutils
todos modos).Suponiendo que de hecho pudieras descargar todos los que necesitabas, sigamos adelante.
Cree un usuario desfavorecido específicamente para DFS (sugerido por LFS):
Tenga en cuenta que debe realizar el homedir del nuevo usuario manualmente en una Mac:
Ahora otorgue al nuevo usuario acceso a las fuentes y herramientas
Iniciar sesión:
Ejecute el siguiente comando para limpiar el entorno (desde LFS):
Ahora ejecute el siguiente comando (consulte LFS para saber qué hace si no está seguro):
El CCG
/configure
es bastante flexible. Intente ajustar el*-
patrón, o simplemente ejecutegcc -v
para ver cómo se configuró su máquina host y copie eso.Bien ahora a la sección hipotética.
A partir de aquí, será un procedimiento LFS estándar: extraer fuentes, construir, instalar, probar, eliminar fuentes. Tenga en cuenta que los 2 pases de binutils, GCC y Glibc todavía son necesarios, PERO TAMBIÉN debe tener una copia de trabajo
libc++.1.dylib
, y también deberá hacerlo en 2 pases. Puede ver la página libcxx del proyecto LLVM para obtener más detalles. Una vez compilado, puedes ponerlo/usr/lib
. Tendrá que compilar e instalar el núcleo xnu (hay algunos tutoriales en la web sobre cómo hacerlo) y luego instalar los KEXT. Incluso si todos los KEXT requeridos estuvieran disponibles, aún tendría que ponerlos en el paquete .kext a mano. Una vez más, hay tutoriales sobre cómo crear un KEXT a mano en la línea de comandos.El último bit es hacer que el sistema sea de arranque. Para hacer eso, ejecutarías el siguiente comando:
En realidad, el lugar para bendecir realmente no hace la diferencia. Esa carpeta es solo estándar de Apple.
En cualquier caso, suponiendo que el núcleo y kexts estaban en los lugares adecuados, que tenía copias adecuadas de
dyld
,launchd
, etc en su lugar yboot.efi
funcionaba correctamente, el sistema debería estar trabajando y arranque!Tenga en cuenta que si realmente quisiera, podría ejecutar una imitación,
launchd
eso es solo un script para ejecutar un indicador de bash, eso es lo que hace PureDarwin Nano .Nuevamente, por supuesto, escriba los KEXT y los binarios usted mismo si lo desea: es técnicamente posible. Solo llámame cuando hayas terminado.
Con trucos binarios: probablemente, pero tampoco legal (no probado)
Entonces, ¿por qué no puedes simplemente extraer los binarios, los KEXT y los archivos necesarios de Mountain Lion, bendecir el volumen y listo? Bueno, probablemente puedas. Pero también necesitas una licencia para hacer esto. Además, si haces esto, básicamente has hecho una copia de Mountain Lion. ¿No es eso algo fuera de lugar?
Con trucos binarios para hardware genérico: como arriba (no probado)
Esto es más o menos el proyecto OSx86. Una vez más, te encuentras con problemas legales de inmediato. No hay duda de que estos dos últimos métodos son definitivamente posibles; el hecho de que pueda ejecutar Mountain Lion en hardware genérico es prueba de eso, pero el objetivo de esto era poder compilar legítimamente su propio sistema operativo Darwin desde la fuente.
Nota al margen
Es posible que haya notado que he evitado deliberadamente cualquier cosa de 32 bits. En un mundo donde todos los principales sistemas operativos están disponibles en 64 bits, no tiene mucho sentido compilar uno de 32 bits. Apple realmente proporcionó imágenes de disco de Darwin (hasta Darwin 9) aquí . Funcionaron perfectamente en mi caja de Windows.
Observaciones finales
Supongo que al final del día, la gente no compra Mac para Darwin, sino que compra Mac para Aqua. Como resultado, el apoyo a Darwin como producto independiente de código abierto ha disminuido gradualmente hasta el punto en que realmente es solo un gesto simbólico para la comunidad de código abierto. El otro hecho un poco irónico es que para aprender mucho sobre esto, debe saltar directamente al proyecto OSx86, que no está sancionado exactamente (para decirlo con suavidad). Incluso entonces, no hay mucha información disponible. PureDarwin es un excelente lugar para comenzar, y el libro de Jonathan Levin es una referencia invaluable para todas las cosas xnu.
Este ha sido un año de trabajo extremadamente educativo, y estoy casi tan feliz de saber cómo hacerlo como lo estaría haciendo realmente. Sin embargo, voy a tener que dejar de trabajar en eso en algún momento y ahora es ese momento. Como último grito inútil a Apple, ¿sería demasiado pedir tener una versión más de Darwin cuando lance Mavericks?
fuente
Obviamente, usted ha reconocido que el LFS es para Linux y que Darwin es muy diferente del LFS de Linux aplicado, por lo que es más simple que sus esfuerzos individuales para aplicar el LFS a los sistemas de Darwin.
Hay muchos intentos de la comunidad para reemplazar / mejorar los sistemas Darwin. Si bien el proyecto OpenDarwin no tiene mucho éxito, supongo que el código de Apple es demasiado difícil, mientras que todavía queda un proyecto PureDarwin:
PureDarwin SourceForge
PureDarwin HomePage
Primero obtenga una cuenta de desarrollador, tome sus herramientas de compilación, luego puede obtener los pasos para hacer su propio kernel personalizado.
Darwin Kernel no tiene la misma arquitectura que Linux Kernel, por lo tanto, no se puede reemplazar con Linux Kernel, por lo que debe compilarlo.
En realidad, todo lo que necesita hacer es apegarse al 100% con el proyecto PureDarwin, luego llamar al siguiente script: Google Code: Kernel de conmutador Darwin puro con las imágenes de kernel personalizadas que haya creado estarán bien.
Pero con respecto a cómo construir un buen Darwin Kernel que funcione, esa sería una nueva pregunta.
fuente