[U-Boot] dfu: dfu and UBI Volumes

Heiko Schocher hs at denx.de
Sun May 26 09:09:22 CEST 2013


Hello Tom,

Am 24.05.2013 19:12, schrieb Tom Rini:
> On Fri, May 24, 2013 at 07:42:01PM +0300, Pantelis Antoniou wrote:
>> Hi Heiko,
>>
>> On May 24, 2013, at 7:39 PM, Heiko Schocher wrote:
>>
>>> Hello,
>>>
>>> just digging in DFU support in U-Boot for an upcoming board support
>>> based on an AM335x. This board support uses for example a rootfs in
>>> an UBI Volume on a NAND flash, and this should be updated with dfu ...
>>>
>>> How To do this? Current state on this board is to erase the rootfs
>>> mtd partition with a nand erase and write the new image using
>>> dfu_nand.c ... which calls in the end nand_write ... which is ...
>>> lets say ... not the prefered way on an UBI volume ...
>>>
>>> How to solve this? Any ideas?
>>
>> Well, what would you like ideally to do? Why is nand_write not ideal for
>> a UBI volume.
>>
>> Note that dfu will skip over the bad blocks... 
> 
> Presumably because they want to replace say ubi0:rootfs (and leave
> ubi0:user-data and ubi0:u-boot-env and so forth alone) rather than write
> in a new ubi container of everything.
> 
> I would suggest that, so long as our existing UBI infrastructure allows
> this, you add a new method, dfu_ubi which takes care of programming
> things.  This shouldn't be too bad to write as I've heard the existing
> infrastucture was easily expanded for SPI (and patches are pending a
> little more clean up prior to posting).

This sounds easy ... but they have also raw nand partitions, for
example spl partitions on one nand flash ... for which dfu_nand.c
fits perfectly ... is it possible to use dfu_nand.c and another dfu_xxx.c
at the same time?

I would say no, if I understand the code right:
- starting dfu with "dfu interface={nand or mmc} ..."

and after that, you can not switch anymore between nand or mmc, right?

You must press Ctrl-C to end dfu and start it again for switching
to another interface ...

Or should I look to add ubi support to drivers/dfu/dfu_nand.c?

Something like:
Add in dfu_fill_entity_nand a "else if (!strcmp(st, "ubipart")) {"
(Did not looked deeper in this, if this is a possible way... and
 thinking about it ... it is not the correct way, ubi should be
 seperate, because it maybe runs also on nor flash ...)

So, the best way would be, to switch in "dfu nand" mode between
subinterfaces ... like "raw", "part", "ubi", ...

Ah, looking in drivers/dfu/dfu_mmc.c, they use dfu->layout
for switching between DFU_RAW_ADDR, DFU_FS_FAT, DFU_FS_EXT4...

After all ... should we add a DFU_UBI and add this to
drivers/dfu/dfu_nand.c?

bye,
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany


More information about the U-Boot mailing list