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?