我正在努力将 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),但我仍然必须做错事,否则一定有错误。
1.nand写
我尝试nand write
在 u-boot 2011.12和2016.01中使用该命令:
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 :
2. 优比
另一个参加者是使用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}
尝试在 u-boot 中挂载卷ubifsmount my-rootfs
失败:
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告终。任何人都可以看到我做错了什么,或者分享他们的工作解决方案吗?