首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UBI错误: ubi_io_read: error -74 (ECC错误)

UBI错误: ubi_io_read: error -74 (ECC错误)
EN

Stack Overflow用户
提问于 2016-05-24 08:03:25
回答 1查看 4.6K关注 0票数 1

我很难将Linux根文件系统写入NAND设备(MT29F2G08ABAEAH4-IT:E)。

我有一个由Yocto创建的UBI映像如下:

代码语言:javascript
复制
mkfs.ubifs -r /path/to/rootfs -o /path/to/output/rootfs.ubifs -m 2048 -e 129024 -c 1600 -F
ubinize -o /path/to/output/rootfs.ubi -m 2048 -p 128KiB -s 512 ubinize.cfg

ubinize.cfg:

代码语言:javascript
复制
[ubifs]
mode=ubi
image=/path/to/output/rootfs.ubifs
vol_id=0
vol_type=dynamic
vol_name=ddcu-rootfs
vol_flags=autoresize

我能够使用“制造”Linux中的以下命令成功地编写文件系统:

代码语言:javascript
复制
mount /dev/mmcblk0p3 /mnt/data/
ubiformat /dev/mtd8 -f /mnt/data/rootfs.ubi
ubiattach /dev/ubi_ctrl -m 8
mount -t ubifs ubi0_0 /mnt/rfs

这个解决方案可以工作,但很繁琐,因为我首先需要启动临时的“制造”Linux,以便为生产Linux准备RFS。所以我想直接从u-boot闪现出来。我已经阅读了多个来源(例如http://www.linux-mtd.infradead.org/faq/ubifs.html)和注释(例如http://lists.denx.de/pipermail/u-boot/2011-September/102740.html),但是我仍然必须做一些错误的事情,否则肯定有一个bug。

1. nand写

我尝试在u-boot 2011.12和2016.01中使用nand write命令。

代码语言:javascript
复制
nand scrub.part -y mtd_rootfs
fatload mmc 0:3 ${loadaddr} rootfs.ubi
nand write ${loadaddr} mtd_rootfs ${filesize}

引导Linux现在导致

代码语言:javascript
复制
UBI: attaching mtd8 to ubi0
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
uncorrectable error : 
uncorrectable error : 
uncorrectable error : 
uncorrectable error : 
UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 0:0, read 64 bytes
uncorrectable error : 
uncorrectable error : 
uncorrectable error : 
uncorrectable error : 
uncorrectable error : 
uncorrectable error : 
uncorrectable error : 
uncorrectable error : 
UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 0:512, read 512 bytes
uncorrectable error : 
uncorrectable error : 

2.比伊

另一个注意是使用ubi boot 2016.01命令:

代码语言:javascript
复制
nand scrub.part -y mtd_rootfs
ext4load mmc 0:2 ${loadaddr} rootfs.ubi
ubi part mtd_rootfs
ubi create ddcu-rootfs
ubi write ${loadaddr} my-rootfs ${filesize}

试图通过ubifsmount my-rootfs在u引导中挂载卷的尝试失败:

代码语言:javascript
复制
Error reading superblock on volume 'my-rootfs' errno=-22!

试图引导Linux会导致:

代码语言:javascript
复制
UBI: attaching mtd8 to ubi0
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
uncorrectable error : 
uncorrectable error : 
uncorrectable error : 
uncorrectable error : 
UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 0:0, read 64 bytes
UBI error: validate_ec_hdr: bad VID header offset 2048, expected 512
UBI error: validate_ec_hdr: bad EC header
UBI error: ubi_io_read_ec_hdr: validation failed for PEB 0
UBI error: ubi_init: cannot attach mtd8

当然,我尝试了更多的变体,但最终总是出现错误-74。有人能看到我做错了什么,或者分享他们的解决方案吗?

EN

回答 1

Stack Overflow用户

发布于 2016-05-25 08:36:09

有人能..。请分享他们的解决方案?

(1)在启用CONFIG_CMD_NAND_TRIMFFS的情况下重建U。使用版本2016.01,因为v2011.12可能没有此命令选项。

(2)不要使用nand scrub ...命令。

该命令将删除工厂提供的坏块信息。(您可能通过销毁这些糟糕的块信息而造成了未来的问题。)

使用普通的nand erase ...命令。

(3)使用nand write.trimffs ...命令安装UBI映像。

上述过程假设above和Linux内核配置为使用相同的参数和ECC方法访问NAND闪存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37407667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档