Como resolver o erro “Unable to locate valid DTB”
O que é o Directory Table Base e por que o leitor precisa encontrá-lo. Depois, as soluções em ordem para o erro de DTB: mapa de memória, virtualização, estabilidade do USB, boot a frio e, por último, Windows limpo.
Resposta curta
O erro de DTB quer dizer que o leitor leu memória pela sua placa mas não achou o Directory Table Base do kernel do Windows. Trabalhe em ordem: gere um mapa de memória, desligue VT-d/VT-x ou SVM/IOMMU na BIOS do PC de jogo, prove que o USB está estável e então faça um boot a frio nas duas máquinas.
Nesta página11
- O que é o Directory Table Base?
- Por que o leitor precisa do DTB?
- Um erro de DTB quer dizer que a placa quebrou?
- Como saber qual é a sua causa
- Como resolver o erro de DTB, passo a passo
- Quais opções da BIOS mudar, e em qual PC
- As opções de linha de comando por trás do seu loader
- Por que digitar o DTB na mão não é solução
- Por que reinstalar o Windows deve ficar por último
- Perguntas frequentes sobre o erro de DTB
- Fontes
O que é o Directory Table Base?
Todo processo de uma máquina Windows enxerga o próprio espaço de endereços virtuais. Traduzir um endereço virtual em um endereço físico na RAM exige uma hierarquia de tabelas de páginas, cuja raiz é um endereço físico por processo. No x86-64 a CPU guarda esse endereço no registrador CR3, e o Windows guarda ele para cada processo como DirectoryTableBase, que todo mundo abrevia como DTB.
Por que o leitor precisa do DTB?
A sua placa lê memória física por PCIe, não memória virtual, então ela vê a RAM como um vetor plano de bytes, sem ideia de qual processo é dono do quê. Depois de conectar, o primeiro trabalho do leitor é varrer esse vetor atrás de uma estrutura parecida com as tabelas de páginas do kernel. Dessa estrutura ele recupera o DTB e daí em diante traduz endereços do mesmo jeito que a CPU faria. Nada acima desse passo roda enquanto ele não der certo. É por isso que uma falha de DTB para tudo e aparece como erro de inicialização, não como erro de um jogo específico.
Info
Um erro de DTB quer dizer que a placa quebrou?
Não, quer dizer que a varredura falhou. A mensagem prova que o USB funcionou, que o PCIe funcionou e que bytes voltaram. Aí a varredura leu os bytes errados, bytes incompletos ou bytes que foram reorganizados antes de chegar à placa. Cada uma dessas situações tem causas próprias, e dá para diferenciar uma da outra.
Como saber qual é a sua causa
Descubra qual é a sua causa antes de sair mudando coisas, porque é a coluna do teste que de fato separa uma da outra.
| O que você vê | Causa mais provável | Teste que confirma |
|---|---|---|
| Falha todas as vezes, na hora, numa máquina que nunca funcionou | Não existe mapa de memória, e o leitor está entrando em faixas que não pode tocar | Gere um mapa de memória e passe para o software. Se o erro sumir, era isso |
| Falha todas as vezes, e o PC de jogo é uma plataforma AMD ou o link passa por Thunderbolt | Ler endereços físicos inválidos mata o caminho de leitura nessas plataformas, então a varredura nunca termina | Aqui o mapa de memória é praticamente obrigatório. Teste com o mapa antes de testar qualquer outra coisa |
| Falha todas as vezes numa máquina em que a virtualização ficou ligada | VT-d/VT-x na Intel ou SVM/IOMMU na AMD está remapeando ou restringindo o que a placa enxerga | Desligue na BIOS do PC de jogo, faça um boot a frio e tente de novo com o mesmo mapa |
| Às vezes funciona, às vezes falha, sem um padrão que você consiga nomear | Link USB instável — leituras parciais produzem uma varredura que não acha nada | Rode um teste de velocidade de leitura duas vezes. Números muito diferentes, ou um número baixo, é a sua resposta |
| Começou a falhar no dia em que o firmware foi gravado e nunca mais funcionou | A própria imagem de firmware | Todo o resto desta página testou limpo. Volte ao fornecedor do firmware com o texto exato do erro |
| Funcionava ontem, falha hoje, e você não mudou nada | Uma atualização do Windows em uma das máquinas, ou uma placa que ficou travada | Faça primeiro um boot a frio completo nas duas máquinas, depois confira a versão do driver no segundo PC |
Duas causas ao mesmo tempo são comuns numa primeira montagem: sem mapa e com a virtualização ligada. Resolva as duas antes de concluir que uma das mudanças não ajudou.
Como resolver o erro de DTB, passo a passo
Os passos começam pela solução mais barata e mais provável. Faça um passo e teste antes de seguir para o próximo, porque mudar quatro coisas de uma vez não diz nada sobre qual delas importou.
- Gere um mapa de memória nesta máquina, com este firmware, e aponte o software para ele. Essa é a solução mais eficaz de todas, e a maioria das primeiras montagens não precisa de mais nada
- Entre na BIOS do PC DE JOGO e desligue a virtualização: VT-d e VT-x na Intel, SVM Mode e IOMMU na AMD. Salve, saia e deixe a máquina iniciar uma vez até a área de trabalho
- Prove o link USB usando um cabo de dados, a porta de dados da placa e uma porta USB 3 traseira do segundo PC, sem hub nem dock. O número da velocidade de leitura tem que se manter estável em duas medições
- Faça um boot a frio completo nas duas máquinas: desligue por completo e espere dez segundos com o cabo de força fora ou a chave da fonte desligada. Ligue o PC de jogo primeiro e o segundo PC depois dele
- Gere o mapa de memória de novo depois de qualquer mudança de hardware, como RAM nova, um pente trocado de lugar, um slot diferente para a placa ou uma atualização de BIOS. Um mapa velho descreve um layout que não existe mais
- Só se todos os passos acima testaram limpo e o erro continuar igual, faça uma instalação limpa do Windows no PC de jogo. É último recurso, nunca primeiro passo
Quais opções da BIOS mudar, e em qual PC
As opções que importam ficam na BIOS do PC DE JOGO, não na do segundo PC. Em plataformas Intel elas se chamam VT-x e VT-d, às vezes debaixo de um item Intel Virtualization Technology, e na AMD são SVM Mode e IOMMU. Em algumas placas, itens relacionados como uma chave de proteção de DMA ou kernel DMA protection ficam na mesma área. Mude uma por vez e anote o que mudou, porque um dia você vai querer devolver essa máquina ao normal. Se não encontrar uma opção, procure o nome exato dela no manual da placa em vez de ficar adivinhando menus.
As opções de linha de comando por trás do seu loader
A maioria dos produtos embrulha essas opções num loader, e conhecer elas mostra o que uma caixinha marcada no seu software realmente faz. Todos esses comandos são operações de inspeção e configuração.
REM Probe which physical memory ranges are readable, to build a map from
pcileech.exe probe -device fpga
REM Let the tool derive the memory map itself
MemProcFS.exe -device fpga -memmap auto
REM Or pass a map file you generated on this machine
MemProcFS.exe -device fpga -memmap mmap.txt
REM Verbose output, so the failing line is visible instead of guessed at
MemProcFS.exe -device fpga -memmap mmap.txt -v -printf
REM Diagnostic only: supply a known DTB by hand. The value changes every boot
MemProcFS.exe -device fpga -memmap mmap.txt -dtb 0x1ad000Atenção
Por que digitar o DTB na mão não é solução
Se um valor de DTB que você informa na mão faz o erro sumir, você aprendeu algo útil: o problema era a varredura, não o caminho de leitura. Mesmo assim não é solução, porque o Windows escolhe esse valor no boot e ele vai ser outro na próxima vez que qualquer uma das máquinas reiniciar. Uma montagem que depende disso quebra todo dia. Use o recurso para confirmar uma hipótese e depois conserte o mapa de memória ou a opção de BIOS que fez a varredura falhar.
Atenção
Por que reinstalar o Windows deve ficar por último
A instalação limpa fica por último porque leva horas, muda muitas variáveis de uma vez e não resolve nenhuma das causas comuns. Depois dela, um mapa de memória que faltava continua faltando, uma opção de BIOS continua marcada e um cabo no limite continua no limite. Só reinstale se o texto do erro continuar o mesmo depois que você tiver testado o mapa, a BIOS, o caminho USB e um boot a frio feito direito.
Perguntas frequentes sobre o erro de DTB
O número depois do erro quer dizer alguma coisa?
Quer, porque ele identifica qual das tentativas da ferramenta falhou e assim restringe a causa. Inclua sempre esse número ao relatar o erro, copiado como texto e não como print.
Posso copiar o mapa de memória de alguém com a mesma placa-mãe?
Não. Um mapa descreve o layout de memória física de uma máquina num momento, incluindo como a RAM dela está montada. O mapa de outra pessoa é inútil na melhor das hipóteses e, na pior, é a razão de as suas leituras falharem.
Preciso desligar a virtualização no segundo PC também?
Não. A opção importa na máquina cuja memória está sendo lida, então deixe o segundo PC como está, a menos que o seu próprio software diga o contrário.
Um erro de DTB é sinal de detecção?
Não. É uma falha de inicialização do leitor no seu segundo PC, e o mesmo erro aparece numa máquina que não tem jogo nenhum instalado.
Funciona até eu reiniciar o PC de jogo, aí falha de novo. Por quê?
Esse padrão aponta para um mapa de memória desatualizado, ou para um DTB informado na mão que ficou do boot anterior. Gere o mapa de novo e pare de passar um DTB fixo.
Fontes
A lista de soluções em ordem vem de trabalho de bancada: é a ordem em que a equipe resolve chamados de DTB, começando pelo passo mais barato.
- 01MemProcFS (Ulf Frisk)
a ferramenta que imprime o erro de DTB e aceita as flags memmap e dtb mostradas nesta página
github.com
- 02PCILeech (Ulf Frisk)
a ferramenta de leitura de memória por trás do comando probe desta página
github.com
- 03
- 04RAMMap (Sysinternals)
como as faixas de memória física se organizam numa máquina Windows, que é justamente o que um mapa de memória descreve
learn.microsoft.com
Leia em seguida
Ainda travado? Abra um ticket no Discord
Todos os guias