[RK3288][Android7.1][分区]新增可读写分区bkdata

本文介绍了在Android 7.1系统上,针对RK3288平台如何新增一个128M的bkdata分区,用于数据备份和ota升级时的数据保留。内容包括修改partition参数文件、fstab配置、init.*.rc文件设置、处理Selinux权限以及recovery中的处理步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

客户需求:创建可读写分区bkdate,用于数据备份,ota升级、恢复出厂设备bkdata分区数据保留

1.分区表参数文件修改 device/rockchip/rk3288/parameter.txt

新增128M bkdata分区:

 0x00040000@0x006BC000(bkdata),-@0x006FC000(userdata)

FIRMWARE_VER:7.1
MACHINE_MODEL:rk3288
MACHINE_ID:007
MANUFACTURER:RK3288
MAGIC: 0x5041524B
ATAG: 0x60000800
MACHINE: 3288
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
CMDLINE: console=ttyFIQ0 androidboot.baseband=N/A androidboot.selinux=permissive 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),0x0000C000@0x00010000(kernel),0x00010000@0x0001C000(boot),0x00010000@0x0002C000(recovery),0x00038000@0x0003C000(backup),0x00040000@0x00074000(cache),0x00500000@0x000B4000(system),0x00008000@0x005B4000(metadata),0x00080000@0x005BC000(vendor0),0x00080000@0x0063C000(vendor1),0x00040000@0x006BC000(bkdata),-@0x006FC000(userdata)

在内核log信息中可以看到

[    1.025640]     bkdata: 0x0d7800000 -- 0x0df800000 (128 MB)

[    1.025259] mmcblk1rpmb: mmc1:0001 8GTF4R partition 3 512 KiB
[    1.025534]      uboot: 0x000400000 -- 0x000800000 (4 MB)
[    1.025544]      trust: 0x000800000 -- 0x000c00000 (4 MB)
[    1.025551]       misc: 0x000c00000 -- 0x001000000 (4 MB)
[    1.025574]   resource: 0x001000000 -- 0x002000000 (16 MB)
[    1.025581]     kernel: 0x002000000 -- 0x003800000 (24 MB)
[    1.025588]       boot: 0x003800000 -- 0x005800000 (32 MB)
[    1.025594]   recovery: 0x005800000 -- 0x007800000 (32 MB)
[    1.025601]     backup: 0x007800000 -- 0x00e800000 (112 MB)
[    1.025607]      cache: 0x00e800000 -- 0x016800000 (128 MB)
[    1.025614]     system: 0x016800000 -- 0x0b6800000 (2560 MB)
[    1.025620]   metadata: 0x0b6800000 -- 0x0b7800000 (16 MB)
[    1.025627]    vendor0: 0x0b7800000 -- 0x0c7800000 (256 MB)
[    1.025633]    vendor1: 0x0c7800000 -- 0x0d7800000 (256 MB)
[    1.025640]     bkdata: 0x0d7800000 -- 0x0df800000 (128 MB)
[    1.025646]   userdata: 0x0df800000 -- 0x1d1c00000 (3876 MB)
[    1.025674]  mmcblk1: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15

分区定义说明:
1、为了兼容性,目前RK所有AP都是用rk29xxnand做标识。
2、单个分区说明:
例如:0x00002000@0x00008000(boot),@符号之前的数值是分区大小,@符号之后的数值是分区的起始位置,括号里面的字符是分区的名字。所有数值的单位是sector,1个sector为512Bytes.上例中,boot分区起始位置为0x8000 sectors位置,大小为0x2000 sectors(4MB).
3、为了性能,每个分区起始地址需要32KB(64 sectors)对齐,大小也需要32KB的整数倍。
4、如果使用sparse格式的镜像,升级时会擦除数据,为了兼容性更好,对应的分区最好按4MB对齐,大小也按4MB整数倍配置。

2.fstab文件中添加相关配置

2.1 在device/rockchip/rk3288/fstab.rk30board.bootmode.emmc.rk3288w中添加分区文件系统格式的静态信息

