MTK平台android recovery模式不删除FAT分区

本文介绍如何在MTK平台的Android设备上,在Recovery模式中改变默认的数据分区格式化行为,实现仅删除data分区内的文件而不格式化整个分区,并保留FAT分区的方法。

原理:在android系统的recovery模式下,系统将进入data分区的格式化,而不是mount data分区后进入文件的删除,所以我们需要将系统进入recovery模式下格式化data分区修改成mount data分区,然后进入文件以及目录的删除。而MTK平台正常情况下MTK_SHARED_SDCARD = yes 这种模式下,系统编译后运行时FAT和data分区时合并在一起共享的,所以FAT的物理空间在data分区的范围内。在格式化data分区时会一并将FAT分区给格式化掉。所以需要进行mount后目录的删除。
方法如下:
1、项目全局配置:
device\autochips\ac8257_demo\ProjectConfig.mk
AUTO_ADD_GLOBAL_DEFINE_BY_NAME = xxx xxxx ATC_RECOVERY_NOERASE_DATA
ATC_RECOVERY_NOERASE_DATA = yes
2、selinux的修改
主要是在recovery系统进入重启的时候修改在recovery模式将selinux关闭,否则在recovery模式下mount data分区时将会失败。导致后面进入data分区删除不了文件目录。
2.1) 第一种修改方法
修改:vendor\mediatek\proprietary\bootable\bootloader\lk\target\ac8257_demo\rules.mk文件:

ifeq ($(ATC_RECOVERY_NOERASE_DATA),yes)
DEFINES += ATC_RECOVERY_NOERASE_DATA
endif

vendor\mediatek\proprietary\bootable\bootloader\lk\project\ac8257_demo.mk 文件中添加
ATC_RECOVERY_NOERASE_DATA = yes

修改vendor\mediatek\proprietary\bootable\bootloader\lk\app\mt_boot\mt_boot.c文件,如下:

int boot_linux_from_storage(void)
{
   
   
	int ret = 0;
	uint32_t kernel_target_addr = 0;
	uint32_t ramdisk_target_addr = 0;
	uint32_t tags_target_addr = 0;
	uint32_t ramdisk_addr = 0;
	uint32_t ramdisk_real_sz = 0;
	........................................
	#ifdef SELINUX_STATUS
#if SELINUX_STATUS == 1
	cmdline_append("androidboot.selinux=disabled");
#elif SELINUX_STATUS == 2
	cmdline_append("androidboot.selinux=permissive");
#endif
#endif
+#if defined(ATC_AOSP_ENHANCEMENT) && defined(ATC_RECOVERY_NOERASE_DATA)
+	if(RECOVERY_BOOT == g_boot_mode) {
   
   
+		cmdline_append("androidboot.selinux=permissive");
+}
.................................
}

2.2 修改/system/core/init.cpp中selinux的权限
方法如下:
bootable/recovery/recovery.cpp

--- a/bootable/recovery/recovery.cpp
+++ b/bootable/recovery/recovery.cpp
@@ -1085,7 +1085,7 @@ int
 main(int argc, char **argv) {
   
   
     time_t start = time(NULL);
 
-    redirect_stdio(TEMPORARY_LOG_FILE);
+    redirect_stdio(LOG_TO_USART<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值