Cómo se trasladó Linux a la Apple Silicona M1 Mac mini

Linux ahora funciona en Mac mini con procesador M1, pero Apple no facilitó al equipo portar el sistema operativo con su firmware personalizado y rutas de datos únicas. Así es como Corellium lo hizo.

Ahora que Linux es completamente utilizable en Mac con procesadores M1, el equipo de Corellium ha detallado su proceso para portar el sistema operativo.

En la publicación del jueves, Corellium dice que han estado estudiando Appleprocesadores personalizados desde el iPhone 6 lanzado en 2014. La compañía utilizó algunos exploits y el estudio anterior para construir un puerto de kernel para el procesador A10 a principios de 2020.

  

Apple lanzó las Mac con procesador M1 en noviembre de 2020. Una actualización posterior del sistema operativo permitió a los usuarios instalar kernels personalizados. Tras la adición de esa capacidad, el equipo de Corellium comenzó a trabajar en un puerto de Linux.

Corellium dice que el M1 comparte muchos componentes con AppleProcesadores de la serie A. Sin embargo, eso solo ayuda en la medida en que Apple no utiliza los estándares establecidos por otros fabricantes de ARM.

El equipo de Corellium analizó los desafíos exactos que enfrentaron al portar Linux.

Los detalles técnicos

El equipo de Corellium dice Apple no arranca sus CPU con medios tradicionales. Primero, el cargador de arranque ejecuta un ejecutable llamado formato de archivo de objeto Mach (Mach-O) envuelto en un formato contenedor firmado llamado IMG4. Se vuelve aún más complicado a medida que se activan más núcleos de CPU, ya que comienzan en una dirección especificada por un registro de E / S mapeada en memoria (MMIO) y luego comienzan a ejecutar el kernel.

Apple diseñó su propio controlador que estaba fuera de los estándares de ARM Generic Interrupt Controller (GIC) habituales. Las interrupciones del temporizador se enrutan a la Solicitud de interrupción rápida (FIQ), que no es estándar y refleja un sistema ARM de 32 bits más antiguo. El equipo dice que debe proporcionar un conjunto de interrupciones entre procesadores (IPI) para lograr que varios procesadores se comuniquen.

El equipo de Corellium tenía experiencia en el manejo de soporte FIQ y estaba preparado para la mayoría de Appleenfoques no estándar. Al final, el equipo agregó un precargador que actúa como un contenedor para Linux, lo que llevó al arranque del sistema operativo en el procesador M1.

El equipo no tenía un cable de interfaz para el M1 Mac y tuvo que encontrar una ruta de entrada alternativa. De las tres opciones: Bluetooth, el host USB o el host USB xHCI en PCIe, eligieron el host USB y tuvieron que interactuar con un chip en I2C.

Después de tener una conexión USB adecuada, podían conectar un teclado, un mouse y una unidad flash. Esto abrió la posibilidad de ejecutar una distribución Linux de escritorio normal.