/dev/block/platform/ff0f0000.dwmmc/by-name/bkdata         /bkdata             ext4      noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard                wait,check

2.2 在device/rockchip/rk3288/recovery.emmc.fstab中添加分区,recovery中需要格式化分区的时候使用

/dev/block/platform/ff0f0000.dwmmc/by-name/bkdata                /bkdata              ext4             defaults                  defaults

3.init.*.rc文件中添加相关配置

3.1 在device/rockchip/common/recovery/etc/init.rc中创建目录,recovery中使用

mkdir /bkdata

3.2 在device/rockchip/common/init.rockchip.rc中添加挂载方式,修改挂载目录权限

    mkdir /bkdata 0777 system system
    mount ext4 mtd@bkdata /bkdata wait noatime nodiratime nosuid nodev noauto_da_alloc

3.3 在device/rockchip/common/init.rk30board.rc中初始化安全属性

 restorecon_recursive /bkdata

4.若开启了Selinux,需要添加selinux权限

在device/rockchip/common/sepolicy/file_contexts中添加

/bkdata(/.*)?      u:object_r:metadata_file:s0

5.recovery对新增分bkdata分区的处理

在bootable/recovery/recovery.cpp中添加SureBkdataMount(),recovery时会去挂载/bkdata目录,若是挂载不上,则格式化这个分区。

参考SureMetadataMount()添加方法SureBkdataMount()

void SureBkdataMount() {
    if (ensure_path_mounted("/bkdata")) {
        printf("mount bkdata fail,so formate...\n");
        tmplog_offset = 0;
        format_volume("/bkdata");
        ensure_path_mounted("/bkdata");
    }
}

