UEFI 之 UFS Recovery模式下载
一.概述
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模式下载相关推荐
- android recovery中文下载地址,Android Recovery模式与Recovery界面的中文详细说明
Android Recovery模式与Recovery界面的中文详细说明 Android Recovery模式 来源: ChinaUnix博客 日期: 2009.04.25 22:58 (共有条评论) ...
- 【转】Android Recovery模式
原文网址:http://leox.iteye.com/blog/975303 (muddogxp 原创,转载请注明) Recovery简介 Android利用Recovery模式,进行恢复出厂设置,O ...
- 怎样进入android模式,安卓手机如何进入Recovery模式的通用方式详解
2014-12-12 15:24:16 安卓手机如何进入Recovery模式的通用方式详解 标签:安卓 Recovery模式 教程 Recovery模式是什么?这里说的Recovery模式主要指的是安 ...
- 手机进不了recovery模式了 怎么办
解决方法: 方法一:进入recovery模式,恢复出厂设置: 安卓系统智能手机进入recovery模式有三种方法:这的三种方法,操作步骤如下: 方法一:如果手机是开机状态,请先关机,在关机情况下,同时 ...
- FastBoot BootLoader Recovery 模式学习
FastBoot BootLoader Recovery 模式学习 参考链接:http://www.mamicode.com/info-detail-532540.html 标签: 理论上,所有的An ...
- 红米机器人倒地_教你手机recovery模式后出现机器人倒地状态怎么办及红米note增强版怎么root...
很多安卓手机用户都会选择给手机进行刷机,不过,在刷机的过程中,常常会遇到一些意想不到的状况,而让正在刷机的手机用户束手无策,比如说:手机recovery模式后出现机器人倒地状态,不少刷机的用户看到手机 ...
- Ubuntu 18.04 进入 Recovery 模式
Ubuntu 18.04 进入 Recovery 模式 Ubuntu 18.04 进入 Recovery 模式, 只需要在开机时一直按住 Shift 键,就会进入 GNU GRUB 界面 查看磁盘占用 ...
- linux 进入recovery模式,recovery模式怎么进入,教您recovery模式怎么进入
关于怎么进入recovery模式这个问题,小编我是想了很久才想到的.但是小编在想到的同时,也想要现在立刻马上和小伙伴们分享,所以才会有出现在这里的我.那么下面我们就开始说recovery模式的进入方法 ...
- 华为荣耀4X反复重启且无法进入recovery模式
一部华为荣耀畅玩4X已使用多年,之前一直正常,某天突然自动重启,从此以后就是停留在"honor"标志页面反复重启,再也无法进入系统.试图刷机恢复,下载原版刷机包存入TF卡后,按住音 ...
最新文章
- 通过UDP的组播方式收发数据
- xamarin拖一个gridview控件报错怎么解决_[笔记阁]Xamarin初探:版式面板(一)
- 计算机一级考试无法显示评分,计算机一级评分各题标准
- EF Core 数据变更自动审计设计
- 协议转换器主要是应用在哪些地方?
- 用until编写一段shell程序,计算1~10的平方
- 实用的 BOM 属性对象方法
- UE4 C++使用Multi Theard的教程
- Symbian 5800 重力开发的一些数据
- ⌈洛谷1505⌋⌈BZOJ2157⌋⌈国家集训队⌋旅游【树链剖分】
- mathtype字体倾斜
- 如何在RedHat 5.4上使用免费的YUM源
- openwrt带宽测速
- 用Excel做简单的数据分析
- Windows 7无法启用网络发现的处理办法
- linux内核 精简 编译,精简LINUX内核配置及快速编译的方法收集
- 2021-10-10
- 瞅瞅Levels.fyi发布的2020年度程序员收入报告
- 修改ubuntu键盘布局
- java-数组_length 字符串_length() 集合_size()的区别