UBIFS on Atmel Dataflash

Artem Bityutskiy dedekind1 at gmail.com
Wed Dec 9 03:53:06 EST 2009


On Wed, 2009-12-09 at 09:30 +0100, Andre Puschmann wrote:
> Hi guys,
> 
> this is my very first try to get UBIFS working. My target is an Atmel
> AT91RM9200 cpu which has a 8MB Atmel Dataflash AT45DB642x. Pagesize is
> 1056 Bytes.
> 
> I cross-compiled the ubi tools and my first try to attach was not
> successful:
> 
> $ ./ubiattach /dev/ubi_ctrl -m 6
> UBI: attaching mtd6 to ubi0
> UBI error: io_init: min. I/O unit (1056) is not power of 2

Yeah, I had a feeling we should not have assumed power of 2. But it was
so appealing, because we can avoid (slow) divisions when aligning data
to min. I/O unit boundary. I knew about DataFlash, but it is usually so
small that I did not expect anyone using UBIFS there.

Are you sure you want ubifs on such a tiny flash? We were really
targeting to larger ones, say, starting from 64MiB at least.

Basically, there is not fundamental reasons not to support non-power of
2 min. I/O unit size, besides of optimizations. And to fix this, one
would need to carefully look at / grep for min_io_size usage in both
UBI/UBIFS, and change stuff like ALIGN(x, c->min_io_size) to something
else. But there are very many of such places.

> My question is if it's possible (in general) to get a working version of
> UBIFS on this kind of flash (with no power of two pagesize)? Anybody
> ever tried this?

It is possible, but needs some work, which should not be too difficult.
I never heard anyone trying, though.

> I also tried ubiformat which raises a segfault:
> 
> $ ./ubiformat /dev/mtd6
> ubiformat: warning!: your MTD system is old and it is impossible to
> detect sub-page size. Use -s to get rid of this warning
> ubiformat: assume sub-page to be 1056
> ubiformat: mtd6 (dataflash), size 4815360 bytes (4.6 MiB), 4560
> eraseblocks of 1056 bytes (1.0 KiB), min. I/O size 1056 bytes
> libscan: scanning eraseblock 4559 -- 100 % complete
> ubiformat: 4554 eraseblocks are supposedly empty
> ubiformat: warning!: 6 of 4560 eraseblocks contain non-ubifs data
> ubiformat: continue? (yes/no)  yes
> ubiformat: warning!: only 0 of 4560 eraseblocks have valid erase counter
> ubiformat: erase counter 0 will be used for all eraseblocks
> ubiformat: note, arbitrary erase counter value may be specified using -e
> option
> ubiformat: continue? (yes/no)  yes
> ubiformat: use erase counter 0 for all eraseblocks
> ubiformat: formatting eraseblock 4559 -- 100 % complete
> Segmentation fault
> 
> Any comments on this are highly appreciated.

Yeah, I need to make ubiformat nicely return error instead of dying.

-- 
Best Regards,
Artem Bityutskiy (Артём Битюцкий)




More information about the linux-mtd mailing list