Proponen la implementación de un controlador GPU escrito en Rust, para las Apple AGX G13 y G14
Se dio a conocer hace poco la noticia de que se ha propuesto una implementación preliminar del controlador drm-asahi para las GPU de las series Apple AGX G13 y G14 utilizadas en los chips Apple M1 y M2 en la lista de correo de desarrolladores del kernel de Linux.
El controlador está escrito en Rust y, además, incluye un conjunto de enlaces universales sobre el subsistema DRM (Direct Rendering Manager) que se puede usar para desarrollar otros controladores de gráficos en Rust.
El conjunto de parches publicado hasta ahora se ha propuesto solo para su discusión por parte de los desarrolladores principales (RFC), pero puede aceptarse en el equipo principal después de que se complete la revisión y se eliminen las deficiencias identificadas.
Esta es mi primera versión de las abstracciones de Rust para el DRM subsistema. Incluye las propias abstracciones, algunas menores cambios de requisitos previos en el lado C, así como el controlador de GPU drm-asahi (para referencia sobre cómo se usan las abstracciones, pero no necesariamente destinados a aterrizar juntos).
Estos parches se aplican en la parte superior del árbol en [1], que se basa en 6.3-rc1 con una gran cantidad de compromisos de abstracción/soporte de Rust agregados en arriba. La mayoría de estos no son requisitos previos para las abstracciones de DRM. ellos mismos, sino sólo del conductor.
Desde diciembre, el controlador se incluye en el paquete con el kernel para la distribución de Asahi Linux y ha sido probado por los usuarios de este proyecto.
El controlador se puede utilizar en distribuciones de Linux para organizar el entorno gráfico en dispositivos Apple con SoC M1, M1 Pro, M1 Max, M1 Ultra y M2. Al desarrollar el controlador, se intentó no solo aumentar la seguridad al minimizar los errores al trabajar con la memoria en el código ejecutado en el lado de la CPU, sino también proteger parcialmente contra los problemas que surgen al interactuar con el firmware.
En particular, el controlador proporciona ciertos enlaces para estructuras de memoria compartida no seguras con cadenas complejas de punteros utilizados en el firmware para interactuar con el controlador. El controlador propuesto se usa junto con el controlador asahi Mesa, que brinda compatibilidad con OpenGL en el espacio del usuario y pasa las pruebas de compatibilidad con OpenGL ES 2 y está casi listo para admitir OpenGL ES 3.0.
Al mismo tiempo, el controlador que funciona a nivel de kernel se desarrolla inicialmente teniendo en cuenta el soporte futuro para la API de Vulkan, y la interfaz de programación para interactuar con el espacio del usuario se diseña teniendo en cuenta la UAPI proporcionada por el nuevo controlador Intel Xe.
Sobre los problemas conocidos se mencionan los siguientes:
- La integración de Rust existente actualmente no permite construir abstracciones como módulos, por lo que las abstracciones de Rust solo están disponibles para los componentes DRM integrados.
- DRM se basa en gran medida en el patrón de “subclases” para objetos de controlador, y esto no se corresponde bien con Rust.
- Actualmente, solo se implementa lo necesario para el controlador (más una pequeña cantidad de
extras obvios donde tiene sentido una mejor integridad de la API). - drm::mm termina requiriendo un mutex incorporado en la abstracción, en su lugar
de delegar eso al usuario con las reglas habituales de mutabilidad de Rust.
Esto se debe a que los nodos se pueden descartar en cualquier momento y esas operaciones
necesita estar sincronizado. - En el lado de Mesa, actualmente se cuenta con el controlador Gallium que en su mayoría ya está aguas arriba (faltan los bits UAPI en su mayoría) y
pasa las pruebas dEQP GLES2/EGL, con la mayor parte de GLES3.0 pasando en
Ramas upstream de trabajo en curso. Esta es una ingeniería inversa controlador comunitario, por lo que se menciona que aún queda mucho por hacer en este aspecto.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.