
Ativei a inicialização segura em um dispositivo incorporado com sucesso. O problema é que quando estou inicializando neste modo o processo parece travar logo após a linha:
Starting kernel ...
uma vez que o U-boot copiou o kernel na memória e emitiu um bootm
comando.
Em um depurador, sou capaz de capturar que o PC está preso em uma yield
instrução seguida por uma atribuição para pc = pc-4
- essencialmente um loop.
Eu nunca mencionei o Linux neste nível tão baixo antes, então não tenho certeza por onde começar a procurar. Percebi, porém, que consegui inicializar com êxito a imagem do kernel quando não estava no modo seguro, portanto, essa pode ser uma pergunta mais apropriada para o fornecedor.
1) Em geral, onde posso encontrar informações de diagnóstico do U-boot referentes à etapa de transferência de execução?
2) Em que ponto a execução é totalmente entregue ao kernel? ou seja, quando o U-boot está extinto?
Responder1
Pode ser que você possa despejar a memória das primeiras impressões do Linux usando o procedimento a seguir. A causa pode ser que o kernel esteja inicializando, mas travou antes da inicialização do console. Coloque também impressões no ponto de entrada do kernel do uboot e confirme que o controle foi entregue ao kernel.
Encontre o System.map
arquivo. Use o comando abaixo para identificar o log_buf
endereço:
grep __log_buf System.map
Isso produzirá algo como
c0352d88 B __log_buf
Inicialize a placa a quente (o conteúdo da RAM não deve ser apagado).
No Uboot despeje a memória de __log_buf
(c0352d88). Ele irá despejar as impressões do console do Kernel. Assim, você pode identificar onde ocorre o travamento exato.
Responder2
Eu enfrentei o mesmo problema e encontrei uma solução. O problema está em um dos u-boot structure field
que armazena o size
do uncompressed linux kernel.
The u-boot
não está preenchendo este campo com o tamanho descompactado, que linux kernel
utiliza posteriormente para redimensionar o seu stack
, colocando assim o sistema em um estado indefinido.
Depois de u-boot
imprimir a Starting kernel...
mensagem, a próxima mensagem deve ser Uncompressing Linux... done, booting the kernel
após a transferência do u-boot SMM Handler
para que o kernel assuma a execução, e talvez o kernel
esteja procurando por este campo. Se você estiver trabalhando em um x86
sistema baseado, a descompactação estará nos seguintes diretórios de arquivos:
arch/x86/boot/uncompressed/head_32.S
arch/x86/boot/uncompressed/piggy.S
A solução é usar o u-boot mais recente encontrado aqui:https://github.com/andy-shev/u-boot
No entanto, se você estiver usando um u-boot personalizado, precisará procurar este campo.
Responder3
x86? Inicialize com earlycon=efifb
ou earlyprintk=vga
. Estou mencionando ambos, pois houve uma mudança na época do commit 69c1f396f25b805aeff08f06d2e992c315ee5b1e de earlyprintk para earlycon.