
La definición del puente raíz de la tabla DSDT de un sistema Windows (ACPI PNP0A08 o PNP0A03) suele limitarse a un espacio reservado de 32 bits (menos de 4 GB), con capacidad suficiente para alojar los dispositivos PCIe del portátil. A continuación, se establece un valor TOLUD de marca de agua y se bloquea en el firmware del sistema. El sistema operativo Windows respeta la definición del puente raíz y asigna dispositivos PCIe dentro de ella. macOS ignora las restricciones del puente raíz, al igual que Linux, al arrancar con este pci=nocrsparámetro. Ninguno de estos sistemas operativos requiere una anulación de DSDT y puede asignar barras PCI libremente en el enorme espacio de direcciones de 64 bits.
Al actualizar una eGPU, puede aparecer el error 12 (Este dispositivo no puede encontrar suficientes recursos libres que pueda usar) en el Administrador de dispositivos de Windows, lo que la deja inoperativa. Esto puede indicar que no hay suficiente espacio de direccionamiento de 32 bits disponible para alojar la eGPU. Una eGPU requiere un espacio de configuración PCIe relativamente grande. Reducir el TOLUD reduciendo la RAM a 2 GB ofrece una solución alternativa poco práctica. La solución definitiva se encuentra a continuación.
Esta solución de tres pasos elimina la restricción de asignación de PCIe de 32 bits de Windows para resolver el error 12 de eGPU:
Paso 1. Cree un archivo DSDT dsdt-modified.aml con un puente raíz de 36 bits
Paso 2. Cargue su dsdt-modified.aml como anulación del registro o sustitución en memoria
Paso 3. Confirme el éxito con un área de “Memoria grande” en el Administrador de dispositivos
Descarga e instala las herramientas necesarias:
- Windows Binary Tools (WBT – dic 2016) extraído al directorio c:\dsdt. [ WBT más reciente tiene errores de análisis sintáctico]
- Windows Driver Kit (WDK), que contiene el compilador de ASL de Windows (asl.exe)
- Editor de texto Notepad++ con menú Search>Goto (línea) para edición rápida de líneas si falla la compilación ASL o IASL abajo
ii. Copiar el compilador ASL de WDK en el directorio c:\dsdt. Haz esto abriendo el Símbolo de Comando (ejecuta como administrador) y luego copia y pega los comandos que aparecen a continuación.
Code: mkdir c:\dsdt c: & cd \dsdt set 64bit_OS_asl="C:\Program Files (x86)\Windows Kits\10\Tools\x64\ACPIVerify\asl.exe" set 32bit_OS_asl="C:\Program Files (x86)\Windows Kits\10\Tools\x86\ACPIVerify\asl.exe" copy /y %32bit_OS_asl% c:\dsdt > nul & copy /y %64bit_OS_asl% c:\dsdt > nul if not exist c:\dsdt\asl.exe echo ERROR: Failed to copy asl.exe to c:\dsdt
iii. Volca tus tablas ACPI en archivos de disco (dsdt.asl y dsdt.dat) con estos comandos en el Símbolo del Símbolo (ejecuta como administrador). El dsdt.asl creado se copia aquí como dsdt-modified.asl, que se utiliza más adelante para realizar las modificaciones necesarias.
Code: c: & cd \dsdt acpidump -b -z asl /u dsdt.dat copy dsdt.asl dsdt-modified.asl
iv. Ahora puedes elegir entre el método Intel o el método Microsoft (con archivo de trabajo azul dsdt-modified.dsl o magenta dsdt-modified.asl respectivamente) para generar un archivo dsdt-modified.aml, incluso probando ambos para maximizar el éxito. Considere:
– Para sistemas distintos de Lenovo, se utiliza el método Intel ya que su DSDT suele tener una firma de creación Intel.
– Se sabe que Lenovo Thinkpad X220, T420, W530, T540P y probablemente otros sistemas Lenovo Thinkpad i-core de 2ª a 4ª generación requieren el método Microsoft. El método Intel provoca un “error ACPI BIOS” al arrancar Windows allí.
i. Guarda este >> refs.txt << archivo en tu carpeta c:\dsdt. ¿Para qué se usa? De tonymacx86: El desensamblador iasl intentará adivinar el número de argumentos [para símbolos no resueltos no definidos en ningún archivo], pero a menudo adivina mal. Puedes corregirlo proporcionando las declaraciones externas en un archivo de texto refs.txt. Contiene algunos símbolos comunes (y no tan comunes) que faltan…
ii. Desde el Símbolo de Línea de Comandos (admin), descompilar dsdt.dat como dsdt.dsl. Aquí se utiliza el archivo refs.txt. Luego se copia dsdt.dsl como dsdt-modified.dsl, en el que haremos los cambios necesarios.
Code: c: & cd \dsdt iasl -da -dl -fe refs.txt dsdt.dat copy dsdt.dsl dsdt-modified.dsl
iii. Con Notepad++, abre el archivo resultante c:\dsdt\dsdt-modified.dsl y busca ResourceProducer. Debajo de él habrá una serie de entradas de recursos “DWordMemory”. Bajo la última entrada DWordMemory en esa área, normalmente por encima del método _CRS, añade una entrada ‘QWordMemory’ (64 bits) como se muestra a continuación. El rango elegido está en el rango de 36 bits (< 64GB) para mantener la compatibilidad con Windows de 32 bits compatible con PAE. Se eligió una ubicación por encima de 48GB para aliviar los problemas con sistemas equipados con 32GB. Aquí usamos entre 48,5GB y 56,25GB. Una vez que los sistemas empiecen a enviarse con 64GB de RAM, esto tendrá que revisarse para usar una dirección de 64 bits.
Code: DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x00000000, // Granularity 0x000A0000, // Range Minimum 0x000BFFFF, // Range Maximum 0x00000000, // Translation Offset 0x00020000, // Length ,, , AddressRangeMemory, TypeStatic) // - ADD THIS SECTION --------------------------------------------------------------------------- QWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadWrite, 0x0000000000000000, // Granularity 0x0000000C20000000, // Range Minimum, set it to 48.5GB 0x0000000E0FFFFFFF, // Range Maximum, set it to 56.25GB 0x0000000000000000, // Translation Offset 0x00000001F0000000, // Length calculated by Range Max - Range Min. ,, , AddressRangeMemory, TypeStatic) // ---------------------------------------------------------------------------------------------- }) Method (_CRS, 0, Serialized) // _CRS: Current Resource Settings
iv. Crear un archivo dsdt-modified.aml . El ‘-ve’ desactiva los mensajes de advertencia.
Code: c: & cd \dsdt iasl -ve dsdt-modified.dsl
Es poco probable que esto tenga éxito a la primera, ya que el compilador es muy estricto. Los errores reportados deberán revisarse con Notepad++ en la línea donde ocurren. Busca una palabra clave de error única en tu línea de error dsdt-modified.dsl dentro de dsdt-modified.asl (puede que se vea un poco diferente) y luego simplemente cambia las líneas de arriba/abajo a tu archivo dsdt-modified.dsl y compila. Esto fue suficiente para que un Dell XPS 9350, Dell E6540 y un MacBook Pro DSDT de 2016 de 2016 se hicieran a la perfección.
Si se atasca, consulta el repositorio público precompilado DSDT de eGPU.io para varios sistemas. Si existe uno para tu sistema, puedes descargarlo junto con Winmerge para fusionar los cambios de archivo en tu archivo de trabajo dsdt-modified.dsl. También hay otras soluciones descritas en [Guía] Parcheo de DSDT/SSDT de PORTÁTILES (tonymacx86). Considera también pedir orientación en los foros centrados en DSDT tonymacx86.com DSDT. Luego intenta compilar tu DSDT de nuevo.
| Paso 2. Carga tu dsdt-modified.aml como una anulación de registro o sustitución en memoria |
OPCIÓN 1: Cargar tu dsdt-modified.aml como una anulación del registro con el modo de firma de pruebas de Windows activado
Aquí cargamos tu dsdt-modified.aml como anulación DSDT del registro de Windows. Ten en cuenta que un dsdt-modified.aml inválido cargado de esta manera puede causar un BSOD al arrancar. Además, el modo de firma de pruebas de Windows puede ser problemático para la compatibilidad de aplicaciones. Ambos problemas pueden evitarse usando OPCIÓN 2: Evita el modo de firma de prueba: carga tu dsdt-modified.aml como sustitución DSDT en memoria.
i. En el Símbolo de Comando (admin) escribe lo siguiente. El WDK que contenga asl.exe debe instalarse según los Pasos 1 (i) y (ii) para que esto funcione.
Code: c: & cd \dsdt asl /loadtable dsdt-modified.aml
ii. Activar el modo TESTSIGNING para que se aplique la anulación del registro. En el Símbolo de Comando (admin):
Code: bcdedit -set TESTSIGNING ON
Si aparece un error como el de abajo al hacer esto, entonces desactiva el ARRANQUE SEGURO en tu BIOS.
