项目里需要调试recover,网上查了部分资料,增加了打印及复制的接口,写下来以后便于查阅
bootable/recovery/recovery.cpp
//添加打印函数打印到串口 #define USE_UART_DEBUG #ifdef USE_UART_DEBUG #define DEBUG_UART_PORT "/dev/console" #endif static int landsem_dbg_log(const char *fmt, ...) { int ret; va_list ap; va_start(ap, fmt); #ifdef USE_UART_DEBUG FILE *tty_out = fopen(DEBUG_UART_PORT, "w+"); if(NULL != tty_out) { ret = vfprintf(tty_out, fmt, ap); fclose(tty_out); tty_out = NULL; } else { ret = vfprintf(stdout, fmt, ap); } #else ret = vfprintf(stdout, fmt, ap); #endif va_end(ap); return ret; } ////////////////////////////////添加复制目录相关的函数 static void change_path(const char *path) { landsem_dbg_log("==>hold:Leave %s Successed . . .\n", getcwd(NULL, 0)); if (chdir(path) == -1) { landsem_dbg_log("==>hold: chdir path==-1 %s \n", path); return; } landsem_dbg_log("==>hold:Entry %s Successed . . .\n", getcwd(NULL, 0)); } static char *get_rel_path(const char *dir, const char *name) { char *rel_path; unsigned long name_len, dir_len; landsem_dbg_log("==>hold:get_rel_path %s %s\n", dir,name); name_len = strlen(name); dir_len = strlen(dir); rel_path = malloc(name_len+dir_len+2); if(rel_path == NULL){ landsem_dbg_log("==>hold:malloc error\n"); } bzero(rel_path,name_len+dir_len+2); strncpy(rel_path,dir,dir_len); if(rel_path[dir_len-1] != '/'){ strncat(rel_path, "/", sizeof(char)); } strncat(rel_path, name, name_len); landsem_dbg_log("==>hold:get_rel_path ret: %s\n",rel_path); return rel_path; } static void _copy_file(const char *old_path, const char *new_path) { landsem_dbg_log("==>hold:will copy file %s to %s \n", old_path,new_path); FILE *in, *out; size_t len; char buf[64]; // char *p = getcwd(NULL, 0); if ((in = fopen(old_path, "rb")) == NULL) { landsem_dbg_log("==>hold: fopen old_path %s error\n", old_path); return; } // change_path(new_path); if ((out = fopen(new_path, "wb")) == NULL) { landsem_dbg_log("==>hold:fopen new_path %s error\n", new_path); return; } while (!feof(in)) { bzero(buf, sizeof(buf)); len = fread(&buf, 1, sizeof(buf) - 1, in); fwrite(&buf, len, 1, out); } fclose(in); fclose(out); // change_path(p); } static void copy_dir(const char *oldDir, const char *newDir) { DIR *dir; struct stat buf; struct dirent *dirp; char *p = getcwd(NULL, 0); landsem_dbg_log("==>hold:copy dir %s to %s\n", oldDir,newDir); if ((dir = opendir(oldDir)) == NULL) { landsem_dbg_log("==>hold:dir=opendir oldDir %s error\n", oldDir); return; } //700为 /data/hold的权限,这里改得和它一样 if (access(newDir, F_OK) == -1) { umask(0); if (mkdir(newDir, 0700) == -1) { landsem_dbg_log("==>hold:mkdir newDir %s error\n", newDir); return; } } //linux下面执行stat需要先切换到当前目录 change_path(oldDir); while ((dirp = readdir(dir))) { landsem_dbg_log("==>hold:will copy %s \n", dirp->d_name); if (strcmp(dirp->d_name, ".") == 0 || strcmp(dirp->d_name, "..") == 0) continue; //取得文件状态 if (stat(dirp->d_name, &buf) == -1) { landsem_dbg_log("==>hold:stat dirp->d_name %s error:%d\n", dirp->d_name,errno); return; } //如果是文件夹 if (S_ISDIR(buf.st_mode)) { copy_dir(dirp->d_name, newDir); continue; } char * from = get_rel_path(oldDir, dirp->d_name); char * to = get_rel_path(newDir, dirp->d_name); _copy_file(from,to); free(from); free(to); } closedir(dir); change_path(p); } //////////////////////////////////////////////////////////
相关推荐
Android Recovery 代码分析 ...Android Recovery代码分析了Recovery应用程序的入口点、获取命令行参数、获取默认升级固件路径和名称、解析命令、注册升级命令、升级、格式化、还原和wipe data等方面的内容。
在安装好 EasyRecovery 数据恢复工具后,用户需要将手机数据线连接到电脑上,然后在手机上选择"USB 大容量存储",这样电脑就会识别到手机 SD 卡。 三、启动 EasyRecovery 并选择恢复方式 启动 EasyRecovery 数据...
PDF解密工具 打印复制等功能加密禁止的解除 中文破解版Advanced PDF Password Recovery Pro
3. 快速启动(Quick Boot)库:有些开发人员使用C或C++编写快速启动库,使得应用程序能够模拟按键组合,从而在代码级别触发进入Recovery模式。但这通常需要root权限,并且对用户安全性和隐私有一定风险。 四、...
源码可以在GitHub等开源平台找到,例如AOSP(Android Open Source Project)项目中包含了Recovery的相关代码。 7. 工具介绍: Odin是针对三星设备的刷机工具,支持刷入Recovery、固件等。Fastboot是Android设备的...
将Recovery程序复制到SD卡中,并通过USB线将手机与电脑连接,但避免在连接状态下将SD卡挂载到电脑。在电脑上,按下Shift键并右键点击adb程序文件夹,选择“在此处打开命令窗口”。输入`adb shell`进入shell模式,...
密码恢复PasswordRecovery和smtp发送邮件密码恢复PasswordRecovery和smtp发送邮件密码恢复PasswordRecovery和smtp发送邮件密码恢复PasswordRecovery和smtp发送邮件密码恢复PasswordRecovery和smtp发送邮件密码恢复...
【标题】"recovery刷入中兴v955一键代码刷入"涉及的主要知识点是Android设备的系统恢复模式(recovery mode)以及如何通过代码和工具进行刷入操作。在Android系统中,recovery模式是一种特殊的系统状态,用户可以在...
- **`command`字段**: 可以有`"boot-recovery"`和`"update-hboot/radio"`两个值,分别表示进入Recovery模式和更新固件。 - **`recovery`字段**: 包含具体的操作命令,如`"--wipe_data"`、`"--update_package"`等。 ...
3. **打包Recovery**: 完成修改后,mkboot工具可以将这些文件重新打包成一个新的Recovery映像,供用户安装到手机上。 4. **安全检查**: 在打包过程中,mkboot可能会进行校验,确保生成的映像是有效的,并且不会导致...
2. **验证结果**:重启手机进入Recovery模式(关机状态下同时按下音量上键和电源键),如果显示的是官方Recovery界面,则表示恢复成功。 通过以上步骤,即使是在进行了Root操作之后丢失官方Recovery的华为手机,也...
在IT领域,特别是Android系统定制和个性化中,"小米6刷入recovery工具"是一个常见的操作,用于替换手机原厂的恢复环境(Recovery Mode)以实现更多功能。本文将详细解析这一过程及相关知识点。 首先,我们要理解...
2. 文件来源:使用可靠的资源下载Recovery和更新文件,避免下载携带病毒或恶意代码的文件。 3. 遵循教程:对于不熟悉Android系统或Recovery模式的用户,应按照详细教程操作,以免误操作导致设备无法正常使用。 总...
- 注意设备兼容性:不同的Android设备可能需要特定的recovery版本,确保你使用的recovery源代码是为你的设备定制的。 - 避免错误操作:误操作可能导致设备变砖,因此一定要按照步骤仔细操作。 7. **后续使用** ...
Recovery.img是一个镜像文件,包含了Recovery系统的完整代码和功能。通过这个工具,用户可以安装第三方Recovery,比如TWRP或CWM,从而实现更多的自定义选项,如安装非官方ROM、备份和恢复系统等。 "高通机型线刷...
Recovery Mode是一种特殊的系统状态,用户可以在其中执行一系列高级操作,如安装更新、备份数据、恢复出厂设置等,而不会影响到手机的正常操作系统。 【描述解析】 "中兴努比亚Z5 mini 中文recovery" 表明这是为...
然后,下载匹配的HTC T328W recovery ZIP文件,将文件复制到手机的SD卡根目录。接下来,关机后按照设备特定的快捷键组合进入Recovery模式。在Recovery界面,选择“安装ZIP”来刷入新的Recovery,或者执行其他维护...
【华为,荣耀官方recovery1.0】 在智能手机领域,特别是Android系统中,"recovery"是一个非常重要的概念。...正确使用官方recovery,用户不仅可以提升设备性能,还能在遇到问题时迅速恢复到正常状态。
Recovery管理器2.3.9已付费 4EXT Recovery Control是一款功能强大的Recovery管理器,可以在线...注:4EXT Recovery Control需要ROOT和SOFF 和最新触屏版4EXT_Recovery_Touch_v1.0.0.5_RC3 下载后解压即得这两个文件
安卓手机Recovery模式详解 Recovery模式可以说是安卓手机的高级模式,其功能相当强大。在安卓手机无法格式化SD卡的情况下,进入Recovery模式即可轻松格式化SD卡。另外,再刷机、双wipe等方面均需要进入到该模式下...