OTA升级常见问题及流程

1.日志查看

通过查看recovery日志分析问题
通过adb shell logcat -v time >upgradelog.txt,输出升级过程日志,查看问题卡在何处。
通过adb pull cache/recovery ,查看升级后的日志

2. SELinux权限QA

万能规则解决SELinux中绝大部分的avc denied问题

2.1示例一:

在这里插入图片描述
这是一个典型的SELinux权限问题,下面让我们一步步的来破解分析。
分析过程:
缺少什么权限: { write }权限
谁缺少权限: scontext=u:r:kernel:s0
对哪个文件缺少权限: tcontext=u:object_r:block_device
什么类型的文件: tclass=blk_file
解决方法:添加对应的规则,这里建议添加在对应的kernel.te里面

allow kernel block_device:blk_file write;
2.2示例二:

在这里插入图片描述
解决方法:按照示例一的流程,这里建议添加在对应的platform_app.te里面添加对应的规则。

allow platform_app app_data_file:file execute
2.3注意

有时候avc denied的log不是一次性显示所有问题,要等你解决一个权限问题之后,才会提示另外一个权限问题。比如提示确实某个目录的read权限,你加入read之后,再显示缺少write权限,要你一次次一次试,一次一次加。这时你可以简单粗暴写个rw_dir_perms,这个权限包含了{open search write …}等等很多权限。可以查看external/sepolicy/global_macros来了解更多权限声明 (相对应的在Android 7和Android 8对应的就是external/sepolicy/global_macros,如果有定义的话 );
要加入的权限很多时,可以用中括号,比如:

allow engsetmacaddr  vfat:dir { search write add_name create};
2.4关闭SELinux权限检查

遇到问题不确定是否由于selinux问题造成,可先在adb shell 下,输入setenforce 0,让selinux失效,看是否问题还出现。以此可以澄清是否由selinux造成的问题。

3.升级包制作

3.1整包

1.source build/envtsetup.sh
2.lunch 31(此处选择项目中实际的选项)
3.make otapackage -j8

3.2差分包

1.执行make otapackage -j8 然后拷贝资料

out/target/product/msm8909/obj/PACKAGING/target_files_intermediates/msm8909-target_files-eng.smart-jenkins.zip

到编译根目录,改名为old.zip

2.重复步骤1,改名为new.zip

3.执行命令,制作差分包

./build/tools/releasetools/ota_from_target_files -v --block -p out/host/linux-x86/ -k build/target/product/security/testkey -i old.zip new.zip update.zip

得到差分包update.zip

4.升级包上传&升级任务建立

Type
车机型号针对不同的车机型号,可以指定升级任务对应的型号
车机版本号可以指定当前车机版本号为多少的全部升级
设备ID车辆序列号,可以指定设备序列号
任务类型MCU升级或者Android系统升级

例如:产线上,某款ABC某批次版本号为v0.7.1 的车机出现严重BUG,线刷成本巨大,现针对v0.7.1 序列为xxxx-xxxx发布升级任务进行在线升级(版本回退或者升级).

5.版本校验&升级包下载

1.读取车机型号/车机版本号/设备ID,从后台服务器获取升级任务
2.升级任务校验,查看升级任务详情,比较版本号等信息,确认是否需要升级.
3.下载升级包,查看本地是否有待下载的升级包,是否是同一升级包,是否需要继续下载或者重新下载

6.升级流程

1.写入缓存目录
将升级包由下载目录拷贝至升级目录data/cache/
2.升级包校验
RecoverySystem.verifyPackage…
3. 安装升级包
RecoverySystem.installPackage…
4.升级结果反馈
车机重启后,校验版本号,检测升级结果,上传服务器

其他升级方式

1.通过Recovery SD卡方式

将刷机包拷贝到sd 卡中。通过adb reboot recovery 方式重启进入recovery 模式进行升级;
在这里插入图片描述

然后找到升级包在sd 卡中的位置,点击就能升级了。

2.通过Android adb命令方式
adb root
adb push update.zip /data/update.zip

将升级包导入手机,这个步骤,到时候我们就可以直接通过apk 下载升级包到/data/ 目录或/cache 目录或SD 下。
接下来我们在cache 目录下创建recovery 文件夹:

adb shell "mkdir /cache/recovery"

然后在recovery 目录下创建文件command

adb shell "touch /cache/recovery/command"

下一步就是往command 这个文件中写入:

adb shell
echo "--update_package=/data/update.zip" > /cache/recovery/command
sync

最后我们重启到recovery,系统就会自动进行更新了:

adb reboot recovery
  • 0
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值