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.
fonte
Respostas:
Existem várias ferramentas / estratégias que podem ajudar:
Melhores ferramentas para entender o código fonte:
Análise de tempo de execução
Escrevendo seu próprio mini carregador de inicialização
Infelizmente, não há receita mágica que funcione para tudo.
fonte
Como você o configurou para construir para o AT91?
A árvore de códigos parece ter sido projetada de modo que qualquer material específico da arquitetura esteja localizado na árvore 'arch / (cpu class) / (tipo de cpu) / ...'. Encontrei o código AT91 em arch / arm / cpu / arm926ejs / at91 ... o material específico da variante que você deseja alterar não está localizado lá? Não há muito o que procurar nesse diretório, especialmente porque quase metade dos arquivos é específica da variante AT91 individual.
Desculpe se isso é óbvio ... mas você não mencionou a verificação.
Ainda não tinha olhado para a árvore de códigos do uBoot, mas sua postagem me assustou. Um projeto meu em segundo plano envolve eventualmente usar o uBoot e o Linux em um PCB iMX233 personalizado. Estou muito interessado em obter esse tipo de feedback sobre o quão bem a arquitetura do uBoot e as coisas específicas de variantes são isoladas e qual o tamanho de uma dor que será.
fonte