我正在努力将Linux根文件系统写入NAND设备(MT29F2G08ABAEAH4-IT:E)。
我有一个由Yocto创建的UBI图像如下:
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:
[ubifs]
mode=ubi
image=/path/to/output/rootfs.ubifs
vol_id=0
vol_type=dynamic
vol_name=ddcu-rootfs
vol_flags=autoresize
我能够使用"制造"中的以下命令成功编写文件系统。 Linux操作系统:
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),但我仍然必须做错事或某处必定存在错误。
我尝试在u-boot 2011.12 和 2016.01 中使用nand write
命令:
nand scrub.part -y mtd_rootfs
fatload mmc 0:3 ${loadaddr} rootfs.ubi
nand write ${loadaddr} mtd_rootfs ${filesize}
现在启动Linux导致
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 :
另一位参加者正在使用 ubi u-boot 2016.01命令:
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-boot中挂载卷失败:
Error reading superblock on volume 'my-rootfs' errno=-22!
尝试启动Linux导致:
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 结束。有人能看到我做错了什么,或者分享他们的工作解决方案吗?
答案 0 :(得分:0)
有人可以......分享他们的工作解决方案吗?
(1)在启用CONFIG_CMD_NAND_TRIMFFS的情况下重建U-Boot。使用版本2016.01,因为v2011.12可能没有此命令选项。
(2)不要使用$('.seatCharts-row').remove();
$('.seatCharts-legendItem').remove();
$('#seat-map,#seat-map *').unbind().removeData();
命令
该命令将删除工厂提供的坏块信息。
(您可能通过销毁这些坏块信息来创建未来的问题。)
使用plain nand scrub ...
命令。
(3)使用nand erase ...
命令安装UBI图像。
上述过程假设U-Boot和Linux内核配置为使用相同的参数和ECC方法访问NAND闪存。