Проблемка с UBI

460 views
Skip to first unread message

iev

unread,
Mar 25, 2011, 4:11:53 AM3/25/11
to VoGeeky
В общем почему-то у меня не запускается.
Исходники качал с репозиториев, ядро - ветка xz0032-dev.
Делал всё по мануалу с сайта, всё в общем-то собралось (неплохо бы
добавить строчку "echo upstart +uclibc >> etc/use.conf" в секцию
"Сборка программ Squirrel"). На выходе u-boot-nand.bin, uImage,
rootfs.ubi. Прошиваю в плату:
source config/boot.cfg
nerase 0 0 4096
nprogram 0 0 u-boot-nand.bin
nprogram 0 512 uImage
nprogram_ubi 0 8192 rootfs.ubi

При запуске, через uart вижу следующее:
Generic platform RAM MTD, (c) 2004 Simtec Electronics
NAND device: Manufacturer ID: 0xec, Chip ID: 0xd3 (Samsung NAND 1GiB
3,3V 8-bit)
Scanning device for bad blocks
Creating 3 MTD partitions on "jz4750-nand":
0x000000000000-0x000000100000 : "u-boot"
mtd: Giving out device 0 to u-boot
0x000000100000-0x000001000000 : "kernel"
mtd: Giving out device 1 to kernel
0x000001000000-0x000040000000 : "rootfs"
mtd: Giving out device 2 to rootfs
jz4750-nand jz4750-nand.0: Successfully registered JZ4750 NAND driver
UBI: attaching mtd2 to ubi0
UBI: physical eraseblock size: 262144 bytes (256 KiB)
UBI: logical eraseblock size: 258048 bytes
UBI: smallest flash I/O unit: 2048
UBI: VID header offset: 2048 (aligned 2048)
UBI: data offset: 4096
UBI error: ubi_io_read: error -77 (ECC error) while reading 64 bytes
from PEB 22:0, read 64 bytes
Call Trace:
[<80019018>] dump_stack+0x8/0x34
[<802843a8>] ubi_io_read+0x228/0x370
[<802851dc>] ubi_io_read_ec_hdr+0x94/0x36c
[<80289fdc>] process_eb+0xcc/0x828
[<8028aa58>] ubi_scan+0x124/0xf1c
[<8027cfe8>] ubi_attach_mtd_dev+0x698/0xf40
[<804500a0>] ubi_init+0x1cc/0x398
[<80010588>] do_one_initcall+0x188/0x1f0
[<8043e204>] kernel_init+0xf4/0x194
[<80015934>] kernel_thread_helper+0x10/0x18

UBI error: ubi_io_read: error -77 (ECC error) while reading 64 bytes
from PEB 22:2048, read 64 bytes
Call Trace:
[<80019018>] dump_stack+0x8/0x34
[<802843a8>] ubi_io_read+0x228/0x370
[<80284e70>] ubi_io_read_vid_hdr+0x98/0x370
[<8028a1a4>] process_eb+0x294/0x828
[<8028aa58>] ubi_scan+0x124/0xf1c
[<8027cfe8>] ubi_attach_mtd_dev+0x698/0xf40
[<804500a0>] ubi_init+0x1cc/0x398
[<80010588>] do_one_initcall+0x188/0x1f0
[<8043e204>] kernel_init+0xf4/0x194
[<80015934>] kernel_thread_helper+0x10/0x18

