O kernel do Linux trava em “Iniciando o kernel…”

6

Eu habilitei o Secure Boot em um dispositivo incorporado com sucesso. O problema é que quando eu estou inicializando neste modo, o processo parece ficar preso logo após a linha:

Starting kernel ...

uma vez que o U-boot copiou o kernel na memória e emitiu um comando bootm .

Em um depurador, sou capaz de capturar que o PC está preso em uma instrução yield , seguida por uma atribuição a pc = pc-4 - essencialmente, um loop.

Eu nunca mencionei o Linux nesse nível tão baixo antes, então não sei por onde começar a procurar. Eu notei, porém, que eu consegui inicializar com sucesso a imagem do kernel quando não estava no modo seguro, então isso pode ser uma questão mais apropriada para o fornecedor.

1) Em geral, onde posso encontrar informações de diagnóstico de U-boot em relação ao estágio de execução da execução?

2) Em que ponto a execução é totalmente dada ao kernel? ou seja, quando a U-boot é extinta?

    
por sherrellbc 22.06.2016 / 17:37

2 respostas

2

Pode ser que você possa descarregar a memória das primeiras impressões do linux usando o procedimento a seguir. A causa pode ser, o kernel está inicializando, mas parou antes do init do console. Coloque também impressões no ponto de entrada do kernel do uboot e confirme que o controle está sendo transferido para o kernel.

Encontre o arquivo System.map . Use o comando abaixo para identificar o endereço log_buf :

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 o extact hung acontece.

    
por 21.09.2016 / 13:20
1

Eu já 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. O u-boot não está preenchendo esse campo com o tamanho descompactado, que o linux kernel usa posteriormente para redimensionar seu stack , colocando o sistema em um estado indefinido.

Quando u-boot imprime a mensagem Starting kernel... , a próxima mensagem deve ser Uncompressing Linux... done, booting the kernel após o u-boot transferir um SMM Handler para o kernel assumir a execução, e talvez o kernel esteja procurando este campo. Se você estiver trabalhando em um sistema baseado em x86 , a descompactação estaria nos seguintes diretórios de arquivos:

arch/x86/boot/uncompressed/head_32.S
arch/x86/boot/uncompressed/piggy.S

A solução é usar o último u-boot foun aqui: link

No entanto, se você estiver usando um u-boot personalizado, será necessário procurar por esse campo.

    
por 07.11.2017 / 06:59