Ошибка UBI: ubi_io_read: ошибка -74 (ошибка ECC)

Я пытаюсь записать корневую файловую систему Linux на устройство NAND (MT29F2G08ABAEAH4-IT:E).

У меня есть изображение UBI, созданное Yocto следующим образом:

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, чтобы подготовить RFS для рабочего Linux. Поэтому я хочу прошить его прямо из U-Boot. Я прочитал несколько источников (например, http://www.linux-mtd.infradead.org/faq/ubifs.html) и заметки (например, http://lists.denx.de/pipermail/u-boot/2011-September/102740.html), но я все равно должен сделать что-то не так, или где-то должна быть ошибка.

1. и написать

Я пытался использовать 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. Кто-нибудь может увидеть, что я делаю не так, или поделиться своим рабочим решением, пожалуйста?

1 ответ

Может кто-нибудь... поделитесь своим рабочим решением, пожалуйста?

(1) Перестройте U-Boot с включенной функцией CONFIG_CMD_NAND_TRIMFFS. Используйте версию 2016.01, так как v2011.12 может не иметь этой опции команды.

(2) Не используйте nand scrub ... команда.
Эта команда удалит информацию о поврежденных блоках, предоставленную фабрикой. (Возможно, вы создали будущие проблемы, уничтожив эту информацию о плохих блоках.)
Используйте равнину nand erase ... команда.

(3) Используйте nand write.trimffs ... Команда для установки образа UBI.

Приведенная выше процедура предполагает, что U-Boot и ядро ​​Linux настроены для доступа к флэш-памяти NAND с использованием тех же параметров и метода ECC.

Другие вопросы по тегам