linux-mtd.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* Flashing UBIFS image to gluebi mtd
@ 2013-10-31 13:48 Konstantin Tokarev
  2013-10-31 15:08 ` Ezequiel Garcia
  0 siblings, 1 reply; 8+ messages in thread
From: Konstantin Tokarev @ 2013-10-31 13:48 UTC (permalink / raw)
  To: linux-mtd

Hi all,

I'm migrating rootfs of device from SquashFS on top of gluebi to UBIFS. However, old version of
firmware upgrade program writes UBIFS image to gluebi mtd device instead of using recommended
volume update procedure. While it works for SquashFS images, writing UBIFS image leads to
the next errors messages in random moments:

UBI error: ubi_io_read: error -77 while reading 76 bytes from PEB 769:26000, read 0 bytes
UBIFS error (pid 383): ubifs_read_node: cannot read node 2 from LEB 347:21904, error -5
UBIFS warning (pid 383): ubifs_ro_mode: switched to read-only mode, error -5

However, when device is rebooted first time after upgrade, UBIFS mounts successfully.

Do you have any idea what is going on and how to destinguish "broken" UBIFS volume from
correctly flashed via ubi volume device?

-- 
Regards,
Konstantin

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Flashing UBIFS image to gluebi mtd
  2013-10-31 13:48 Flashing UBIFS image to gluebi mtd Konstantin Tokarev
@ 2013-10-31 15:08 ` Ezequiel Garcia
  2013-10-31 18:00   ` Konstantin Tokarev
  0 siblings, 1 reply; 8+ messages in thread
From: Ezequiel Garcia @ 2013-10-31 15:08 UTC (permalink / raw)
  To: Konstantin Tokarev; +Cc: linux-mtd

Hi Konstantin,

On Thu, Oct 31, 2013 at 05:48:34PM +0400, Konstantin Tokarev wrote:
> 
> I'm migrating rootfs of device from SquashFS on top of gluebi to UBIFS.

Sounds like you could use ubiblock for that setup, which is suitable
for squashfs, and completely independent of ubifs (thus less cpu and
memory hungry and easier to setup).

You can find some patches floating around, but the *latest* work
is here:

http://git.free-electrons.com/users/ezequiel-garcia/linux/log/?h=ubiblock-v4-cache-optional

And you'll need a patch for mtd-utils as well:

http://git.free-electrons.com/users/ezequiel-garcia/mtd-utils

Feel free to use it and report any issues. However, be very
careful as the driver is a bit experimental yet.

Others are already using it, so it should be more or less
fine!
-- 
Ezequiel García, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Flashing UBIFS image to gluebi mtd
  2013-10-31 15:08 ` Ezequiel Garcia
@ 2013-10-31 18:00   ` Konstantin Tokarev
  2013-10-31 18:40     ` Ezequiel Garcia
  2013-11-01  7:48     ` Ricard Wanderlof
  0 siblings, 2 replies; 8+ messages in thread
From: Konstantin Tokarev @ 2013-10-31 18:00 UTC (permalink / raw)
  To: Ezequiel Garcia; +Cc: linux-mtd@lists.infradead.org



31.10.2013, 19:08, "Ezequiel Garcia" <ezequiel.garcia@free-electrons.com>:
> Hi Konstantin,
>
> On Thu, Oct 31, 2013 at 05:48:34PM +0400, Konstantin Tokarev wrote:
>
>>  I'm migrating rootfs of device from SquashFS on top of gluebi to UBIFS.
>
> Sounds like you could use ubiblock for that setup, which is suitable
> for squashfs, and completely independent of ubifs (thus less cpu and
> memory hungry and easier to setup).

Could you elaborate this a bit more? Do you mean that block device emultaion
layer on top of UBI + FS on top of that can work faster than UBIFS on top of
UBI?

Btw, I'm more interested in finding out in what way my UBIFS volume can be
broken in given scenario and how can I detect it (to reflash once again,
using UBI-aware updater this time).

-- 
Regards,
Konstantin

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Flashing UBIFS image to gluebi mtd
  2013-10-31 18:00   ` Konstantin Tokarev
@ 2013-10-31 18:40     ` Ezequiel Garcia
  2013-11-01  7:48     ` Ricard Wanderlof
  1 sibling, 0 replies; 8+ messages in thread
From: Ezequiel Garcia @ 2013-10-31 18:40 UTC (permalink / raw)
  To: Konstantin Tokarev; +Cc: linux-mtd@lists.infradead.org

