Skip to content

Instantly share code, notes, and snippets.

@luftreich
Created August 6, 2014 06:32
Show Gist options
  • Save luftreich/703875db1dea9ef8daf8 to your computer and use it in GitHub Desktop.
Save luftreich/703875db1dea9ef8daf8 to your computer and use it in GitHub Desktop.
amlogic recovery FAQ
卡升级
Frank Chen
爱上简洁风格模板引子
空片卡升级的过程
启动卡启动 uboot
读取卡上 recovery.img ,启动 recovery.img
recovery 读取参数文件
读取升级包,校验升级包,校验成功,按照升级包的升级脚本,进行
非空片升级的过程
按 power 键 + 特殊键
读取 nand 上 recovery.img ,启动 recovery.img
进入 recovery ,读取不到任何参数文件,停留在 recovery 界面,手工选择升级包升级
读取升级包,校验升级包,校验成功,按照升级包的升级脚本,进行
恢复出厂的过程
在 /cache/recovery/command 这个文件中写入 --wipe_data
reboot recovery
启动 nand 中的 recovery.img
recovery 从 /cache/recovery/command 读取参数
format data 分区
重启系统
OTA 升级的过程
下载升级包到 /cache/update.zip
在 /cache/recovery/command 这个文件中写入 --update_package=/cache/update.zip
reboot recovery
启动 nand 中的 recovery.img
recovery 从 /cache/recovery/command 读取参数
读取升级包,校验升级包,校验成功,按照升级包的升级脚本,进行
重启系统什么是 recovery
recovery.img 的结构
recovery 的源代码
recovery 的编译过程recovery 中的流程获取参数
1 依次从如下地方尝试获取参数
命令参数
/cache/recovery/command
uboot env recovery_command
/sdcard/factory_update_param.aml
/udisk/factory_update_param.aml
2 常见参数
update_package
update_patch
wipe_data
wipe_cache
usb_burning
wipe_mediaupdate_package
update package 的过程
verify package , 对签名做验证
从升级包中解压出来 updater, 运行 updater
updater 解析 package 中 script ,按照 script 支持
升级的结构
升级包中的 updater script
ext4/yaffs/ubifs 区别recovery 中的文件
fdisk.media.sh
open_mass_storage.sh
set_display_mode.sh
fdisk.media.cmd
fw_env.config
recovery.fstabrecovery 手工命令
reboot recovery
recovery --update_package=/sdcard/xxx.zip
recovery --wipe_cache
recovery --wipe_data
recovery --wipe_media
busybox cat /tmp/recovery.logUboot 中和升级相关的逻辑常见错误
1 升级提示 UTC 错误
UTC 错误是由于 recovery.img 的编译时间比 update.zip 的编译时间晚
2 升级提示 Verify 不过
1)recovery.img 和升级包的密钥不对称,重新编译可以解决,编译前,把 build.prop 删
除掉
2)DDR 有问题
3)Sdcard 有问题
2),3) 一起做实验确认, # 可以把一个文件,在卡和 DDR 反复拷贝,如果多次拷贝后,检
查差异 # 把一个文件,在内存中反复拷贝,如果两个实验,都出现多次拷贝后,文件
出现不一致,说明 DDR 或者 Sdcard 有问题,如果概率一样,说明是 DDR 问题
3 无法恢复出厂设置常见问题
1
recovery 中日志是怎么打印的,为什么 printf 打印不出来?
解答: recovery 中的标准错误和标准输出,都被重定向了到 tmp/recovery.log 了,自己添加打印,
在控制台是看不到的,要 cat /tmp/recovery.log
2
什么情况下 recovery 停止在菜单界面
解答:当 recovery 有一个命令执行失败的时候,会停留在菜单界面
3
自己添加了一个程序,在 recovery 运行时,提示找不到
解答: recovery 中没有提供任何基础的共享库,要在 recovery 中运行的程序,必须以强制编译静态
库的方式编译
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment