MTK 8.1 uncrypt流程
2019-04-28 14:31:37   0  举报             
     
         
 描述了Android 8.1平台解密的流程,方便学习记录。
    作者其他创作
 大纲/内容
  ShutdownThread.beginShutdownSequence(context);
  ShutdownThread.uncrypt();
  重启
  成功返0,失败返1
  设置重启进度条
  否
  recovery.img依靠这个文件找到位于data分区的升级包CACHE_BLOCK_MAP = \"/cache/recovery/block.map\";
  ShutdownThread.sInstance.start();开启线程,执行run方法
  走到uncrypt.cpp,执行main函数
  filename = \"@/cache/recovery/block.map\";final String filenameArg = \"--update_package=\" + filename + \"\\";final String localeArg = \"--locale=\" + Locale.getDefault().toLanguageTag() + \"\\";String command = filenameArg + localeArg;
  注意
  成功返回0
  通过init建立一个socket连接,使得uncrypt和system_server可以通信
  这个程序将会为分区的文件产生一系列的block块,使得不用挂载此分区便可以使用 block devices 读取此文件内容,最后得到的是称为\"block map\"的东西,recovery可以读取这个block map 文件并获取这个文件的数据作为升级包
  RecoverySystemService.setupBcb(command)
   SystemProperties.set(\"ctl.start\
  // read next block to tail        if (font color=\"#ff3333\
  展示进度条,开启一个新线程进行解密
  调用
  /frameworks/base/services/core/java/com/android/server/power/ShutdownThread
  PowerManager.reboot(PowerManager.REBOOT_RECOVERY_UPDATE);
  返回true
  \"block map\
  向BCB中写入命令,使得重启进入recovery
  /frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
  成功返回true
  是否有重启进度条(mRebootHasProgressBar)
  init.rc
  调用PowerManagerService.lowLevelShutdown(recovery);重启
  通过解析fstab判断(data)分区是否加密,*encrypted = true; 是否支持加密, *encryptable = true;
  上层应用
  sInstance.mProgressDialog = showShutdownDialog(context);
  RecoverySystem.setupBcb(command)
  frameworks/base/core/java/android/os/RecoverySystem.java
  是
  /frameworks/base/core/java/android/os/PowerManager.java
  /frameworks/base/services/core/java/com/android/server/RecoverySystemService.java
   
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 