portar XNU a ARM (CPU OMAP5)

Hace dos semanas me he tomado algún tiempo para mirar el puerto XNU a la arquitectura ARM realizado por el promotor que va por el mango «winocm». . Hoy me he decidido a resumir mi experiencia

He aquí una breve lista de verificación si desea iniciar portar XNU a su pensión:

  • Empezar desde la lectura Wiki https :/ / github.com / darwin-on-brazo / wiki / wiki /-a sea de arranque del sistema de construcción
  • Clone el repositorio DeviceTrees: https://github.com/darwin-on-arm/ DeviceTrees. Básicamente, usted puede usar los archivos DTS ligeramente modificadas de Linux, pero debido al hecho de que el compilador DTC está sin terminar, vas a tener que cambiar el nombre y comente algunas entradas. Por ejemplo, los macros de cabeceras C incluidos no se expanden, por lo que tendrás que codificar los valores para cosas como A15 VGIC IRQ
  • Obtenga image3maker que es una herramienta para crear imágenes soportados tanto por GenericBooter y iBoot gestores de arranque de Apple https://github.com/darwin-on-arm/image3maker
  • Utilice el DTC de https://github.com/winocm/dtc-AppleDeviceTree para compilar los archivos DTS antes mencionados
  • Echa un vistazo a init / main.c. Puede que tenga que agregar una entrada hackish la forma en que ha hecho por la junta «HD2» para limitar la cantidad de memoria RAM disponible.
  • he construido todas las herramientas en OS X, pero luego nos enteramos de que es más fácil para utilizar la imagen chroot linux prebuilt disponible en: https://github.com/stqism/xnu-chroot-x86_64

El paso más indocumentados en realidad está utilizando la herramienta image3maker y edificio de arranque imágenes. Usted tiene que poner el en el directorio «imágenes» en el código-GenericBooter siguiente. En cuanto al disco de memoria, usted puede encontrar algunos en github o descomprimir el firmware iphone, pero yo simplemente crear un archivo vacío, lo cual está bien ya que yo no tengo tan lejos en el arranque.

Edificio GenericBooter- después es sencillo, pero hay que exportar la ruta a la cadena de herramientas, y posiblemente editar el Makefile para apuntar a la correcta prefijo CROSS_COMPILE />
rm / Mach. *
../image3maker/image3maker-f .. / xnu / BUILD / obj/DEBUG_ARM_OMAP5432_UEVM/mach_kernel-t KRNL-o images/Mach.img3
make clean
hacer

En el disco RAM, debe utilizar el tipo «rdsk», y «dtre» para el Árbol de Dispositivos (al parecer también hay xmdt de árbol de dispositivos xml, pero yo no lo probamos);

El arranque en el OMAP5 vía fastboot (sin u-boot):
. / usbboot-f &
fastboot-c «-no-cache = serial 0-v-x CPU = 1 maxmem = 256 mem = 256M console = ttyO2»-b boot 0x83ff8040 vmlinux.raw

Algunas notas sobre la organización actual del kernel XNU y qué se puede mejorar:.

  • Todos los makefiles que contienen identificadores de mesa deben ser ordenados alfabéticamente, sólo por conveniencia cuando se agregan nuevas tablas
  • Mira en límite de tamaño de la memoria. Tuve que limitar la RAM a 256 MB para poder arrancar. Si se permite a todo el 2Gb disponible en la placa OMAP5432 uEVM, el kernel no «robar páginas» durante la inicialización (como se puede ver en la captura de pantalla).
  • he encontrado un problema

OMAP5 es un ARM Cortex-A15 núcleo. Actualmente el puerto XNU sólo tiene soporte para la CPU A9, pero si vamos a arrancar sin SMP y caché L2, las diferencias entre estas arquitecturas no son un gran problema. OMAP5 tiene un ARM genérica GIC (Controlador Global Interrupt), el cual es en realidad compatible con el GIC en las CPUs MSM8xxx, es decir, con APQ8060 en HP TouchPad, el apoyo a los que se añadió por winocm. UART es un genérico 16550, compatible a la de chips OMAP3. Teniendo en cuenta todo esto, he conseguido que el núcleo básicamente el arranque y la impresión de algunos mensajes a la UART.

Por desgracia, no he logrado abrir el temporizador todavía. La razón es que me arranca el núcleo a través de USB directamente después OMAP5 cargador interno, omitiendo u-boot y la inicialización del hardware. De alguna forma el chip eMMC interna en mi pensión no me permite sobrescribir la partición u-boot (aunque me las arreglé para hacerlo una vez cuando recibí el tablero) />
Tengo previsto ver en él una vez más , ahora con hardware pre-inicializado por el u-boot, y escribir un post detallado. Parece que el TODO es la siguiente:

  • rootfs linux espejo (que dependen de la tercera repos github partido es peligroso)
  • crianza de Timer OMAP5
  • Construyendo mi propia RAMDisk
  • Habilitación del soporte eMMC
  • Jugando con IOKit

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *