项目里需要调试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代码分析
PDF解密工具 打印复制等功能加密禁止的解除 中文破解版Advanced PDF Password Recovery Pro
密码恢复PasswordRecovery和smtp发送邮件密码恢复PasswordRecovery和smtp发送邮件密码恢复PasswordRecovery和smtp发送邮件密码恢复PasswordRecovery和smtp发送邮件密码恢复PasswordRecovery和smtp发送邮件密码恢复...
easyrecovery怎么恢复文件?easyrecovery恢复文件步骤.docx
*亦不对任何用户使用此recovery所遭遇到的任何理论上的或实际上的损失承担责任; * 刷此recovery引起的保修失效、变砖等问题不在此recovery发布人可以解决的问题范围之内; * 如果您使用本recovery,即表示已经默认...
Recovery管理器2.3.9已付费 4EXT Recovery Control是一款功能强大的Recovery管理器,可以在线...注:4EXT Recovery Control需要ROOT和SOFF 和最新触屏版4EXT_Recovery_Touch_v1.0.0.5_RC3 下载后解压即得这两个文件
二、将recovery.img和一键刷入Recovery工具放到一起,放到哪都行,C盘,D盘,桌面都可以 三、进入fastboot界面(音量下+电源,进入bootloader,然后再按一下电源进入fastboot) 四、将手机和电脑用数据线连接,...
它能够恢复已删除的文件、被格式化的文件和分区时损失的文件。对于引导区损坏而导致的数据遗失,也可以通过它找到。恢复被病毒删除的文件,更是不在话下。一些数据恢复软件并不能找到视频文件,但是iCare Data ...
下载帖子中的recovery压缩包 解压到C盘根目录下(recovery文件夹中recovery.img可以自己更换) windows7点运行 在搜索程序和文件(xp点开始-运行) 输入cmd 等dos窗口打开 依次输入cd\ cd recovery nvflash --bl...
recovery开发利用代码控制机器获取刷机平台。
O&O MediaRecovery数据恢复工具是一款专门恢复文档文件和数码照片的数据恢复软件,具有使用简单,恢复文件针对性强的特点,是数据恢复公司经常使用的一款软件, O&O MediaRecovery仅按一下按钮就可以恢复删除图片...
android recovery模式下可用的较大的字体,直接将此头文件放到bootable\recovery\minui目录下,修改graphics.cpp中对原字体头文件的引用为本文件即可。
华为通用官方recovery恢复教程(同样适用于第三方recovery刷入)
BOOT.img和recovery.img解包打包工具,支持高通和mtk的cpu,手机刷机制作刷机包利器,兼容2012年到2018年的cpu,移植recovery必备工具
recovery
4.刷好Recovery后,在关机状态下按住音量增加键+绿色通话键+开机键一段时间,会启动稍后黑屏进入Recovery界面; 5.我这个Recovery里上下移动用手机导航键上下控制,确认是手机导航键确认,而返回是关机键,操作的...
android-recovery-code.rar android-recovery-code.rar
rk平台单独编译recovery的命令,rk平台单独编译recovery的命令
1、下载附件adb和recovery.img。 2、把下载好的adb解压,并使得adb文件和recovery.img都在同一目录下 3、手机重启进入HBOOT界面选择FASTBOOT选项 4、在电脑端点击开始-运行-输入cmd 回车 5、在cmd里输入CD C:Android...
Recovery for Excel