[U-Boot] Older u-boot mangles UBI from ubinize 1.5.2
J Mo
jmomo at jmomo.net
Thu Aug 11 04:26:54 CEST 2016
Greetings
I am attempting to port LEDE/OpenWRT to a new device; the TRENDnet
TEW-827DRU, which is a IPQ806X-based (AP148) system. It has a NAND flash
for storage with a UBI (kernel + squashfs + ubifs).
When my system attempts to attach the UBI, I see the following error
from linux:
[ 3.781181] ubi0: attaching mtd11
[ 3.835224] UBI: EOF marker found, PEBs from 40 will be erased
[ 3.835384] ubi0: scanning is finished
[ 3.840040] ubi0 error: ubi_read_volume_table: the layout volume was
not found
[ 3.844072] ubi0 error: ubi_attach_mtd_dev: failed to attach mtd11,
error -22
[ 3.850897] UBI error: cannot attach mtd11
I took this to google and it turns out that Ram Chandra Jangir here had
noted the same issue a few months back, and then I got lucky and saw his
patches yesterday:
https://patchwork.ozlabs.org/patch/657285/
https://patchwork.ozlabs.org/patch/624733/
I emailed Ram and he sent me his boot log and it looks identical to
mine, so I think it's the same issue. (thx again Ram!)
I tried re-flashing my UBI and tftpbooting my kernel before u-boot could
ever get a chance to mangle it, and now I get much further, though I'm
still not able to mount my rootfs for unknown reasons:
[ 3.772502] ubi0: attaching mtd11
[ 3.826477] UBI: EOF marker found, PEBs from 40 will be erased
[ 3.826638] ubi0: scanning is finished
[ 3.872936] ubi0: volume 2 ("rootfs_data") re-sized from 9 to
430 LEBs
[ 3.873734] ubi0: attached mtd11 (name "rootfs", size 64 MiB)
[ 3.878347] ubi0: PEB size: 131072 bytes (128 KiB), LEB size:
126976 bytes
[ 3.884234] ubi0: min./max. I/O unit sizes: 2048/2048, sub-page
size 2048
[ 3.890936] ubi0: VID header offset: 2048 (aligned 2048), data
offset: 4096
[ 3.897849] ubi0: good PEBs: 512, bad PEBs: 0, corrupted PEBs: 0
[ 3.904627] ubi0: user volume: 3, internal volumes: 1, max.
volumes count: 128
[ 3.910815] ubi0: max/mean erase counter: 1/0, WL threshold:
4096, image sequence number: 2142265782
[ 3.917902] ubi0: available PEBs: 0, total reserved PEBs: 512,
PEBs reserved for bad PEB handling: 40
[ 3.927275] ubi0: background thread "ubi_bgt0d" started, PID 54
[ 3.937007] block ubiblock0_1: created from ubi0:1(rootfs)
[ 3.942096] hctosys: unable to open rtc device (rtc0)
[ 3.956528] VFS: Cannot open root device "ubi0:rootfs" or
unknown-block(31,11): error -2
[ 3.956556] Please append a correct "root=" boot option; here
are the available partitions:
Any advice on this? Any background information that I can read up on? My
google searches have not come up with much. Ram knew about this, but I
don't know if it's otherwise a known issue.
The process works fine on the OEM system, so I assume this is some
ubinize format change which is incompatible with the older u-boot. Or,
the newer kernel code doesn't know how to deal with the UBI once the
older u-boot has mangled/attached it.
Seems like a backwards incompatibility issue.
Just to be clear, my kernel is inside the UBI, so u-boot must attach the
UBI and read the volume to boot.
Rebuilding and replacing my u-boot is probably not possible for now,
though I do have the OEM source. My device has a jtag, but I have not
tested it and that's out of my league.
Additional info below:
--
My u-boot version: U-Boot 2012.07 [Standard IPQ806X.LN,r40331]
The old OEM ubinize is 1.2 from mtd-utils-1.4.5.
The old OEM kernel is 3.4.103. New kernel is 4.4.15.
LEDE built from commit 21f460a5dbef5e3ec59e2032b5b113fe045b475f
The new LEDE ubinize version is 1.5.2. The ubinize command (via LEDE's
ubinize-image.sh script) to build my image was (paths truncated for
readability):
ubinize-image.sh --kernel .../TEW827DRU-uImage .../root.squashfs
.../lede-ipq806x-TEW827DRU-squashfs-factory.bin.tmp -p 128KiB -m 2048 -E 5
Notably the new LEDE ubinize command uses "-E 5" whereas the old OEM
does not, but I don't think that's related.
The ubinize.ini file looked like:
[kernel]
mode=ubi
vol_id=0
vol_type=dynamic
vol_name=kernel
image=/.../TEW827DRU-uImage
[rootfs]
mode=ubi
vol_id=1
vol_type=dynamic
vol_name=rootfs
image=/.../root.squashfs
[rootfs_data]
mode=ubi
vol_id=2
vol_type=dynamic
vol_name=rootfs_data
vol_size=1MiB
vol_flags=autoresize
More information about the U-Boot
mailing list