美文网首页BB-black开发板[Linux arm-v8]
定制uboot支持双系统启动--Apple的学习笔记

定制uboot支持双系统启动--Apple的学习笔记

作者: applecai | 来源:发表于2020-10-01 21:54 被阅读0次

    一,前言

    因为学了uboot的启动流程和kernel的启动流程。为了检验自己的理解及灵活运行,那么我就想到做一个uboot支持双系统启动。我的文件系统一样,只是kernel版本不同。
    其实也可以再分个区做文件系统备份,就变成了具备系统还原功能了,mmc写入数据,我的tf卡是老卡比较慢,这个就不尝试了。

    二,双系统切换设计思路

    先要有一个flag来区分到底引导哪个zImage及dtb。而引导的zImage和dtb名字若一样的话需要放不同分区,为了简单起见,我就放同一个分区,不常用的老版本boot就修改名字添加后缀1。
    然后就是这个flag应该保存在哪里,用哪种方式识别的问题了。网上参考了下是放在自定义的新分区中,通过echo>"xx" /dev/sdb3等命令来设置flag,而uboot代码中直接通过mmc读取地址中的内容到ram中。这个方法我尝试了,主要是mmc无法通过命令mmc dev 0 3切换到我的分区。我按我的应用需求的话,flag完全可以放入环境变量中的呀!

    步骤1:自定义环境变量

    setenv mybootflag "new"或setenv mybootflag "old"
    saveenv
    print mybootflag

    步骤2:修改uboot添加判断条件来引导不同kernel

    /studybr/u-boot-2020.10-rc4工程中
    c代码修改,在autoboot.c的autoboot_command函数中一开始就添加

            /* start add by applecai */
            char *st = env_get("mybootflag");
    
            if (st && !strcmp(st, "new"))
            {
                env_set("bootcmd", "mmc dev 0; fatload mmc 0:1 82000000 zImage;fatload mmc 0:1 88000000 am335x-boneblack.dtb; bootz 82000000 - 88000000;"); //use old one
            }
            else
            {
                env_set("bootcmd", "mmc dev 0; fatload mmc 0:1 82000000 zImage1;fatload mmc 0:1 88000000 am335x-boneblack1.dtb; bootz 82000000 - 88000000;");//use new one
            } 
            /* end add by applecai */
    

    步骤3:验证通过

    需要切换启动kernel时候,按空格,修改环境变量mybootflag后,通过reset重启。设置new为启动5.4.61是我当前主要使用的。设置old为启动之前buildroot自带的4.19.59


    image.png
    image.png

    相关文章

      网友评论

        本文标题:定制uboot支持双系统启动--Apple的学习笔记

        本文链接:https://www.haomeiwen.com/subject/twjvuktx.html