吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 764|回复: 2
收起左侧

[资源求助] CSDN中的VIP文章下载

[复制链接]
longzhiye 发表于 2023-9-11 13:51
25吾爱币
地址为:https://blog.csdn.net/jydzm/article/details/132323283

最佳答案

查看完整内容

Android 13 添加自定义分区,恢复出厂设置不被清除 [md]**需求:** 客户有些文件或数据,需要做得[恢复出厂设置](https://so.csdn.net/so/search?q=%E6%81%A2%E5%A4%8D%E5%87%BA%E5%8E%82%E8%AE%BE%E7%BD%AE&spm=1001.2101.3001.7020)还存在,故需新增一个分区存储客户数据。 **要求:** a\) 分区大小为50M b\) 应用层可读可写 c\) 恢复出厂设置后不会被清除 d\) 不需要打包.img e\) 不影响[OTA升级](https:/ ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xxmdmst 发表于 2023-9-11 13:51
Android 13 添加自定义分区,恢复出厂设置不被清除

需求: 客户有些文件或数据,需要做得恢复出厂设置还存在,故需新增一个分区存储客户数据。

要求:
a) 分区大小为50M
b) 应用层可读可写
c) 恢复出厂设置后不会被清除
d) 不需要打包.img
e) 不影响OTA升级

缺点:
1).通过代码在分区创建目录和文件,会涉及到SeLinux权限的修改 【影响GMS验证】
2).在现有软件版本上,需要格式化下载

环境: MTK Android 13 支持AB分区升级

**

新增分区修改如下:

**

1.新增testdata分区

路径:vendor/mediatek/proprietary/tools/ptgen/MT8188/partition_table_emmc_ab.csv


 vendor_b,EXT4,524288,,EMMC_USER,UFS_LU2,main,N,N,NONE,Y,N,Y,,Y,,AUTO,,
 system_b,EXT4,3145728,,EMMC_USER,UFS_LU2,main,N,Y,system_other.img,Y,N,Y,,Y,,AUTO,,
 super,Raw data,3670016,,EMMC_USER,UFS_LU2,,N,Y,super.img,Y,N,Y,,Y,,AUTO,,"ne(DYNAMIC_PARTITION_SUPPORT,yes) or eq(PRODUCT_RETROFIT_DYNAMIC_PARTITIONS,yes)"
+testdata,EXT4,51200,,EMMC_USER,UFS_LU2,,N,N,NONE,N,N,N,,N,,AUTO,,
 userdata,EXT4,3145728,,EMMC_USER,UFS_LU2,,N,Y,userdata.img,N,N,Y,,Y,,NEEDRESIZE,,
 mrdump,Raw data,16384,,EMMC_USER,UFS_LU2,,Y,N,NONE,N,N,N,,N,,RESERVED,,"eq(TARGET_BUILD_VARIANT,user)"

2.在根目录下创建 /testdata 目录

路径:system/core/rootdir/Android.mk

  # create some directories (some are mount points) and symlinks
 LOCAL_POST_INSTALL_CMD := mkdir -p $(addprefix $(TARGET_ROOT_OUT)/, \
-    dev proc sys system data data_mirror odm oem acct config storage mnt apex debug_ramdisk \
+    dev proc sys system data data_mirror odm oem acct config storage mnt apex debug_ramdisk testdata \
     linkerconfig second_stage_resources postinstall $(BOARD_ROOT_EXTRA_FOLDERS)); \
     ln -sf /system/bin $(TARGET_ROOT_OUT)/bin; \
     ln -sf /system/etc $(TARGET_ROOT_OUT)/etc; \

3.在fstab中配置testdata分区的挂载规则

3.1路径:vendor/mediatek/proprietary/hardware/fstab/mt8188/fstab.in

@@ -171,6 +171,7 @@ DEVPATH(protect1)   /mnt/vendor/protect_f   ext4   FS_FLAG_COMMIT   FSMGR_FLAG_F
 DEVPATH(protect2)   /mnt/vendor/protect_s   ext4   FS_FLAG_COMMIT   FSMGR_FLAG_FMT
 DEVPATH(nvdata)     /mnt/vendor/nvdata      ext4   FS_FLAG_COMMIT   FSMGR_FLAG_FMT
 DEVPATH(nvcfg)      /mnt/vendor/nvcfg       ext4   FS_FLAG_COMMIT   FSMGR_FLAG_FMT
+DEVPATH(testdata)    /testdata          ext4   rw                                FSMGR_FLAG_FMT

 #ifdef __PERSIST_PARTITION_SUPPORT
 DEVPATH(persist)    /mnt/vendor/persist     ext4   FS_FLAG_COMMIT  FSMGR_FLAG_FMT