UBI: max. sequence number: 0
UBI: attached mtd2 to ubi0
UBI: MTD device name: "rootfs"
UBI: MTD device size: 1008 MiB
UBI: number of good PEBs: 4032
UBI: number of bad PEBs: 0
UBI: number of corrupted PEBs: 0
UBI: max. allowed volumes: 128
UBI: wear-leveling threshold: 4096
UBI: number of internal volumes: 1
UBI: number of user volumes: 1
UBI: available PEBs: 3727
UBI: total number of reserved PEBs: 305
UBI: number of PEBs reserved for bad PEB handling: 40
UBI: max/mean erase counter: 0/0
UBI: image sequence number: 1825528386
UBI: background thread "ubi_bgt0d" started, PID 293
TCP cubic registered
NET: Registered protocol family 17
UBI error: ubi_io_read: error -77 (ECC error) while reading 64 bytes
from PEB 22:0, read 64 bytes
Call Trace:
[<80019018>] dump_stack+0x8/0x34
[<802843a8>] ubi_io_read+0x228/0x370
[<802851dc>] ubi_io_read_ec_hdr+0x94/0x36c
[<80287cb8>] erase_worker+0x154/0x8a4
[<8028686c>] do_work+0xe0/0x184
[<80286f1c>] ubi_wl_get_peb+0xcc/0x354
[<80282704>] ubi_eba_atomic_leb_change+0x328/0x560
[<802801d8>] ubi_leb_change+0x160/0x168
[<801bee10>] dbg_leb_change+0x74/0xb4
[<8018ed44>] ubifs_write_sb_node+0xa8/0x128
[<8018fd9c>] ubifs_read_superblock+0xec0/0x12f4
[<8018bcf4>] ubifs_fill_super+0x7b8/0x1e5c
[<8018e810>] ubifs_mount+0x134/0x46c
[<800b82f8>] vfs_kern_mount+0x6c/0x1cc
[<800b84b4>] do_kern_mount+0x4c/0x130
[<800d6b48>] do_mount+0x1ac/0x798
[<800d71d4>] sys_mount+0xa0/0xf4
[<8043ec80>] do_mount_root+0x28/0xd8
[<8043ef1c>] mount_block_root+0xc4/0x29c
[<8043f2c4>] prepare_namespace+0xd0/0x250
[<8043e264>] kernel_init+0x154/0x194
[<80015934>] kernel_thread_helper+0x10/0x18

UBIFS error (pid 1): ubifs_read_node: bad node type (255 but expected
9)
UBIFS error (pid 1): ubifs_read_node: bad node at LEB 20:56528, LEB
mapping status 0
Call Trace:
[<80019018>] dump_stack+0x8/0x34
[<80190ce4>] ubifs_read_node+0x3c8/0x420
[<8019f7bc>] dbg_old_index_check_init+0x8c/0x100
[<8018c220>] ubifs_fill_super+0xce4/0x1e5c
[<8018e810>] ubifs_mount+0x134/0x46c
[<800b82f8>] vfs_kern_mount+0x6c/0x1cc
[<800b84b4>] do_kern_mount+0x4c/0x130
[<800d6b48>] do_mount+0x1ac/0x798
[<800d71d4>] sys_mount+0xa0/0xf4
[<8043ec80>] do_mount_root+0x28/0xd8
[<8043ef1c>] mount_block_root+0xc4/0x29c
[<8043f2c4>] prepare_namespace+0xd0/0x250
[<8043e264>] kernel_init+0x154/0x194
[<80015934>] kernel_thread_helper+0x10/0x18

List of all partitions:
1f00 1024 mtdblock0 (driver?)
1f01 15360 mtdblock1 (driver?)
1f02 1032192 mtdblock2 (driver?)
No filesystem could mount root, tried: ubifs
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-
block(0,0)

При старте платы никакой ругани на ECC нету.
bootargs в убуте не менял:
bootargs=mem=32M console=ttyS0,57600n8 ubi.mtd=2 rootfstype=ubifs
root=ubi0:root rw
bootcmd=nboot 0x80600000 0 0x100000; bootm

в ядре UBIFS включено:
CONFIG_UBIFS_FS=y
CONFIG_UBIFS_FS_XATTR=y
# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
CONFIG_UBIFS_FS_LZO=y
CONFIG_UBIFS_FS_ZLIB=y
CONFIG_UBIFS_FS_DEBUG=y
CONFIG_UBIFS_FS_DEBUG_MSG_LVL=2
# CONFIG_UBIFS_FS_DEBUG_CHKS is not set

Похоже тут или я что-то не понял, или в ядре что-то собрано не так.
Киньте мне кто-нибудь рабочий конфиг ядра, или натолкните на мысль
чяднт, плз...

Peter Zotov

unread,
Mar 25, 2011, 7:44:22 AM3/25/11
to vog...@googlegroups.com
On Fri, 25 Mar 2011 01:11:53 -0700 (PDT), iev wrote:
> В общем почему-то у меня не запускается.
> Исходники качал с репозиториев, ядро - ветка xz0032-dev.
> Делал всё по мануалу с сайта, всё в общем-то собралось (неплохо бы
> добавить строчку "echo upstart +uclibc >> etc/use.conf" в секцию
> "Сборка программ Squirrel"). На выходе u-boot-nand.bin, uImage,
> rootfs.ubi. Прошиваю в плату:
> source config/boot.cfg
> nerase 0 0 4096
> nprogram 0 0 u-boot-nand.bin
> nprogram 0 512 uImage
> nprogram_ubi 0 8192 rootfs.ubi

