[U-Boot-Users] Redundant environment expected behavior vs current

Tolunay Orkun listmember at orkun.us
Wed Apr 26 02:59:29 CEST 2006


Wolfgang Denk wrote:
> In message <444EB1D5.1000804 at orkun.us> you wrote:
>   
>> I agree but once you have written the one copy of the environment and 
>> protect it (if you have hardware support), one copy is already securely 
>> written you can go ahead and write the second environment.  We changed 
>>     
>
> You just said that the data is securely written and protected.
>
>   
Due to aging flash flash sectors that is written can change in which 
case, the newly written one might show up corrupt **over time**. At that 
time U-Boot will switch to the second copy but second copy does not have 
the latest stuff we put/modified because we did not sync them.

What I am trying to save redundancy means within "certain limitations" 
we can recover the data that is redundant. This redundancy scheme does 
not provide for that. By certain limitation I am pointing to things like 
number of correctable bits in ram , number of simultaneous disk failures 
in a RAID 5 array etc.
>> the environment because the old one was not right so keeping the old 
>> environment after one copy is written might not save us in certain 
>> situations.
>>     
>
> Which are?
>   
Say, I am booting one of the two kernels/initrd in flash. Or NFS booting 
from a different IP etc. Supplying a different kernel command line.

> Writing the new environment twice just adds flash wear.
>   
I agree but we are already adding wear by writing the flag byte location 
of that sector. Failure of the flag byte will make it unusable as well. 
Besides, if we are not going to update the environment frequently wear 
due to repeated write issue not a concern. Having a truly redundant 
environment is of greater in importance in my opinion.

>> forget to do this sort of stuff after some time. It would be great if 
>> the sync is provided as an option. How about CFG_ENV_REDUND_SYNC (or 
>> something like this) that runs the save command twice internally or 
>> something like that to that effect?
>>     
>
> Feel free to add this as a local extension. I  don;t  think  I  would
> ever enable this on any of my boards.
>   
I will have to add the code associated with this option into 
common/env_flash.c. If CFG_ENV_REDUND_SYNC is not defined no new code is 
added and existing operation would be maintained. So, if you do not see 
any benefit from this you will not have to change anything... I can add 
this option to others (say env_nand.c) as well for parallelism.

>> The current scheme also does not sync environment from the good one if 
>> one environment detected bad during boot. Should U-Boot fix the bad one 
>> from the good one automatically? Currently, I think there is not even a 
>>     
>
> U-Boot never does any automatic writing to flash. This is something I
> consider evil.
>   
Yes, I agree. But I think we need to know if one copy of environment is 
bad just like one, there has been a correctable parity error or  one 
disk of a raid5 array has failed so a corrective action could be performed.

>   
>> diagnostic message that one environment is bad.
>>     
>
> No, should there be  one?  Obviously  a  "saveenv"  command  did  not
> complete succesfully; maybe just one millisecond eralier it would not
> have been started at all.
>   
Maybe saveenv completed correctly and over time there was been charge 
decay in flash cell caused some bits to flip....

>> How about U-Boot commands to verify environment so we can use it to do 
>> the sync etc. in a script.
>>     
>
> They are all in place. (crc, test). Just  use  them  as  needed.  But
>   
crc is too general purpose. I need to have to add knowledge of where the 
environment is stored and organized etc. which is not a big deal but not 
clean to use in a script. Luckily U-Boot environment structure is 
simpler than uimage files.

> frankly:  did  you  ever  see any corruption of NOR flash except when
> erasing / writing? And if you did, are you only concerned  about  the
> contents of the environment variables?
>   
I did see this happen in aging flash. It is not common and possibly more 
recent flashes probably have better charge retention etc. but it happens.

Best regards,
Tolunay






More information about the U-Boot mailing list