Recentemente, descobri a causa de um bug desagradável no qual estou trabalhando com um Atmel AT91SAM9G20 SBC executando o U-boot , um carregador de inicialização de código aberto. O principal problema era que o U-boot esperava que o hardware fosse configurado de maneira diferente da que eu havia construído, portanto, alguns dos registros do dispositivo foram configurados incorretamente.
Agora que eu descobri o problema, preciso ajustar o U-boot para configurar os registros corretamente. Eu posso fazer isso às cegas adicionando algumas linhas de código no final do programa, mas isso é confuso.
Isso me leva à minha pergunta: como posso descobrir como o U-boot funciona com mais eficiência do que iniciar em main () e ler todos os caminhos de código possíveis em todos os arquivos? Tentei dar uma olhada nos arquivos e ver o código perto de identificadores relevantes. Isso se mostrou ineficaz; parece que a maior parte do código são drivers para subsistemas com os quais não me importo. Na verdade, eu entendo como o gerenciador de inicialização funciona muito bem agora, mas espero que exista um método melhor do que minha abordagem ingênua.