Знакомо, у меня при тестировании выводило то же. Я тогда решил, что
это бедблок на флешке.
Учитывая, что у вас тоже не работает PEB 33, я склоняюсь к тому, что
я в корне неверно работаю с mkfs.ubi/ubinize, но, честно говоря,
проблему
пока найти не смог.

Как тогда прошить плату? У меня есть три варианта.

Первый, если есть SD/MMC-слот, то загрузиться с карточки. Возможно, я
потом
даже допилю бут, чтобы он оттуда работал, проц-то умеет.

Второй, сделать минимальный инитрд, и залить образ через ssh.
ubiformat принимает аргумент -- образ, который нужно залить;
таким образом, нужно сделать что-то вроде такого:
$ cat rootfs.ubi | ssh 10.0.0.2 'ubiformat /dev/mtd2 -f '

Третий, которым пользовался я, но который не очень удобен, зайти через
шелл, закинуть все пакеты на рутовую ФС через ssh/scp, а потом добавить
opkg нужный destination:
$ echo "dest new-root /new-root" >/etc/opkg/new-root.conf
и поставить всю эту хрень:
/new-root/packages $ opkg -d new-root install *.ipk

По-хорошему, конечно, надо бы понять, что это с UBI, но мне пока
отладить не удалось.
Дамп по какому-то странному закону не совпадает с тем, что заливалось,
при
этом почему-то блок каждый раз один и тот же.

--
WBR, Peter Zotov.

iSage

unread,
Mar 25, 2011, 4:18:51 AM3/25/11
to vog...@googlegroups.com
Шили с ECCPOS = 3 ?

2011/3/25 iev <i...@land.ru>:

--
Close the world...
...Open the next.

iev

unread,
Mar 25, 2011, 11:48:26 AM3/25/11
to VoGeeky
Пробовал и так и эдак, единственный вариант при котором плата при
включении не вываливает кучу "Uncorrected ECC error" это скрипт из
репозитория jzboot
flash_xz0032_linux.scr:

source config/boot.cfg
nerase 0 0 4096
nprogram 0 0 u-boot-nand.bin
nprogram 0 512 uImage
nprogram_ubi 0 8192 rootfs.ubi # тут было nprogram_oob 0 8192
rootfs.yaffs2

Так как ядро начинает запускаться, а дамп rootfs.ubi вроде похож на то
что прошивал (по крайней мере вначале, сейчас попробую посмотреть
повнимательнее), возможно проблема где-то в uImage или rootfs.ubi.
Если есть под рукой рабочий вариант flash_xz0032_linux.scr + uImage +
rootfs.ubi просьба выслать на iev _at_ land.ru

iev

unread,
Mar 25, 2011, 12:02:18 PM3/25/11
to VoGeeky
Спасибо за ответ. Впереди выходные, буду пробовать и так и эдак.

ps. Какой именно блок в дампе не совпадает с тем что записывалось? В
распоряжении есть две платы, сейчас буду смотреть насколько дамп
совпадает или нет на обеих.

pps. Я то думал, странно что это рабочие бинарники с ubifs на сайте не
лежат... раскатал губу оказывается...

iev

unread,
Mar 25, 2011, 12:21:05 PM3/25/11
to VoGeeky
Сравнил дамп с тем что заливал, не совпадают блоки по 2кб:
8192 + 704
...
8192 + 711
остальное совпадает...

iev

unread,
Mar 25, 2011, 1:25:15 PM3/25/11
to VoGeeky
ну вот, с ECCPOS = 3 пишется без ошибок, а дамп после этого делается
не полностью: пишу 6029312, читаю 5767168 байт...

iev

unread,
Mar 25, 2011, 1:35:20 PM3/25/11
to VoGeeky
на второй плате - тоже самое: считывается 5767168байт, после этого в
uart сыпется "Uncorrectable ECC error occurred"
Reply all
Reply to author
Forward
0 new messages