On Thu, Oct 31, 2013 at 10:00:30PM +0400, Konstantin Tokarev wrote:
> 
> 
> 31.10.2013, 19:08, "Ezequiel Garcia" <ezequiel.garcia@free-electrons.com>:
> > Hi Konstantin,
> >
> > On Thu, Oct 31, 2013 at 05:48:34PM +0400, Konstantin Tokarev wrote:
> >
> >>  I'm migrating rootfs of device from SquashFS on top of gluebi to UBIFS.
> >
> > Sounds like you could use ubiblock for that setup, which is suitable
> > for squashfs, and completely independent of ubifs (thus less cpu and
> > memory hungry and easier to setup).
> 
> Could you elaborate this a bit more? Do you mean that block device emultaion
> layer on top of UBI + FS on top of that can work faster than UBIFS on top of
> UBI?
> 

Given you provided no details, I'm not sure why you're migrating from squashfs
(which is a read-only, block oriented fs) to ubifs (which supports r/w on MTD).
But anyway, let me do this homework for you :-)

So, you had squashfs on top of gluebi, right? I guess you had this:

  mtd (plus your NAND driver) -> ubi -> gluebi/mtd -> mtdblock -> squashfs

On the other side, using ubiblock to emulate the block device you'd
end up with this:

  mtd (plus your NAND driver) -> ubi -> ubiblock -> squashfs

Which is less memory (cpu?) hungry than the first alternative.
The latest git branch also contained a non-cached option which
has shown some good behavior, given squashfs does its own caching.

But of course, this is _NOT_ a replacement for UBIFS, and using ubiblock
for R/W is strictly discouraged.

And here's the (already ancient) discussion:

http://lists.infradead.org/pipermail/linux-mtd/2012-November/045011.html

And the v2:
http://lists.infradead.org/pipermail/linux-mtd/2012-December/045274.html

I'll post the latest work as soon as I find some time, but you're free
to pursue your own research.

Hope it helps and best of lucks!
-- 
Ezequiel García, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Flashing UBIFS image to gluebi mtd
  2013-10-31 18:00   ` Konstantin Tokarev
  2013-10-31 18:40     ` Ezequiel Garcia
@ 2013-11-01  7:48     ` Ricard Wanderlof
  2013-11-01  9:12       ` Konstantin Tokarev
  1 sibling, 1 reply; 8+ messages in thread
From: Ricard Wanderlof @ 2013-11-01  7:48 UTC (permalink / raw)
  To: Konstantin Tokarev; +Cc: linux-mtd@lists.infradead.org


On Thu, 31 Oct 2013, Konstantin Tokarev wrote:

>
>
> 31.10.2013, 19:08, "Ezequiel Garcia" <ezequiel.garcia@free-electrons.com>:
>> Hi Konstantin,
>>
>> On Thu, Oct 31, 2013 at 05:48:34PM +0400, Konstantin Tokarev wrote:
>>
>>>  I'm migrating rootfs of device from SquashFS on top of gluebi to UBIFS.
>>
>> Sounds like you could use ubiblock for that setup, which is suitable
>> for squashfs, and completely independent of ubifs (thus less cpu and
>> memory hungry and easier to setup).
>
> Could you elaborate this a bit more? Do you mean that block device emultaion
> layer on top of UBI + FS on top of that can work faster than UBIFS on top of
> UBI?
>
> Btw, I'm more interested in finding out in what way my UBIFS volume can be
> broken in given scenario and how can I detect it (to reflash once again,
> using UBI-aware updater this time).

You didn't mention how you overwrote your UBI partition with new data. dd 
? nandwrite ? I'm getting the impression your problem is based on the fact 
that when updating the firmware, you are using update firmware which is 
not UBI aware, and you don't get UBI-awareness on the system until you've 
done the update. A chicken-and-egg-situation. One solution in that case 
would be to have an intermediate firmware which was identical to what was 
in the device to start with but that had an UBI-aware upgrade application.

Also I don't think you mentioned exactly your old setup. I'm assuming 
squashfs on top of mtd, with no UBI involved, right?

