全志H3 linux系统recovery制作过程

本文介绍全志H3 recovery制作过程,代码基于friendly arm的Nano pi M1开发代码。


一,编译打包

     运行配置脚本: . ./buildroot/script/mksetup.sh

     1,芯片类型选择sun8iw7p1,平台选择linux,开发板我这里就选择了dolphin-cmcc-p1

    

  2,执行命令:mklichee

        此命令最终将编译出u-boot、kernel、rootfs以及一些全志自己的环境配置之类的东西。编译成功之后既可以执行打包操作。编译成功后如下图所示。


  3,打包:mkpack

        打包出来的最终文件就是即将烧录的文件。打包如下图所示。




二,烧录

        烧录工具用全志提供的官方烧录工具PhoenixSuit,烧录方法为按住开发板的fel按键,将开发板通过usb接入到电脑上,此时即可正常烧录。烧录后系统会自动起来。

        烧录时会弹出两个对话框,都点“是”即可。


       烧录成功后系统直接启动,用户名为root,不需要密码即可登录。

四,制作带recovery的烧录文件

        这次制作recevory要求recevory能够分别升级正常的boot和rootfs,考虑到尽量少占用flash其中recevory的文件系统选为ramfs。

        1,配置内核

         a,配置ramfs:General Setup->Initial RAM filesystem and RAM disk (initramfs/initrd) support

            选择ramfs file为内核目录里面的rootfs.cpio.gz

         b,配置驱动:Devices Drivers->Block devices->RAM block device support

            其两个子选项值为系统默认即可

         c,File systems->Second extended fs support

         以上三个配置项截图如下:



       

这样再编译出来的boot.img就是带ramfs的了,后面只要配置下环境变量就可以让系统从ramfs启动。

五,配置环境变量

        env.cfg 文件保存了uboot和kernel使用的配置参数信息,本例中使用的是tools/pack/chips/sun8iw7p1/configs/dolphin-cmcc-p1/env.cfg

        除了正常的bootcmd,再添加recoverycmd命令:recoverycmd=run setargs_ram boot_recovery

        添加setargs_ram参数项:setargs_ram=setenv bootargs console=${console} root=${ram_root} init=${init} loglevel=${loglevel} vmalloc=384M partitions=${partitions} mac_addr=${mac} wifi_mac=${wifi_mac} bt_mac=${bt_mac} specialstr=${specialstr} serialno=${serialno}

        增加定义ram_root变量:ram_root=/dev/ram

        添加boot_recevory命令:

boot_recovery=sunxi_flash read 40007800 recovery

        完整的env.cfg如下图所示:


  六,修改mmc分区表

        本例中使用的分区配置文件实质是tools/pack/common/partition/sys_partition_linux.fex。增加recevory分区,分区大小可设定为32768*512字节,如下图所示:

 

      

七,修改打包脚本

        修改打包脚本就是为了增加对recevory系统的打包过程。在tools/pack/pack 打包文件中的do_pack_linux函数中直接添加recevory.fex文件引用。如下图所示
    

八,修改u-boot启动选择

        在文件u-boot-2011.09/board/sunxi/board_common.c中定义全局变量g_nRecoveryMode,在函数check_physical_key_early中如果gpio_value的值为0,置位g_nRecoveryMode,此处修改如下图所示;


     在common/main.c文件中,原来是直接根据bootcmd来启动的,现在增加判断,如果g_nRecoveryMode置位,则根据recoverycmd来启动,修改如下图所示:


至此修改完成,重新编译打包烧录,默认进入正常的系统,按下gpio PD1时进入recovery系统,我们这里选择的是按键的gpio是在系统配置文件里面默认配置好了的。


进入rececory系统,即可升级boot分区和rootfs分区,

升级内核和文件系统的命令如下:dd if=/mnt/usb/h3_boot.img of=/dev/mmcblk0p6

  dd if=/mnt/usb/h3_rootfs of=/dev/mmcblk0p7  

至此,实现了类似于安卓的recevory功能。

展开阅读全文

没有更多推荐了,返回首页