As I know ubifs will handle bad block/sector while MTD does not.
Não é verdade, o MTD também está ciente dos blocos defeituosos e mantém uma tabela de blocos inválidos.
Consulte Suporte de tabela de blocos inválidos do MTD e drivers / mtd / ne / bbt. c .
So my opinion is that dd on a nand flash chip with ubifs may write data to a bad block/sector, is it right?
Sua premissa sobre o MTD está incorreta, mas a conclusão é verdadeira.
Além disso, a presença de um UBIFS seria irrelevante, já que dd opera no dispositivo de bloco em vez do sistema de arquivos.
O comando dd acessa um dispositivo de bloco, que não é MTD, então o mtdblock (que tem uma camada de tradução em flash) deve ser usado.
A FAQ do MTD tem esse aviso explícito sobre o uso de mtdblock e NAND:
But think twice before using mtdblock in read-write mode.
And don't try to use it on NAND flash as it is does not handle bad eraseblocks.
IOW o problema não é o dd programa, mas sim o uso do dispositivo mtdblock.
A FAQ do MTD recomenda o uso de programas que reconhecem bad-block, como o mtd-utils.