/Ricard
-- 
Ricard Wolf Wanderlöf                           ricardw(at)axis.com
Axis Communications AB, Lund, Sweden            www.axis.com
Phone +46 46 272 2016                           Fax +46 46 13 61 30

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Flashing UBIFS image to gluebi mtd
  2013-11-01  7:48     ` Ricard Wanderlof
@ 2013-11-01  9:12       ` Konstantin Tokarev
  2013-11-01  9:43         ` Ricard Wanderlof
  0 siblings, 1 reply; 8+ messages in thread
From: Konstantin Tokarev @ 2013-11-01  9:12 UTC (permalink / raw)
  To: Ricard Wanderlof; +Cc: linux-mtd@lists.infradead.org



01.11.2013, 11:48, "Ricard Wanderlof" <ricard.wanderlof@axis.com>:
> On Thu, 31 Oct 2013, Konstantin Tokarev wrote:
>
>>  31.10.2013, 19:08, "Ezequiel Garcia" <ezequiel.garcia@free-electrons.com>:
>>>  Hi Konstantin,
>>>
>>>  On Thu, Oct 31, 2013 at 05:48:34PM +0400, Konstantin Tokarev wrote:
>>>>   I'm migrating rootfs of device from SquashFS on top of gluebi to UBIFS.
>>>  Sounds like you could use ubiblock for that setup, which is suitable
>>>  for squashfs, and completely independent of ubifs (thus less cpu and
>>>  memory hungry and easier to setup).
>>  Could you elaborate this a bit more? Do you mean that block device emultaion
>>  layer on top of UBI + FS on top of that can work faster than UBIFS on top of
>>  UBI?
>>
>>  Btw, I'm more interested in finding out in what way my UBIFS volume can be
>>  broken in given scenario and how can I detect it (to reflash once again,
>>  using UBI-aware updater this time).
>
> You didn't mention how you overwrote your UBI partition with new data. dd
> ? nandwrite ?

I write data to mtd device file (gluebi-based in this case) using write()
function, one mtd eraseblock at a time. Effectively it's the same as dd.

> I'm getting the impression your problem is based on the fact
> that when updating the firmware, you are using update firmware which is
> not UBI aware, and you don't get UBI-awareness on the system until you've
> done the update.

Exactly.

> A chicken-and-egg-situation. One solution in that case
> would be to have an intermediate firmware which was identical to what was
> in the device to start with but that had an UBI-aware upgrade application.

Not a solution, because end user of device might skip this intermediate
firmware accidentally.

It would be perfectly OK if rootfs failed to mount after update because
it led to reflash once again with the same firmware. It would be possible
to do any new consistency check, because initramfs software had already
been upgraded.

The problem is that incorrectly flashed UBIFS mounts without error,
all content is readable and has valid md5sums, and file write and
mv operations also succeed.

>
> Also I don't think you mentioned exactly your old setup. I'm assuming
> squashfs on top of mtd, with no UBI involved, right?

No, on top of UBI (to handle bad blocks and wear leveling).

-- 
Regards,
Konstantin

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Flashing UBIFS image to gluebi mtd
  2013-11-01  9:12       ` Konstantin Tokarev
@ 2013-11-01  9:43         ` Ricard Wanderlof
  2013-11-01 11:10           ` Konstantin Tokarev
  0 siblings, 1 reply; 8+ messages in thread
From: Ricard Wanderlof @ 2013-11-01  9:43 UTC (permalink / raw)
  To: Konstantin Tokarev; +Cc: linux-mtd@lists.infradead.org


On Fri, 1 Nov 2013, Konstantin Tokarev wrote:

>>>  Btw, I'm more interested in finding out in what way my UBIFS volume can be
>>>  broken in given scenario and how can I detect it (to reflash once again,
>>>  using UBI-aware updater this time).
>>
>> You didn't mention how you overwrote your UBI partition with new data. dd
>> ? nandwrite ?
>
> I write data to mtd device file (gluebi-based in this case) using write()
> function, one mtd eraseblock at a time. Effectively it's the same as dd.

How do you handle potential bad blocks in the flash ?

>> Also I don't think you mentioned exactly your old setup. I'm assuming
>> squashfs on top of mtd, with no UBI involved, right?
>
> No, on top of UBI (to handle bad blocks and wear leveling).

Sorry, my bad, reading your post again I see that you explicitly stated 
squashfs on top of gluebi ...

>> I'm getting the impression your problem is based on the fact
>> that when updating the firmware, you are using update firmware which is
>> not UBI aware, and you don't get UBI-awareness on the system until you've
>> done the update.
>
> Exactly.

... which means that you've been running UBI all the time, but not ubifs. 
(?)

>> A chicken-and-egg-situation. One solution in that case
>> would be to have an intermediate firmware which was identical to what was
>> in the device to start with but that had an UBI-aware upgrade application.
>
> Not a solution, because end user of device might skip this intermediate
> firmware accidentally.

I was afraid of that ... :-)

>
> It would be perfectly OK if rootfs failed to mount after update because
> it led to reflash once again with the same firmware. It would be possible
> to do any new consistency check, because initramfs software had already
> been upgraded.
>
> The problem is that incorrectly flashed UBIFS mounts without error,
> all content is readable and has valid md5sums, and file write and
> mv operations also succeed.

