按键从本地备份升级实现android

首先需要在安卓平台增加一个分区,用于存放平台备份zip包

amlogic平台在dts里增加分区:gxl_p212_1g.dts gxl_p212_2g.dts:

partitions: partitions{
        parts = <13>;
        part-0 = <&logo>;
        part-1 = <&recovery>;
        part-2 = <&rsv>;
        part-3 = <&tee>;
        part-4 = <&crypt>;
        part-5 = <&misc>;
        part-6 = <&instaboot>;
        part-7 = <&boot>;
        part-8 = <&system>;
        part-9 = <&cache>;
        part-10 = <&upgrade>;
        part-11 = <&upgradebackup>;
        part-12 = <&data>;
        cache:cache
        {
            pname = "cache";
            size = <0x0 0x20000000>;
            mask = <2>;
        };
        upgrade:upgrade
        {
            pname = "upgrade";
            size = <0x0 0x30000000>;
            mask = <2>;
        };
        upgradebackup:upgradebackup
        {
            pname = "upgradebackup";
            size = <0x0 0x25000000>;
            mask = <2>;
        };

在init.amlogic.rc里增加第一次启动配置:确保文件存在且为ext4文件类型,否则挂载不成功

on aml-firstboot-init
    #format data and cache patrition if not exist
    wait /dev/block/data 20
    confirm_formated ext4 /dev/block/data /data
    wait /dev/block/cache 20
    confirm_formated ext4 /dev/block/cache /cache
    wait /dev/block/upgradebackup 20
    confirm_formated ext4 /dev/block/upgradebackup /upgradebackup
    wait /dev/block/upgrade 20
    confirm_formated ext4 /dev/block/upgrade /upgrade

service system_control /system/bin/systemcontrol
    class core
    user root
    group system

在init.rc里创建目录用于挂载

    mkdir /sdcard
    mkdir /system
    mkdir /data
    mkdir /cache
    mkdir /sideload
    mkdir /upgrade
    mkdir /upgradebackup
    mount tmpfs tmpfs /tmp

    chown root shell /tmp

    mkdir /system
    mkdir /data 0771 system system
    mkdir /cache 0770 system cache
    mkdir /config 0500 root root
    mkdir /upgrade 0777 system system
    mkdir /upgradebackup 0777 system system

fstab.amlogic在以下地方加载mount

./amlogic/common/products/mbox/init.amlogic.rc:351:    mount_all /fstab.amlogic

fstab.amlogic中配置:

# Android fstab file.
#<src>                                                  <mnt_point>         <type>    <mnt_flags and options>                       <fs_mgr_flags>
# The filesystem that contains the filesystem checker binary (typically /system) cannot
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK

/dev/block/system     /system             ext4      ro                                                    wait
/dev/block/data       /data               ext4      noatime,nosuid,nodev,nodelalloc,nomblk_io_submit,errors=panic    wait,check,encryptable=/dev/block/misc
/dev/block/cache      /cache              ext4      noatime,nosuid,nodev,nodelalloc,nomblk_io_submit,errors=panic    wait,check
/devices/*.sd/mmc_host/sd*  auto                vfat      defaults                       voldmanaged=sdcard1:auto,noemulatedsd
/devices/*dwc3/xhci-hcd.0.auto/usb?/*/host*/target*/block/sd*  auto             vfat      defaults                       voldmanaged=udisk0:auto
/devices/*dwc3/xhci-hcd.0.auto/usb?/*/host*/target*/block/sd*  auto             vfat      defaults                       voldmanaged=udisk1:auto
/devices/*dwc3/xhci-hcd.0.auto/usb?/*/host*/target*/block/sr*  auto             vfat      defaults                       voldmanaged=sr0:auto
/dev/block/loop     auto                loop      defaults                                  voldmanaged=loop:auto
# Add for zram. zramsize can be in numeric (byte) , in percent or auto (detect by the system)
/dev/block/zram0     /swap_zram0             swap      defaults                             wait,zramsize=auto
/dev/block/tee       /tee                 ext4      noatime,nosuid,nodev,nodelalloc,nomblk_io_submit,errors=panic    wait,check
/dev/block/upgrade    /upgrade            ext4      noatime,nosuid,nodev,nodelalloc,nomblk_io_submit,errors=panic    wait,check
/dev/block/upgradebackup    /upgradebackup            ext4      noatime,nosuid,nodev,nodelalloc,nomblk_io_submit,errors=panic    wait,check

recovery.fstab在recovery中执行
./bootable/recovery/roots.cpp:51: fstab = fs_mgr_read_fstab("/etc/recovery.fstab");

recovery.fstab中配置:

/dev/block/system       /system ext4    defaults    defaults
/dev/block/cache        /cache  ext4    defaults    defaults
/dev/block/upgrade         /upgrade   ext4    defaults    defaults
/dev/block/upgradebackup         /upgradebackup   ext4    defaults    defaults
/dev/block/data         /data   ext4    defaults    defaults
/dev/block/mmcblk#p#    /sdcard vfat    defaults    defaults
/dev/block/sd##         /udisk  auto    defaults    defaults

在file_contexts中修改权限

/default\.prop      u:object_r:rootfs:s0
/fstab\..*      u:object_r:rootfs:s0
/init\..*       u:object_r:rootfs:s0
/res(/.*)?      u:object_r:rootfs:s0
/ueventd\..*        u:object_r:rootfs:s0
/upgrade(/.*)?      u:object_r:system_data_file:s0
/upgradebackup(/.*)?        u:object_r:system_data_file:s0

在uboot中按键传参数,这里为环境变量

        "recovery_offset=0\0"\
        "recovery_update_file=0\0"\
        "recovery_update_zip=/upgradebackup/upgradebackup.zip\0"\

这里写图片描述

recovery从/proc/cmdline里获取uboot传上来的环境变量并解析是否按下的变量,然后直接将升级的路径给平台,然后recovery升级
这里写图片描述

升级后成功遇到平台不会自动重启,改动使得升级成功后直接重启,失败后直接在recovery界面,且下次断电重启不会连续进入recovery(不让平台变砖)
这里写图片描述
这里写图片描述
平台还存在不能向低版本升级,修改编译打包升级的脚本:
这里写图片描述
这里写图片描述
使用updater-script里没有ro.build.date这项的对比
这里写图片描述

factory_update_param.aml
–wipe_data
–wipe_cache
–update_package=/udisk/p200-6.0-autobuild-2016-05-26.zip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值