AnsweredAssumed Answered

unable to updata u-boot using fw_setenv after extended test

Question asked by Aaronwu Employee on Sep 7, 2011
Latest reply on Oct 12, 2011 by Aaronwu

Hi folks,

We are using u-boot to store some key environment variables that are  needed (mainly the active partition/kernel to boot from).  Changing this  one variable alternates between each partition.

We are storing our u-boot environment in NAND, using a redundant  environment, and have 4 flash blocks allocated for each environment.

We have a loop test which verifies operation of this feature  repeatedly, and runs in a continuous loop.  After several hundred  successful operations (I got > 300 last night), the fw_setenv command  fails without giving me an error code.  I'm detecting it by issuing a  fw_printenv after the command, and validating that the new environment  is correct.

In fw_env.c, I've added the following line to get some additional  information:

case FLAG_INCREMENTAL:
                    if ((flag0 == 255 && flag1 == 0) ||
                        flag1 > flag0)
                         dev_current = 1;
                    else if ((flag1 == 255 && flag0 == 0) ||
                          flag0 > flag1)
                         dev_current = 0;
                    else /* flags are equal - almost impossible */
                         dev_current = 0;
                    fprintf(stderr,"flag0=%d,flag1=%d,dev_current=%d\n",flag0,flag1,dev_current);
                    break;

 

The last 5 updates look like this:

Jan  1 15:02:19 root: flag0=123,flag1=124,dev_current=1
Jan  1 15:03:06 root: flag0=125,flag1=124,dev_current=0
Jan  1 15:03:52 root: flag0=125,flag1=126,dev_current=1
Jan  1 15:04:39 root: flag0=127,flag1=126,dev_current=0
Jan  1 15:04:39 root: flag0=127,flag1=-128,dev_current=0
Jan  1 15:05:26 root: flag0=127,flag1=-128,dev_current=0
Jan  1 15:05:26 root: flag0=127,flag1=-128,dev_current=0


Outcomes