两步:
1.在即将擦出data区域数据前把data的需要的数据保存到temp区
2.在完成recovery后再把数据从temp区域保存到data区,注意修改文件的权限
相关代码:
在bootable/recovery/recovery.cpp
static const char *BACKUP_FILE_PATH = "/data/xxxx";
static const char *TEMP_BACKUP_PATH = "/tmp/xxxx";
#if 1
void copy_file(const char *src,const char *dstFilePath)
{
void* buffer = malloc(BUFSIZ);
if (buffer == NULL) {
LOGE("alloc buffer error %d \n", BUFSIZ);
return;
}
size_t read;
FILE* fin = fopen_path(src, "rb");
if (fin == NULL) {
LOGE("fopen error %s \n", src);
return;
}
FILE* fout = fopen_path(dstFilePath, "wb");
if (fout == NULL) {
LOGE("fopen error %s \n", dstFilePath);
/* close opened file */
return;
}
while ((read = fread(buffer, 1, BUFSIZ, fin)) > 0) {
if (fwrite(buffer, 1, read, fout) != read) {
LOGE("fwrite error \n");
/* close opened file */
fclose(fin);
fclose(fout);
return;
}
}
free(buffer);
if (fclose(fout) != 0) {
LOGE("fclose error out \n");
/* close opened file */
fclose(fin);
return;
}
if (fclose(fin) != 0) {
LOGE("fclose error in \n");
return;
}
}
#endif
if (show_text) ui->ShowText(true);
后加入
copy_file(BACKUP_FILE_PATH,TEMP_BACKUP_PATH);
在 android_reboot(ANDROID_RB_RESTART, 0, 0);前面加入
copy_file(TEMP_BACKUP_PATH,BACKUP_FILE_PATH);
chmod chown合适的权限。
以上是备份和恢复操作
如果需要T卡内置视频恢复方法需要涉及到其他文件的修改,思路可以从这上面衍生出来。