一.概述

UFS Recovey 模式是一种特殊下载模式,就是在UFS为空片(做过全盘erase操作或者说UFS没有数据)的情况下,将系统镜像下载到UFS Devices。

二 . 开发环境

平台 Hikey970
内部存储 64G UFS2.1
USB USB2.0/USB3.0
内存 6GB DDR4 
外部存储 SD卡

三.Hikey970 Recovery 模式下载流程

1 .首先拨码到Reovery Mode

2. Hikey970上电,此时系统运行Romcode代码(其中Romcode在CPU内部Ram),检测到UFS设备为空片(UFS Devices已经做完全盘Erase,只有Firmware, 没有数据)时,进入Recovery Mode。

3 .执行recovery-flash.sh脚本,执行命令:

sudo ./recovey-flash.sh /dev/ttyUSBx(Recovey Mode识别出来的串口)

recovery-flash.sh脚本内容如下:

#!/bin/bash
DEVICE=$1
IMG_FOLDER=${PWD}# UEFI dir. Downloaded from
#   https://builds.96boards.org/snapshots/reference-platform/components/uefi-staging/
#   Eg: 26/hikey970/release/
# Then, modify UEFI_BUILD_PATH accordingly.
UEFI_BUILD_PATH=/home/qubo/tools-images-hikey970if [ "${DEVICE}" == "" ]; thenDEVICE=/dev/ttyUSB0
ficd ${UEFI_BUILD_PATH}
sudo ${UEFI_BUILD_PATH}/hikey_idt -c ${UEFI_BUILD_PATH}/config -p ${DEVICE}# partition table
fastboot flash ptable ${UEFI_BUILD_PATH}/prm_ptable.img# bootloader
fastboot flash xloader ${UEFI_BUILD_PATH}/sec_xloader.img
fastboot flash fastboot ${UEFI_BUILD_PATH}/l-loader.bin
fastboot flash fip ${UEFI_BUILD_PATH}/fip.bin# kernel ramdisk dt
fastboot flash boot ${UEFI_BUILD_PATH}/boot.imgfastboot flash cache ${UEFI_BUILD_PATH}/cache.imgfastboot flash system ${UEFI_BUILD_PATH}/system.imgfastboot flash userdata ${UEFI_BUILD_PATH}/userdata.img

接下来我们就来看recovey-flash.sh脚本里面做了事情:

(1) Use hikey-idt to download binaries to HiKey970 through serial port. On HiKey970, serial port means a ttyUSB device emulated from its OTG port.

Command syntax

sudo ./hikey_idt -c config -p /dev/ttyUSBx

Download流程主要做了以下事情:

a .通过Write Config Descriptor配置Ufs Devices

b .初始化Fastboot环境

(2)下载分区表,后续uefi image, boot.img, system.img就按照分区表下载

# partition table
fastboot flash ptable ${UEFI_BUILD_PATH}/prm_ptable.img

(3)下载Pre UEFI镜像文件(Boot Lun启动代码)

a .Boot流程中这个启动代码在RomCode下一阶段运行,初始化DDR,加载UEFI程序到DDR运行,启动代码运行之后运行UEFI程序。

b. Download流程中这个程序不运行。

fastboot flash xloader ${UEFI_BUILD_PATH}/sec_xloader.img

(4)下载UEFI 镜像文件

fastboot flash fastboot ${UEFI_BUILD_PATH}/l-loader.bin
fastboot flash fip ${UEFI_BUILD_PATH}/fip.bin

(5)下载AOSP系统镜像:boot.img, cache.img, system.img, usuerdata.img等

 kernel ramdisk dt
fastboot flash boot ${UEFI_BUILD_PATH}/boot.imgfastboot flash cache ${UEFI_BUILD_PATH}/cache.imgfastboot flash system ${UEFI_BUILD_PATH}/system.imgfastboot flash userdata ${UEFI_BUILD_PATH}/userdata.img

四. Recovery Mode下载中UFS配置

1 . 通过Write Config Descriptor配置Ufs Lun

Recovery Mode下载的时候,UFS是空片,只有Firmware, 没有数据(系统镜像和用户数据等)

此时UFS没有配置Lun, 可以响应UFS Query命令(read/write descriptor/flag/attribute),

初始化完成后可以响应任何命令,下图是初始化框图:

所以需要配置UFS Lun,通过Config Desriptor配置Lun

代码通过Config Descriptor配置Lun注意以下几点:1. 需要按照 Read Config Descriptor -->修改相关的Config Descriptor Parameter --> Write Config Descriptor的顺序2. 修改相关的Config Descriptor Parameter要注意大小端,UFS UPIU Frame是使用大端传输3. 修改相关的Config Descriptor Parameter要参考UFS Spec相关权限4. 配置的所有Lun Size之和不能超过Geometry Descriptor的qTotalRawDeviceCapacity值

配置项如下:

2. Boot Lun配置

(1)配置bBootEnable为1,使能BootEnable Feature, Boot Lun启动代码才能正常工作。

(2) 配置bBootLunEn,系统启动的时候会选择Enable的 Boot Lun启动

比如配置bBootLunEn=01h, 对照下图,系统从Boot Lun A启动