But in your original post, the following line was present in the log:

UBIFS warning (pid 383): ubifs_ro_mode: switched to read-only mode, error 
-5

indicating that writing had been switched off due to the errors detected. 
Of course, this might be arbitrary depending on exactly which errors 
happened to occur at that particular boot instance.

/Ricard
-- 
Ricard Wolf Wanderlöf                           ricardw(at)axis.com
Axis Communications AB, Lund, Sweden            www.axis.com
Phone +46 46 272 2016                           Fax +46 46 13 61 30

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Flashing UBIFS image to gluebi mtd
  2013-11-01  9:43         ` Ricard Wanderlof
@ 2013-11-01 11:10           ` Konstantin Tokarev
  0 siblings, 0 replies; 8+ messages in thread
From: Konstantin Tokarev @ 2013-11-01 11:10 UTC (permalink / raw)
  To: Ricard Wanderlof; +Cc: linux-mtd@lists.infradead.org

01.11.2013, 13:43, "Ricard Wanderlof" <ricard.wanderlof@axis.com>:

>  On Fri, 1 Nov 2013, Konstantin Tokarev wrote:
>>>>    Btw, I'm more interested in finding out in what way my UBIFS volume can be
>>>>    broken in given scenario and how can I detect it (to reflash once again,
>>>>    using UBI-aware updater this time).
>>>   You didn't mention how you overwrote your UBI partition with new data. dd
>>>   ? nandwrite ?
>>   I write data to mtd device file (gluebi-based in this case) using write()
>>   function, one mtd eraseblock at a time. Effectively it's the same as dd.
>  How do you handle potential bad blocks in the flash ?

Bad blocks are detected using ioctl on mtd device (MEMGETBADBLOCK) and skipped,
though AFAIU gluebi mtd cannot have bad blocks.

>>>   Also I don't think you mentioned exactly your old setup. I'm assuming
>>>   squashfs on top of mtd, with no UBI involved, right?
>>   No, on top of UBI (to handle bad blocks and wear leveling).
>  Sorry, my bad, reading your post again I see that you explicitly stated
>  squashfs on top of gluebi ...
>>>   I'm getting the impression your problem is based on the fact
>>>   that when updating the firmware, you are using update firmware which is
>>>   not UBI aware, and you don't get UBI-awareness on the system until you've
>>>   done the update.
>>   Exactly.
>  ... which means that you've been running UBI all the time, but not ubifs.
>  (?)

Yes.

I guess that we should have written SquashFS images using UBI volume update
procedure as well, to UBI device instead of gluebi MTD. Code was written to
write filesystems like JFFS2 to raw MTD's and just reused here without second
thought.

>>>   A chicken-and-egg-situation. One solution in that case
>>>   would be to have an intermediate firmware which was identical to what was
>>>   in the device to start with but that had an UBI-aware upgrade application.
>>   Not a solution, because end user of device might skip this intermediate
>>   firmware accidentally.
>  I was afraid of that ... :-)
>>   It would be perfectly OK if rootfs failed to mount after update because
>>   it led to reflash once again with the same firmware. It would be possible
>>   to do any new consistency check, because initramfs software had already
>>   been upgraded.
>>
>>   The problem is that incorrectly flashed UBIFS mounts without error,
>>   all content is readable and has valid md5sums, and file write and
>>   mv operations also succeed.
>  But in your original post, the following line was present in the log:
>
>  UBIFS warning (pid 383): ubifs_ro_mode: switched to read-only mode, error
>  -5
>
>  indicating that writing had been switched off due to the errors detected.
>  Of course, this might be arbitrary depending on exactly which errors
>  happened to occur at that particular boot instance.

I've read code of gluebi_write in gluebi.c, vol_cdev_ioctl in cdev.c, and
ubi_start_update in upd.c - looks like the only difference between correct
update and what is done in my case is that volume is not wiped out before
writing new volume image here.

(I know that raw mtd on NAND should be erased as well, but this is not done
for gluebi MTD because our code erases MTD only if MTD type == MTD_NANDFLASH)

-- 
Regards,
Konstantin

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2013-11-01 11:11 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-31 13:48 Flashing UBIFS image to gluebi mtd Konstantin Tokarev
2013-10-31 15:08 ` Ezequiel Garcia
2013-10-31 18:00   ` Konstantin Tokarev
2013-10-31 18:40     ` Ezequiel Garcia
2013-11-01  7:48     ` Ricard Wanderlof
2013-11-01  9:12       ` Konstantin Tokarev
2013-11-01  9:43         ` Ricard Wanderlof
2013-11-01 11:10           ` Konstantin Tokarev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).