我正在开发一个嵌入式Linux系统(5.10.24),其中有一个NAND闪存。
NAND闪存分为4部分,第0部分用于u引导,第1部分用于内核,第2部分用作UBIFS,第3部分是另一个UBIFS分区。
因此,当Linux启动时,它显示存在/dev/mtd0, /dev/mtd1, /dev/mtd2, /dev/mtd3。
现在我可以通过POSIX-C文件操作从/dev/mtd0 (原始闪存,没有文件系统)读取u-boot的数据。
然后,我想通过写入/dev/mtd0将一些数据保存到NAND分区0。
所有的文件读写操作都做得很好,没有错误报告。
但是当我将系统重新引导回u引导时,它会抱怨有很多错误,比如spi nand read oob error ,ret= -74 , oob addr e0000, ooboffs 0, ooblen 64。
NAND似乎有问题,为什么会发生这种错误,以及如何通过/dev/mtd接口将数据写入原始NAND闪存?
发布于 2023-04-20 14:40:35
NAND闪光灯需要在写到它之前被擦除(块)。有ioctls可以这么做。mtd-utils是与Linux中的mtd卷与flashcp等实用工具交互的工具集,但它也是一个很好的切入点,可以获取关于如何在较低级别上这样做的信息,请参阅http://www.linux-mtd.infradead.org/doc/general.html。
也就是说,从common内部与mtd卷交互的更常见的方法是使用它作为common环境的存储。不要直接写入mtd卷,而是执行一些setenv和saveenv来将其写入NAND,包括所有校验和。在Linux中,您可以使用fw_printenv等等。
https://unix.stackexchange.com/questions/743524
复制相似问题