xiaoliu5116 发表于 2015-7-7 01:44:16

cubieboard2 uboot 环境变量无法保存

在uboot中,执行setenv,保存,重启后发现没有保存。
解决步骤:
1:sun7i.h中 #define DEBUG    1
2:烧录。进入uboot模式,执行printenv和saveenv,可以看到如下:
sunxi flash read : start 0x1a800, sector 0x100
mmcboot write: start 0x1a800, sector 0x100
查看代码,对应
sunxi_flash_read和sunxi_flash_write函数。
3:串口看,系统没有出错导致使用默认的环境变量。分析认为读写地址是对的。
4:再看代码,在flash_env_relocate_spec函数中的read后加打印,确实读出的是环境变量,只是没有新建的变量。
   这时,确定是保存函数出问题。
5:static int flash_saveenv(void),感觉有问题:
static int flash_saveenv(void)
{
      。。。 。。。
      return sunxi_flash_write(env_offset, env_size/512, &env_new);
}
修改如下:

static int flash_saveenv(void)
{
        u32 start;
        。。。 。。。
        start = sunxi_partition_get_offset_byname(CONFIG_SUNXI_ENV_PARTITION);
        return sunxi_flash_write(start, CONFIG_ENV_SIZE/512, &env_new);
}
测试好了。


xiaoliu5116 发表于 2015-7-7 02:55:26

不好意思,步骤2错了:
通过dbg发现:
mmcboot read: start 0x18000, sector 0x100
mmcboot write: start 0x1a800, sector 0x100
可以肯定是地址错了。
再看代码,按步骤5修改,就好了。

抱歉。
页: [1]
查看完整版本: cubieboard2 uboot 环境变量无法保存