Hace algunos meses compartimos aquí en el blog la noticia de la iniciativa para el soporte de Linux para el chip Apple M1, promovida por los proyectos Asahi Linux y Corellium los cuales durante todo este tiempo han estado trabajando y ahora ha llegado al punto en que es posible ejecutar el escritorio GNOME en un entorno Linux que se ejecuta en un sistema con un chip Apple M1.
La visualización se organiza mediante un framebuffer y la compatibilidad con OpenGL se proporciona mediante el software rasterizador LLVMPipe. El siguiente paso es habilitar el coprocesador de pantalla para una salida de hasta 4K, que ya ha sido sometida a ingeniería inversa.
El proyecto Asahi ha logrado el soporte inicial para componentes SoC M1 que no son GPU en el núcleo central de Linux. En el entorno Linux demostrado, además de las capacidades del kernel estándar, se utilizan varios parches adicionales relacionados con PCIe, el controlador pinctrl para el bus interno y el controlador de pantalla. Estas adiciones permitieron la visualización en pantalla y el funcionamiento de USB y Ethernet. La aceleración de gráficos aún no se utiliza.
LLVMPipe, my shoddy display controller, and hours of @svenpeter42's patience presents….
GNOME Shell on the Apple M1, bare metal.
No, it's not GPU accelerated. Yes, I'm sending this tweet from it. pic.twitter.com/P4YuPEnbvp
— Alyssa Rosenzweig (@alyssarzg) August 22, 2021
El M1 representa un enorme desafío de ingeniería inversa, con una gran cantidad de hardware a medida y completamente indocumentado. Un enfoque para el hardware de ingeniería inversa es el sondeo a ciegas, como solíamos realizar la ingeniería inversa del controlador de interrupción de Apple, pero esto realmente no funciona para hardware más complicado.
Para comprender correctamente cómo se maneja el hardware, tenemos que mirar la única pieza de documentación que existe: macOS en sí. Sería técnicamente posible desensamblar y aplicar ingeniería inversa a los propios controladores de macOS, pero esto plantea desafíos legales que podrían poner en peligro el estado de los derechos de autor de nuestro proyecto, además de ser ineficiente, ya que gran parte del código es específico del marco del controlador de macOS. y no nos da ninguna información útil sobre el hardware.
Curiosamente, para aplicar ingeniería inversa al SoC M1, el proyecto Asahi, en lugar de intentar desmontar los controladores de macOS, implementó un hipervisor que se ejecuta entre macOS y el chip M1 e intercepta y registra de forma transparente todas las operaciones con el chip. Entre las características de SoC M1 que dificultan la implementación del soporte para el chip en sistemas operativos de terceros, se menciona la adición de un coprocesador al controlador de pantalla (DCP).
En el lado del coprocesador especificado, se elimina la mitad de la funcionalidad del controlador de pantalla de macOS, que llama a las funciones prefabricadas del coprocesador a través de una interfaz RPC especial.
En cambio, un enfoque mucho más seguro que ha sido utilizado por proyectos como Nouveau en el pasado es registrar un registro de los accesos al hardware que realizan los controladores oficiales en un sistema real, sin tener que mirar el código. Nouveau logró esto mediante el uso de un controlador de Linux para interceptar los accesos del controlador oficial de Linux de Nvidia. Por supuesto, los controladores M1 de Apple son para macOS, no para Linux. Si bien podríamos implementar el mismo enfoque con un parche personalizado para el núcleo de código abierto del kernel de macOS, decidimos ir un nivel más profundo y construir un hipervisor que pueda ejecutar la totalidad de macOS, sin modificar, en una máquina virtual que lo presenta de manera transparente. el verdadero hardware M1.
Los entusiastas ya han descubierto suficientes llamadas a esta interfaz RPC para usar el coprocesador para la visualización, así como para controlar el cursor de hardware y realizar operaciones de composición y escalado.
El problema es que la interfaz RPC depende del firmware y los cambios en cada versión de macOS, por lo que Asahi Linux planea admitir solo ciertas versiones de firmware.
En primer lugar, se proporcionará soporte para el firmware enviado con macOS 12 «Monterey». No es posible descargar la opción de firmware requerida, ya que el firmware es instalado por iBoot en la etapa previa a la transferencia de control al sistema operativo y con verificación por firma digital.
Fuente: https://asahilinux.org