• ¿Que kexts controlan las tarjetas ATI?

    Para que una tarjeta gráfica ATI o AMD funcione correctamente en Mac OS X o macOS no alcanza con que el sistema detecte el dispositivo PCI. Tienen que cargarse correctamente varios componentes: el controlador de la familia de la tarjeta, el framebuffer, el kext de soporte y el kext encargado de la aceleración gráfica.

    Cuando alguno de esos componentes no se carga, lo normal es que tengamos imagen básica, pero sin aceleración gráfica, sin Quartz Extreme, sin Core Image, sin cambios correctos de resolución o con problemas en las salidas de vídeo.

    El problema es que Apple fue cambiando los nombres de los kexts entre Snow Leopard y Mojave. En las versiones antiguas se usaba principalmente el prefijo ATI. En las versiones posteriores, tras la transición de marca, empezaron a aparecer los kexts con prefijo AMD.

    Componentes principales

    En líneas generales, las tarjetas ATI/AMD dependen de estos bloques:

    Componente Función
    Controller Controla una familia concreta de tarjetas. Suele llamarse ATIxxxxController.kext o AMDxxxxController.kext.
    Framebuffer Gestiona salidas de vídeo, conectores, resolución, refresco y detección de pantallas.
    Support Proporciona soporte común para el resto de kexts gráficos de ATI/AMD.
    Accelerator Activa la aceleración gráfica, Quartz Extreme, Core Image, OpenGL y, en versiones modernas, Metal.

    Por eso, cuando revisamos si una gráfica está bien cargada, no debemos mirar solamente si aparece el nombre de la tarjeta en el sistema. Hay que comprobar qué kexts se han cargado realmente.

    kextstat | grep -i ati
    kextstat | grep -i amd
    kextstat | grep -i radeon
    

    Snow Leopard: Mac OS X 10.6

    En Snow Leopard todavía predominan los nombres ATI. Según la tarjeta y la versión exacta de 10.6, podemos encontrarnos con estos kexts:

    Familia aproximada Kext principal de aceleración Kexts relacionados
    Radeon X1000 ATIRadeonX1000.kext ATISupport.kext, ATIFramebuffer.kext, ATINDRV.kext
    Radeon HD 2000 / HD 3000 / HD 4000 ATIRadeonX2000.kext ATIxxxxController.kext, ATISupport.kext, ATIFramebuffer.kext
    Radeon HD 5000 / HD 6000 ATIRadeonX3000.kext ATI5000Controller.kext, ATI6000Controller.kext, ATISupport.kext, ATIFramebuffer.kext

    ATIRadeonX1000.kext, ATIRadeonX2000.kext y ATIRadeonX3000.kext son los kexts que aportan la parte de aceleración gráfica. Los kexts Controller y Framebuffer son los que hacen que la tarjeta se inicialice correctamente y que las salidas de vídeo funcionen como corresponde.

    En instalaciones antiguas con Chameleon o Chimera era habitual usar GraphicsEnabler=Yes para inyectar propiedades de la gráfica durante el arranque. Eso podía ser necesario para muchas ATI antiguas, pero no debe entenderse como una regla universal para todas las versiones ni para todos los bootloaders.

    GraphicsEnabler=Yes
    

    Lion: Mac OS X 10.7

    En Lion se mantiene todavía gran parte de la estructura ATI. Para una tarjeta ATI funcional normalmente necesitamos que se carguen estos elementos:

    • ATIxxxxController.kext, correspondiente a la familia de la tarjeta.
    • ATISupport.kext, con soporte común para ATI.
    • ATIFramebuffer.kext o framebuffer equivalente.
    • ATIRadeonX2000.kext o ATIRadeonX3000.kext, según la generación.

    Si el sistema detecta la tarjeta pero no carga el kext de aceleración, tendremos imagen, pero no tendremos aceleración gráfica real. Es el caso típico en el que el escritorio funciona de forma lenta, los efectos gráficos fallan o no aparece soporte completo para Quartz Extreme y Core Image.

    Mountain Lion: OS X 10.8

    En Mountain Lion empieza a hacerse más visible la transición de ATI a AMD. Dependiendo de la gráfica, podemos ver todavía kexts con prefijo ATI, pero empiezan a aparecer componentes con prefijo AMD, como AMDRadeonAccelerator.kext.

    Esta versión es importante porque marca el cambio de nomenclatura: Apple empieza a abandonar progresivamente la estructura clásica basada en ATIRadeonX2000.kext y ATIRadeonX3000.kext para pasar a una estructura más moderna con kexts AMD.

    Mavericks, Yosemite, El Capitan, Sierra y High Sierra

    Entre OS X 10.9 y macOS 10.13, lo normal es encontrar una estructura basada en kexts AMD. Los nombres exactos dependen de la familia de GPU, pero el patrón suele ser este:

    Componente Ejemplos habituales
    Controller AMD5000Controller.kext, AMD6000Controller.kext, AMD7000Controller.kext, AMD8000Controller.kext, AMD9000Controller.kext, AMD9500Controller.kext
    Framebuffer AMDFramebuffer.kext, AMDLegacyFramebuffer.kext
    Support AMDSupport.kext, AMDLegacySupport.kext
    Aceleración AMDRadeonX3000.kext, AMDRadeonX4000.kext, AMDRadeonX4100.kext, AMDRadeonX4250.kext

    En estas versiones ya no conviene pensar solamente en “qué serie comercial tiene la tarjeta”, sino en qué GPU real monta. ATI y AMD reutilizaron nombres comerciales de forma bastante confusa. Dos tarjetas con nombres parecidos pueden usar chips distintos, y dos tarjetas con nombres comerciales diferentes pueden pertenecer a la misma familia interna.

    Por ejemplo, algunas tarjetas vendidas como una serie superior podían estar basadas realmente en una generación anterior. Por eso, antes de tocar kexts, conviene identificar el Device ID y la familia real de la GPU.

    ioreg -l | grep -i ATY
    ioreg -l | grep -i AMD
    system_profiler SPDisplaysDataType
    

    Mojave: macOS 10.14

    Mojave cambia bastante el panorama porque Apple empieza a exigir soporte Metal para una experiencia gráfica normal. Muchas tarjetas ATI/AMD antiguas que podían funcionar en High Sierra dejan de ser una opción práctica en Mojave.

    En Mojave desaparece el soporte nativo para varias familias legacy. Esto afecta especialmente a muchas Radeon HD 5000 y HD 6000, ya que los controladores legacy dejan de estar presentes en la instalación estándar de Mojave.

    Los kexts relevantes en Mojave para AMD suelen estar alrededor de estas familias:

    Familia aproximada Kexts habituales en Mojave
    Radeon HD 7000 / primera generación GCN AMD7000Controller.kext, AMDFramebuffer.kext, AMDRadeonX4000.kext
    Radeon R7 / R9 AMD8000Controller.kext, AMD9000Controller.kext, AMDFramebuffer.kext, AMDRadeonX4000.kext
    Radeon RX 400 / RX 500, Polaris AMD9500Controller.kext, AMDFramebuffer.kext, AMDRadeonX4100.kext o componentes relacionados de la familia AMDRadeonX4000
    Vega AMD10000Controller.kext, AMDFramebuffer.kext, AMDRadeonX5000.kext

    Si queremos usar Mojave, lo recomendable es partir directamente de una gráfica compatible con Metal. En la práctica, las Radeon HD 7950, algunas Radeon R9 basadas en GCN, las RX 560, RX 570, RX 580 y algunas Vega son opciones mucho más razonables que intentar forzar tarjetas antiguas sin soporte Metal.

    Relación rápida entre familia y kext

    Tarjeta o familia Kext de aceleración habitual Notas
    Radeon X1000 ATIRadeonX1000.kext Útil en versiones antiguas. No es una opción para Mojave.
    Radeon HD 2000 / HD 3000 / HD 4000 ATIRadeonX2000.kext Soporte legacy. Dependiente de versión y framebuffer.
    Radeon HD 5000 / HD 6000 ATIRadeonX3000.kext o AMDRadeonX3000.kext Funcionales en versiones anteriores, pero problemáticas o no soportadas en Mojave.
    Radeon HD 7000 / R7 / R9 GCN AMDRadeonX4000.kext Mejor base para High Sierra y Mojave si la tarjeta es compatible.
    Radeon RX 400 / RX 500 AMDRadeonX4100.kext o familia AMDRadeonX4000 Polaris. Buena opción para Mojave.
    Radeon Vega AMDRadeonX5000.kext Soporte moderno en Mojave, especialmente en versiones actualizadas.

    Framebuffer y salidas de vídeo

    El framebuffer es una pieza crítica. No se limita a mostrar imagen: define cómo se comportan las salidas de vídeo, qué conectores existen, qué tipo de señal se usa y cómo se detectan las pantallas.

    Esto explica por qué una tarjeta puede tener aceleración gráfica, pero fallar en HDMI, DVI, VGA, DisplayPort o en una segunda pantalla. En esos casos, muchas veces el problema no está en el kext de aceleración, sino en el framebuffer elegido o en la forma en la que se han inyectado los conectores.

    En sistemas antiguos se usaban nombres de framebuffer como Alopias, Sphyrna, Iago, Lamna, Megalodon, Triakis, Motmot, Quail o Raven. Cada framebuffer estaba pensado para una configuración concreta de hardware Apple, por lo que no todos funcionan correctamente con cualquier tarjeta de PC.

    En bootloaders antiguos se podía cambiar el framebuffer inyectando propiedades como estas:

    @0,name
    ATY,NombreDelFramebuffer
    
    @1,name
    ATY,NombreDelFramebuffer
    

    En configuraciones más modernas con Clover u OpenCore, lo normal es inyectar propiedades mediante DeviceProperties, SSDT o herramientas como WhateverGreen cuando la versión de macOS y el hardware lo permiten.

    Cuándo hay que parchear el Info.plist

    Si la tarjeta pertenece a una familia soportada pero su Device ID no aparece en el kext correspondiente, el sistema puede no cargar el controlador. En esos casos, históricamente se parcheaba el Info.plist del kext para añadir el identificador de la tarjeta.

    El identificador suele tener este formato:

    0xXXXX1002
    

    1002 es el Vendor ID de ATI/AMD. La parte XXXX corresponde al Device ID concreto de la GPU.

    Antes de modificar kexts del sistema debemos tener claro qué estamos haciendo, porque un parche incorrecto puede impedir el arranque gráfico o romper la caché de extensiones. Después de modificar kexts, normalmente hay que reparar permisos y reconstruir cachés.

    sudo chown -R root:wheel /System/Library/Extensions/NombreDelKext.kext
    sudo chmod -R 755 /System/Library/Extensions/NombreDelKext.kext
    sudo touch /System/Library/Extensions
    sudo kextcache -i /
    

    Resumen práctico

    Para Snow Leopard y Lion debemos mirar principalmente los kexts ATI: ATIRadeonX1000.kext, ATIRadeonX2000.kext, ATIRadeonX3000.kext, ATIFramebuffer.kext, ATISupport.kext y los ATIxxxxController.kext.

    Para Mountain Lion y versiones posteriores empieza la transición hacia AMD: AMDRadeonAccelerator.kext, AMDSupport.kext, AMDFramebuffer.kext, AMDxxxxController.kext y los AMDRadeonX3000, AMDRadeonX4000, AMDRadeonX4100 o AMDRadeonX5000 según la familia de la gráfica.

    Para Mojave debemos asumir una regla práctica: si la tarjeta no soporta Metal, no es una buena candidata. Podemos intentar parches legacy, pero no es la vía recomendable si buscamos un sistema estable.

    La forma correcta de diagnosticar una ATI/AMD no es preguntar solamente “qué modelo comercial tengo”, sino comprobar tres cosas: GPU real, Device ID y kexts cargados. Con esos datos podemos saber si el problema está en el controlador, en la aceleración, en el framebuffer o en la inyección de propiedades.


    Deja una respuesta