也可以发送Query Read  bBootLunEn Attribute查询系统选择启动的Boot Lun

(3)配置bBootLunID, 这个是Boot Lun和Normal Lun的映射

比如Lun0的bBootLunID=01h, 说明Boot LunA映射到Lun0

比如Lun1的bBootLunID=02h,说明Boot LunB映射到Lun1

参考资料:

1. https://github.com/96boards-hikey/tools-images-hikey970

2 . Universal Flash Storage (UFS) Version 2.2

UEFI 之 UFS Recovery模式下载相关推荐

  1. android recovery中文下载地址,Android Recovery模式与Recovery界面的中文详细说明

    Android Recovery模式与Recovery界面的中文详细说明 Android Recovery模式 来源: ChinaUnix博客 日期: 2009.04.25 22:58 (共有条评论) ...

  2. 【转】Android Recovery模式

    原文网址:http://leox.iteye.com/blog/975303 (muddogxp 原创,转载请注明) Recovery简介 Android利用Recovery模式,进行恢复出厂设置,O ...

  3. 怎样进入android模式,安卓手机如何进入Recovery模式的通用方式详解

    2014-12-12 15:24:16 安卓手机如何进入Recovery模式的通用方式详解 标签:安卓 Recovery模式 教程 Recovery模式是什么?这里说的Recovery模式主要指的是安 ...

  4. 手机进不了recovery模式了 怎么办

    解决方法: 方法一:进入recovery模式,恢复出厂设置: 安卓系统智能手机进入recovery模式有三种方法:这的三种方法,操作步骤如下: 方法一:如果手机是开机状态,请先关机,在关机情况下,同时 ...

  5. FastBoot BootLoader Recovery 模式学习

    FastBoot BootLoader Recovery 模式学习 参考链接:http://www.mamicode.com/info-detail-532540.html 标签: 理论上,所有的An ...

  6. 红米机器人倒地_教你手机recovery模式后出现机器人倒地状态怎么办及红米note增强版怎么root...

    很多安卓手机用户都会选择给手机进行刷机,不过,在刷机的过程中,常常会遇到一些意想不到的状况,而让正在刷机的手机用户束手无策,比如说:手机recovery模式后出现机器人倒地状态,不少刷机的用户看到手机 ...

  7. Ubuntu 18.04 进入 Recovery 模式

    Ubuntu 18.04 进入 Recovery 模式 Ubuntu 18.04 进入 Recovery 模式, 只需要在开机时一直按住 Shift 键,就会进入 GNU GRUB 界面 查看磁盘占用 ...

  8. linux 进入recovery模式,recovery模式怎么进入,教您recovery模式怎么进入

    关于怎么进入recovery模式这个问题,小编我是想了很久才想到的.但是小编在想到的同时,也想要现在立刻马上和小伙伴们分享,所以才会有出现在这里的我.那么下面我们就开始说recovery模式的进入方法 ...

  9. 华为荣耀4X反复重启且无法进入recovery模式

    一部华为荣耀畅玩4X已使用多年,之前一直正常,某天突然自动重启,从此以后就是停留在"honor"标志页面反复重启,再也无法进入系统.试图刷机恢复,下载原版刷机包存入TF卡后,按住音 ...

最新文章

  1. 通过UDP的组播方式收发数据
  2. xamarin拖一个gridview控件报错怎么解决_[笔记阁]Xamarin初探:版式面板(一)
  3. 计算机一级考试无法显示评分,计算机一级评分各题标准
  4. EF Core 数据变更自动审计设计
  5. 协议转换器主要是应用在哪些地方?
  6. 用until编写一段shell程序,计算1~10的平方
  7. 实用的 BOM 属性对象方法
  8. UE4 C++使用Multi Theard的教程
  9. Symbian 5800 重力开发的一些数据
  10. ⌈洛谷1505⌋⌈BZOJ2157⌋⌈国家集训队⌋旅游【树链剖分】
  11. mathtype字体倾斜
  12. 如何在RedHat 5.4上使用免费的YUM源
  13. openwrt带宽测速
  14. 用Excel做简单的数据分析
  15. Windows 7无法启用网络发现的处理办法
  16. linux内核 精简 编译,精简LINUX内核配置及快速编译的方法收集
  17. 2021-10-10
  18. 瞅瞅Levels.fyi发布的2020年度程序员收入报告
  19. 修改ubuntu键盘布局
  20. java-数组_length 字符串_length() 集合_size()的区别

热门文章

  1. 教务排课系统毕业设计,大学排课系统设计与实现,排课系统论文作品参考
  2. mysql时间格式化到小时_mysql 时间格式化
  3. 自动检测图像中的圆形或圆形对象
  4. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。
  5. C++期末课程设计:设计一个学生学籍管理系统
  6. FishC笔记—19 讲 函数:我的地盘听我的
  7. 台式计算机经常使用的硬盘是什么尺寸,台式机固态硬盘多大合适
  8. 关于建立北京市专业技术人员职业资格与职称对应关系的通知
  9. 工程效能部门如何讲好故事做好事
  10. PHP,POST页面无法传值跳转,请大神帮助。