Estou trabalhando para montar um sistema personalizado no Beaglebone Black. As coisas funcionam na maior parte do tempo, mas de vez em quando, o sistema falha ao inicializar quando ligado. Isso nunca acontece quando um cabo de depuração serial está conectado (para que eu possa assistir às mensagens do u-boot e do kernel).
No entanto, o que descobri é que, nas raras vezes em que falha, se eu conectar um cabo serial, descubro que estou sentado em um prompt u-boot. Se eu configurar manualmente o u-boot para carregar o kernel e tudo a partir daí, posso inicializar apenas encontrar (ele pode ler o eMMC e tal).
Meu primeiro pensamento foi que havia algum tipo de ruído na linha serial que estava causando a quebra do u-boot (o padrão é quebrar no espaço em 2 segundos, acredito). No entanto, recompilei o u-boot para usar um atraso de 0 segundos (não espera a barra de espaço), mas isso não resolveu o problema.
Como posso descobrir por que o u-boot está parando sem conectar um cabo serial durante a inicialização (porque isso faz com que o problema desapareça; Heisenbug)? Existe algum tipo de registro ativado que eu possa acessar?
Certa vez, tive uma placa em que o pino uart RX estava preso ao solo. Portanto, o u-boot sempre viu uma tecla pressionada.
Não sei qual versão você está usando...
Dentro
/common/autoboot.c
função
static int abortboot_normal(int bootdelay)
pouco antes do retorno, adicione a linha
abort = 0;
Isso retornará nenhuma tecla pressionada.