SureBkdataMount();添加到 SureMetadataMount(); 后边

 void SureCacheMount() {
     if(ensure_path_mounted("/cache")) {
         printf("mount cache fail,so formate...\n");
@@ -1805,6 +1816,9 @@ int main(int argc, char **argv) {
 
     SureCacheMount();
     SureMetadataMount();
+    // start add /bkdata by lpz 20210731
+    SureBkdataMount();
+    // end add /bkdata by lpz 20210731
 
     //dump ro.bootmode type
     char bootmode[256];

6.完整补丁

diff --git a/bootable/recovery/recovery.cpp b/bootable/recovery/recovery.cpp
index 1981544..52fd3f0 100755
--- a/bootable/recovery/recovery.cpp
+++ b/bootable/recovery/recovery.cpp
@@ -1468,6 +1468,17 @@ void SureMetadataMount() {
     }
 }
 
+// start add /bkdata by lpz 20210731
+void SureBkdataMount() {
+    if (ensure_path_mounted("/bkdata")) {
+        printf("mount bkdata fail,so formate...\n");
+        tmplog_offset = 0;
+        format_volume("/bkdata");
+        ensure_path_mounted("/bkdata");
+    }
+}
+// end add /bkdata by lpz 20210731
+
 void SureCacheMount() {
     if(ensure_path_mounted("/cache")) {
         printf("mount cache fail,so formate...\n");
@@ -1805,6 +1816,9 @@ int main(int argc, char **argv) {
 
     SureCacheMount();
     SureMetadataMount();
+    // start add /bkdata by lpz 20210731
+    SureBkdataMount();
+    // end add /bkdata by lpz 20210731
 
     //dump ro.bootmode type
     char bootmode[256];
diff --git a/device/rockchip/common/init.rk30board.rc b/device/rockchip/common/init.rk30board.rc
index 179f7b7..44cbfca 100755
--- a/device/rockchip/common/init.rk30board.rc
+++ b/device/rockchip/common/init.rk30board.rc
@@ -64,6 +64,9 @@ on init
 
 on boot
 
+    # start add /bkdata by lpz 20210731
+    restorecon_recursive /bkdata
+    # end add /bkdata by lpz 20210731
     restorecon_recursive /sys/devices/system/cpu/cpufreq/interactive
     chown system system /sys/devices/system/cpu/cpufreq/interactive/timer_rate
     chmod 0660 /sys/devices/system/cpu/cpufreq/interactive/timer_rate
diff --git a/device/rockchip/common/init.rockchip.rc b/device/rockchip/common/init.rockchip.rc
index 4b3e0fe..ab93473 100755
--- a/device/rockchip/common/init.rockchip.rc
+++ b/device/rockchip/common/init.rockchip.rc
@@ -44,6 +44,11 @@ on post-fs-data
     # For a remount only the flags and the target mount point are relevant.
     mount dummy dummy /data remount nosuid nodev noatime rw seclabel,background_gc=on,user_xattr,acl,errors=panic
 
+    # start add /bkdata by lpz 20210731
+    mkdir /bkdata 0777 system system
+    mount ext4 mtd@bkdata /bkdata wait noatime nodiratime nosuid nodev noauto_da_alloc
+    # end add /bkdata by lpz 20210731
+
     # we will remap this as /mnt/sdcard with the sdcard fuse tool
     mkdir /data/media 0770 media_rw media_rw
     chown media_rw media_rw /data/media
diff --git a/device/rockchip/common/recovery/etc/init.rc b/device/rockchip/common/recovery/etc/init.rc
old mode 100644
new mode 100755
index 2ed0ea6..93f52e5
--- a/device/rockchip/common/recovery/etc/init.rc
+++ b/device/rockchip/common/recovery/etc/init.rc
@@ -28,6 +28,9 @@ on init
     mkdir /mnt/usb_storage
     mkdir /system
     mkdir /metadata
+    # start add /bkdata by lpz 20210731
+    mkdir /bkdata
+    # end add /bkdata by lpz 20210731
     mkdir /radical_update
     mkdir /data
     mkdir /cache
diff --git a/device/rockchip/common/sepolicy/file_contexts b/device/rockchip/common/sepolicy/file_contexts
index fc98a5a..13882ec 100755
--- a/device/rockchip/common/sepolicy/file_contexts
+++ b/device/rockchip/common/sepolicy/file_contexts
@@ -25,6 +25,9 @@
 /data/misc/akmd(/.*)?     u:object_r:akmd_file:s0
 
 /metadata(/.*)?      u:object_r:metadata_file:s0
+# start add /bkdata by lpz 20210731
+/bkdata(/.*)?      u:object_r:metadata_file:s0
+# end add /bkdata by lpz 20210731
 /dev/mma8452_daemon  u:object_r:sensor_device:s0
 /data/camera(/.*)?   u:object_r:camdata_file:s0
 
@@ -93,6 +96,7 @@
 /dev/block/platform/ff0f0000.dwmmc/by-name/userdata u:object_r:userdata_block_device:s0
 /dev/block/platform/ff0f0000.dwmmc/by-name/boot u:object_r:boot_block_device:s0
 /dev/block/platform/ff0f0000.dwmmc/by-name/recovery u:object_r:recovery_block_device:s0
+/dev/block/platform/ff0f0000.dwmmc/by-name/bkdate u:object_r:e2fsck_bkdata_block_device:s0
 
 #for 312x emmc device
 /dev/block/platform/1021c000.rksdmmc/by-name/frp u:object_r:frp_block_device:s0
diff --git a/device/rockchip/rk3288/fstab.rk30board.bootmode.emmc.rk3288w b/device/rockchip/rk3288/fstab.rk30board.bootmode.emmc.rk3288w
index 26280fb..0419ec7 100755
--- a/device/rockchip/rk3288/fstab.rk30board.bootmode.emmc.rk3288w
+++ b/device/rockchip/rk3288/fstab.rk30board.bootmode.emmc.rk3288w
@@ -9,6 +9,9 @@
 /dev/block/platform/ff0f0000.dwmmc/by-name/vendor1          /vendor              ext4      ro,noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard                wait
 /dev/block/platform/ff0f0000.dwmmc/by-name/cache          /cache              ext4      noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard                wait,check
 /dev/block/platform/ff0f0000.dwmmc/by-name/metadata       /metadata           ext4      noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard                wait,check
+# start add /bkdata by lpz 20210731
+/dev/block/platform/ff0f0000.dwmmc/by-name/bkdata         /bkdata             ext4      noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard                wait,check
+# end add /bkdata by lpz 20210731
 /dev/block/platform/ff0f0000.dwmmc/by-name/userdata       /data               f2fs      noatime,nodiratime,nosuid,nodev,discard,inline_xattr                   wait,check,notrim,encryptable=/metadata/key_file
 #/dev/block/platform/ff0f0000.dwmmc/by-name/userdata       /data               ext4      noatime,nodiratime,nosuid,nodev,barrier=1,noauto_da_alloc,data=ordered  wait,check,formattable,encryptable=/metadata/key_file,quota
 /dev/block/platform/ff0f0000.dwmmc/by-name/userdata       /data               ext4      noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard,errors=panic   wait,check,encryptable=/metadata/key_file
diff --git a/device/rockchip/rk3288/parameter_system_2.5G.txt b/device/rockchip/rk3288/parameter_system_2.5G.txt
index 6bdaa5d..a24c6a2 100755
--- a/device/rockchip/rk3288/parameter_system_2.5G.txt
+++ b/device/rockchip/rk3288/parameter_system_2.5G.txt
@@ -7,4 +7,4 @@ ATAG: 0x60000800
 MACHINE: 3288
 CHECK_MASK: 0x80
 PWR_HLD: 0,0,A,0,1
-CMDLINE: console=ttyFIQ0 androidboot.baseband=N/A androidboot.selinux=permissive 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),0x0000C000@0x00010000(kernel),0x00010000@0x0001C000(boot),0x00010000@0x0002C000(recovery),0x00038000@0x0003C000(backup),0x00040000@0x00074000(cache),0x00500000@0x000B4000(system),0x00008000@0x005B4000(metadata),0x00080000@0x005BC000(vendor0),0x00080000@0x0063C000(vendor1),-@0x006BC000(userdata)
+CMDLINE: console=ttyFIQ0 androidboot.baseband=N/A androidboot.selinux=permissive 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),0x0000C000@0x00010000(kernel),0x00010000@0x0001C000(boot),0x00010000@0x0002C000(recovery),0x00038000@0x0003C000(backup),0x00040000@0x00074000(cache),0x00500000@0x000B4000(system),0x00008000@0x005B4000(metadata),0x00080000@0x005BC000(vendor0),0x00080000@0x0063C000(vendor1),0x00040000@0x006BC000(bkdata),-@0x006FC000(userdata)
diff --git a/device/rockchip/rk3288/recovery.emmc.fstab b/device/rockchip/rk3288/recovery.emmc.fstab
index a8df7f7..b85e392 100755
--- a/device/rockchip/rk3288/recovery.emmc.fstab
+++ b/device/rockchip/rk3288/recovery.emmc.fstab
@@ -5,6 +5,9 @@
 /dev/block/platform/ff0f0000.dwmmc/by-name/system                /system              ext4             defaults                  defaults
 /dev/block/platform/ff0f0000.dwmmc/by-name/cache                 /cache               ext4             defaults                  defaults
 /dev/block/platform/ff0f0000.dwmmc/by-name/metadata              /metadata            ext4             defaults                  defaults
+# start add /bkdata by lpz 20210731
+/dev/block/platform/ff0f0000.dwmmc/by-name/bkdata                /bkdata              ext4             defaults                  defaults
+# end add /bkdata by lpz 20210731
 /dev/block/platform/ff0f0000.dwmmc/by-name/userdata              /data                ext4             defaults                  defaults
 /dev/block/platform/ff0f0000.dwmmc/by-name/cust                  /cust                ext4             defaults                  defaults
 /dev/block/platform/ff0f0000.dwmmc/by-name/custom                /custom              ext4             defaults                  defaults

参考:Android新建系统分区

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值