u-boot como marcar blocos ruins

3

Enquanto em U-boot em uma placa baseada em braço (wb45n), Eu apago manualmente e, em seguida, marque um bloco como ruim.

U-Boot> nand erase 0x00720000 20000

NAND erase: device 0 offset 0x00720000, size 0x20000
Erasing at 0x720000 -- 100% complete.
OK
U-Boot> nand markbad 0x00720000
block 0x00720000 successfully marked as bad
U-Boot> nand bad
>
Device 0 bad blocks:
00720000

Eu escrevo software e vejo os blocos defeituosos sendo ignorados no processo.

NAND write: device 0 offset 0x5e0000, size 0x16c0000
Skip bad block 0x00720000
23855104 bytes written: OK

Após a gravação do software, eu reinicio e os blocos ruins não estão lá.

U-Boot> nand bad
>
Device 0 bad blocks:
U-Boot>

Parece que foram corrigidos automaticamente. Se eu não apagar os blocos antes de marcá-los, eu posso escrever software com sucesso, mas eu (frequentemente, mas nem sempre) recebo o seguinte erro durante a inicialização do kernel: (Eu realmente não sei porque essa mensagem de erro é produzida, quaisquer explicações são bem vindas)

UBI error: scan_peb: bad image sequence number 1748114077 in PEB 175, expected 1578922167

Erase counter header dump:

    magic          0x55424923
    version        1
    ec             1
    vid_hdr_offset 2048
    data_offset    4096
    image_seq      1748114077
    hdr_crc        0x285278f

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

add to erase: PEB 0, EC 0 UBI error: ubi_compare_lebs: unsupported on-flash UBI format
UBI error: ubi_attach_mtd_dev: failed to attach mtd6, error -22
UBI error: ubi_init: cannot attach mtd6
UBIFS error (pid 1): ubifs_mount: cannot open "ubi0:rootfs", error -19
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown- block(0,0)

O que estou tentando fazer é testar a placa para ver quantos blocos ruins ela pode manipular antes de falhar.

A maneira como eu marquei os blocos ruins está correta?
Por que os maus blocos desaparecem?
Existe uma maneira de marcar blocos ruins que persistirão?
O que significa o último erro?

    
por user199251 08.11.2016 / 20:21

1 resposta

2

link

the error is related to a problem in the flashing of the board, that is:

  1. you flash a new image incorrectly - you do not erase whole flash

  2. you flash a new image - by erasing only the erase blocks where you write, but not erasing the rest of eraseblock.

Eu posso imaginar isso acontecendo se

  • você omitiu seu nand erase ou
  • você escreveu uma imagem com N blocos marcados como ruins na NAND, depois escreveu a mesma imagem, mas com blocos N-1 marcados como ruins na NAND. Após o final da imagem atual, sobraria 1 bloco no final da imagem anterior, que não teria sido sobrescrito.
por 08.11.2016 / 22:30