前言
平台:RK3368
系统:android8.1
上为了保留一些文件在系统升级和烧录后不被擦除,因此新建了个不被擦除的分区,在此记录下方法。
一、修改分区表
分区表文件路径:device\rockchip\rk3368\parameter.txt,其中mypartition是我建立的分区,格式为“大小@地址(分区名)”, -@0x006F4400(userdata)这个意思是从这个地址开始之后的大小都分给userdata。
FIRMWARE_VER:7.1
MACHINE_MODEL:RK3368
MACHINE_ID:007
MANUFACTURER: RK3368
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 3368
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
CMDLINE: console=ttyFIQ0 androidboot.baseband=N/A androidboot.selinux=permissive androidboot.veritymode=enforcing androidboot.hardware=rk30board androidboot.console=ttyFIQ0 init=/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(trust),0x00002000@0x00006000(misc),0x00008000@0x00008000(resource),0x00010000@0x00010000(kernel),0x00010000@0x00020000(boot),0x00020000@0x00030000(recovery),0x00038000@0x00050000(backup),0x00002000@0x00088000(security),0x00100000@0x0008a000(cache),0x00400000@0x0018a000(system),0x00008000@0x0058a000(metadata),0x00100000@0x00592000(vendor),0x00020000@0x00694000(oem),0x00040000@0x006B4000(mypartition),0x00000400@0x006F4000(frp),-@0x006F4400(userdata)
二、文件配置
在device/rockchip/rk3368/fstab.rk30board中填写要添加分区文件系统的静态信息
/dev/block/by-name/mypartition /mypartition ext4 noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard wait
在device/rockchip/rk3368/recovery.fstab中添加,recovery的时候会用到这个
/dev/block/platform/ff0f0000.dwmmc/by-name/mypartition /mypartition ext4 defaults defaults
在device/rockchip/common/recovery/etc/init.rc中添加,也是recovery过程中用到的
mkdir /mypartition
在device/rockchip/common/init.rockchip.rc中添加挂载的方式
mkdir /mypartition 0777 system system
mount ext4 mtd@mypartition /mypartition wait noatime nodiratime nosuid nodev noauto_da_alloc
在device/rockchip/common/sepolicy/file_contexts中添加seAndroid的安全属性
/mypartition(/.*)? u:object_r:sdcardfs:s0
在device/rockchip/common/init.rk30board.rc中初始化安全属性
restorecon_recursive /mypartition
三、自定义recovery时对mypartition分区的操作
在bootable/recovery/recovery.cpp中添加以下代码,recovery时会去挂载/mypartition目录,若是挂载不上,则格式化这个分区,格式为recovery.fstab里描述的分区信息,什么时候会挂载不上,就是在擦除emmc后分区所在的区域为空,没有文件格式的情况下,因为我在烧录的img里并没放入自己做的mypartition.img,若是想在这分区放入自己做的内容的话,就能挂载上,并且不会执行擦除的代码。
void SuremypartitionMount() {
if (ensure_path_mounted("/mypartition")) {
printf("mount mypartition fail,so formate...\n");
tmplog_offset = 0;
format_volume("/mypartition");
ensure_path_mounted("/mypartition");
}
}
static int is_boot_from_sd(){
......
SureMetadataMount();
SuremypartitionMount();
......
}