Imagens Redundantes da Inicialização em U

2

Atualmente, estou trabalhando em um sistema embarcado que usa um flash NAND como armazenamento principal. Bootloader + Kernel + rootfs são escritos para ele, e estamos procurando maneiras de tornar nosso sistema mais robusto para os muitos problemas relacionados ao NAND.

Atualmente, temos as partições kernel e rootfs na parte superior do JFFS2, e estamos tentando encontrar uma maneira de proteger as partições de bootloader (estamos usando o SPL plus U-Boot).

Nosso processador é capaz de ver os primeiros 4 blocos de flash automaticamente para uma imagem SPL não corrompida, e eu gostaria de ter algo semelhante para o U-Boot. No entanto, verifiquei o código do U-Boot e não encontrei nenhuma maneira de ativar esse recurso.

Isso é suportado pelo U-Boot? Eu tentei hackear meu próprio código para fazer isso, mas sem sorte até agora.

tl; dr : Eu quero ser capaz de detectar se eu tenho uma imagem ruim do U-Boot no NAND, e em caso afirmativo, inicialize de outra (esperançosamente) partição não corrompida. / em>

    
por Guilherme Costa 20.04.2016 / 20:59

2 respostas

0

Então, consegui implementar uma simples verificação e inicializar a partir de uma imagem redundante. Tudo o que você precisa fazer é pegar o código de retorno de uma chamada para ecc.correct() e tratá-lo na função spl_nand_load_image() . Eu postei um patch aqui .

    
por 25.04.2016 / 21:19
1

Normalmente, a SPL do U-Boot faz o ECC, mas não atualiza o NAND ... mas acredito que é algo que você já conhece.
Uma boa prática é armazenar o U-Boot no NOR, e o kernel, FS e as variáveis de ambiente redundantes do U-Boot em NAND.
Agora em relação ao kernel: a imagem legada do kernel do linux (uImage) tem uma soma de verificação CRC32 fraca, eu optaria pelo fitImage que pode ser assinado e contém um algoritmo de soma de verificação configurável entre outras coisas úteis.

    
por 20.04.2016 / 21:42