Estou trabalhando em um sistema Linux embarcado (5.10.24), onde existe uma NAND FLASH como armazenamento.
O NAND FLASH é particionado em 4 partes, parte 0 é usada para u-boot, parte 1 é usada para kernel, parte 2 é usada como UBIFS, parte 3 é outra partição UBIFS.
Portanto, quando o Linux inicializa, ele mostra que existem arquivos /dev/mtd0, /dev/mtd1, /dev/mtd2, /dev/mtd3
.
Agora posso ler dados de u-boot de /dev/mtd0
(FLASH bruto, sem sistema de arquivos) por meio de operações de arquivo POSIX-C.
Em seguida, desejo salvar alguns dados na partição NAND FLASH 0 gravando em /dev/mtd0
.
Todas as operações de leitura/gravação de arquivo são bem feitas, nenhum erro relatado.
Mas quando reinicio o sistema de volta ao u-boot, ele reclama que há muitos erros como spi nand read oob error ,ret= -74 , oob addr e0000, ooboffs 0, ooblen 64
.
Parecia que NAND OOB tem algo errado, por que esse erro acontece e como gravar dados em NAND FLASH bruto por meio da /dev/mtd
interface?
O flash NAND precisa ser apagado (em bloco) antes de gravar nele. Existem
ioctl
programas para fazer isso.mtd-utils
é o conjunto de ferramentas de escolha para interagir com seus volumes mtd de dentro do Linux com utilitários comoflashcp
, mas também é um bom ponto de entrada para obter informações sobre como fazer isso sozinho em um nível baixo, consulte http://www.linux-mtd .infradead.org/doc/general.htmlDito isto, a maneira muito mais comum de interagir com seus volumes mtd de dentro do U-Boot é usá-lo como armazenamento de seu ambiente U-Boot. Em vez de gravar diretamente no volume mtd, faça alguns
setenv
esaveenv
grave-o no NAND, incluindo todas as somas de verificação. Do Linux, você pode usarfw_printenv
e assim por diante.