找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3436|回复: 0
打印 上一主题 下一主题
收起左侧

itop修改uboot使之能保存环境变量

[复制链接]
跳转到指定楼层
楼主
ID:337263 发表于 2018-5-24 14:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                                修改uboot使之能保存环境变量
思路与步骤:

        1.想要保存环境变量,就要使用saveenv命令

        2.由uboot的命令体系可推测saveenv命令对应的函数是do_saveenv,可以在sourceinsight工程直接搜索此函数
       
        3.找到函数int do_saveenv (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]),发现真正做事的函数是saveenv()函数
       
        4.继续找saveenv()函数,发现有很多个,真正的在env_auto.c中
       
        5.分析uboot,可知INF_REG3_REG的值,如果没记错INF_REG3_REG = 7的,所以走的是else这条路
       
        6.你会发现这里什么都没有做,只有 printf("Unknown boot device\n");
       
        7.那我们就添加保存的函数,函数哪里来,就在前面,saveenv_movinand(),这个就是我们需要的函数
       
        8.你以为这就完了,不存在的,进去看看它做了什么
       
        9. mmc_init(find_mmc_device(0));检查mmc设备是否存在
       movi_write_env(virt_to_phys((ulong)env_ptr));把要保存的环境变量写进去,没毛病,这是我们想要的,可是这函数里面有个致命的错误
       
        10.movi_write(raw_area_control.image[2].start_blk,
                raw_area_control.image[2].used_blk, addr);我们源码中把要保存的环境变量保存到raw_area_control.image[2]中,但实际上uboot的分区是
                raw_area_control.image[3]保存的才是环境变量
       
        11.在哪看分区信息?init_raw_area_table()函数中,可以直接由raw_area_control的定义间接找到
       
        12.把raw_area_control.image[2]改成raw_area_control.image[3],大功告成。
       
        2018年5月23
        DGY(编)
       

       
       

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表