首先需要在安卓平台增加一个分区,用于存放平台备份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