找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3903|回復(fù): 0
收起左側(cè)

itop修改uboot使之能保存環(huán)境變量

[復(fù)制鏈接]
ID:337263 發(fā)表于 2018-5-24 14:01 | 顯示全部樓層 |閱讀模式
                                修改uboot使之能保存環(huán)境變量
思路與步驟:

        1.想要保存環(huán)境變量,就要使用saveenv命令

        2.由uboot的命令體系可推測saveenv命令對應(yīng)的函數(shù)是do_saveenv,可以在sourceinsight工程直接搜索此函數(shù)
       
        3.找到函數(shù)int do_saveenv (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]),發(fā)現(xiàn)真正做事的函數(shù)是saveenv()函數(shù)
       
        4.繼續(xù)找saveenv()函數(shù),發(fā)現(xiàn)有很多個,真正的在env_auto.c中
       
        5.分析uboot,可知INF_REG3_REG的值,如果沒記錯INF_REG3_REG = 7的,所以走的是else這條路
       
        6.你會發(fā)現(xiàn)這里什么都沒有做,只有 printf("Unknown boot device\n");
       
        7.那我們就添加保存的函數(shù),函數(shù)哪里來,就在前面,saveenv_movinand(),這個就是我們需要的函數(shù)
       
        8.你以為這就完了,不存在的,進(jìn)去看看它做了什么
       
        9. mmc_init(find_mmc_device(0));檢查mmc設(shè)備是否存在
       movi_write_env(virt_to_phys((ulong)env_ptr));把要保存的環(huán)境變量寫進(jìn)去,沒毛病,這是我們想要的,可是這函數(shù)里面有個致命的錯誤
       
        10.movi_write(raw_area_control.image[2].start_blk,
                raw_area_control.image[2].used_blk, addr);我們源碼中把要保存的環(huán)境變量保存到raw_area_control.image[2]中,但實際上uboot的分區(qū)是
                raw_area_control.image[3]保存的才是環(huán)境變量
       
        11.在哪看分區(qū)信息?init_raw_area_table()函數(shù)中,可以直接由raw_area_control的定義間接找到
       
        12.把raw_area_control.image[2]改成raw_area_control.image[3],大功告成。
       
        2018年5月23
        DGY(編)
       

       
       

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表