3.2路径:vendor/mediatek/proprietary/hardware/fstab/mt8188/fstab.in.emmc

 @@ -171,6 +171,7 @@ DEVPATH(protect1)   /mnt/vendor/protect_f   ext4   FS_FLAG_COMMIT   FSMGR_FLAG_F
 DEVPATH(protect2)   /mnt/vendor/protect_s   ext4   FS_FLAG_COMMIT   FSMGR_FLAG_FMT
 DEVPATH(nvdata)     /mnt/vendor/nvdata      ext4   FS_FLAG_COMMIT   FSMGR_FLAG_FMT
 DEVPATH(nvcfg)      /mnt/vendor/nvcfg       ext4   FS_FLAG_COMMIT   FSMGR_FLAG_FMT
+DEVPATH(testdata)    /testdata          ext4   rw                             wait,check,formattable

 #ifdef __PERSIST_PARTITION_SUPPORT
 DEVPATH(persist)    /mnt/vendor/persist     ext4   FS_FLAG_COMMIT  FSMGR_FLAG_FMT

4.改变/testdata目录的权限

路径:device/mediatek/mt8188/init.mt8188.rc

@@ -332,6 +332,10 @@ on post-fs-data
     chmod 0775 /vendor/xbin/MPED
     chmod 0666 /dev/gps_emi

+# For testdata partition
+    chown system system /testdata
+    chmod 0777 /testdata
+
 # -----------------------
 # Add by MTK
     # SCP log

5.改变testdata分区的标签,否则会format动作会因为selinux权限问题而失败

路径:device/mediatek/sepolicy/base/vendor/file_contexts

@@ -591,6 +591,7 @@
 /dev/block/platform/mtk-\b(msdc|ufs)\b\.0/[0-9]+\.\b(msdc0|ufs0)\b/by-name/secro                            u:object_r:secro_block_device:s0
 /dev/block/platform/mtk-\b(msdc|ufs)\b\.0/[0-9]+\.\b(msdc0|ufs0)\b/by-name/system                           u:object_r:system_block_device:s0
 /dev/block/platform/mtk-\b(msdc|ufs)\b\.0/[0-9]+\.\b(msdc0|ufs0)\b/by-name/userdata                         u:object_r:userdata_block_device:s0
+/dev/block/platform/mtk-\b(msdc|ufs)\b\.0/[0-9]+\.\b(msdc0|ufs0)\b/by-name/testdata                          u:object_r:metadata_block_device:s0
 /dev/block/platform/mtk-\b(msdc|ufs)\b\.0/[0-9]+\.\b(msdc0|ufs0)\b/by-name/cache                            u:object_r:cache_block_device:s0
 /dev/block/platform/mtk-\b(msdc|ufs)\b\.0/[0-9]+\.\b(msdc0|ufs0)\b/by-name/recovery                         u:object_r:recovery_block_device:s0
 /dev/block/platform/mtk-\b(msdc|ufs)\b\.0/[0-9]+\.\b(msdc0|ufs0)\b/by-name/protect1                         u:object_r:protect1_block_device:s0
@@ -682,6 +683,7 @@
 /dev/block/by-name/system(_[ab])?                   u:object_r:system_block_device:s0
 /dev/block/by-name/tee([12]|_[ab])                  u:object_r:tee_block_device:s0
 /dev/block/by-name/userdata                         u:object_r:userdata_block_device:s0
+/dev/block/by-name/testdata                          u:object_r:metadata_block_device:s0
 /dev/block/by-name/vbmeta(_system|_vendor)?(_[ab])? u:object_r:vbmeta_block_device:s0
 /dev/block/by-name/vcp(_[ab])?                      u:object_r:vcp_device:s0
 /dev/block/by-name/vendor(_[ab])?                   u:object_r:vendor_block_device:s0

6.修改/testdata目录的标签,否则会moun动作会因为selinux权限问题而失败

路径:system/sepolicy/private/file_contexts

@@ -2,6 +2,9 @@
 # Root
 /                   u:object_r:rootfs:s0

+# For testdata
+/testdata         u:object_r:metadata_file:s0
+
 # Data files
 /adb_keys           u:object_r:adb_keys_file:s0
 /build\.prop        u:object_r:rootfs:s0

7.添加对testdata分区读写操作权限

路径:device/mediatek/sepolicy/base/vendor/system_app.te
注:关于SeLinux权限的添加,请根据实际报错的avc添加对应的权限。

+allow system_app unlabeled:dir rw_dir_perms;
+allow system_app unlabeled:file { rw_file_perms };

验证添加的分区是否可以mount可以使用如下指令:
adb shell  

mount | grep testdata

验证新增分区问题,目前做了如下实验:

1.添加新分区后,通过adb 在分区中分别创建目录和文件,然后恢复出厂设置,分区中新创建的目录和文件还存在。

2.添加新分区后,通过adb 在分区中分别创建目录和文件,然后固件升级,分区中新创建的目录和文件不存在。

3.添加新分区后,通过adb 在分区中分别创建目录和文件,然后OTA差分包升级,可以升级成功,且分区中新创建的目录和文件还存在。

CheengRui79 发表于 2023-9-11 15:42
返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-5-23 19:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表