> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs-staging.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 配置（Provision）UFS 设备

配置（Provisioning）是指在新的 UFS 设备上创建和定义 LUN 的过程。一个 UFS 设备包含一个或多个逻辑单元。逻辑单元是设备内部一个独立的处理实体。每个逻辑单元在 UFS 设备内都有一个地址，称为逻辑单元号（LUN）。

用于配置的配置文件位于 `<build root/common/config/ufs/provision>`。

针对各个 UFS 设备版本的 provision XML 文件如下：

* `provision_ufs22.xml` - 适用于 UFS 设备 2.2 器件
* `provision_ufs31.xml` - 适用于 UFS 设备 3.1 器件

在 UFS 设备 provision XML 文件中，UFS 设备描述符（Device Descriptor）部分包含与正在配置的 UFS 设备有关的基本信息。设备描述符包括 LUN 数量、初始电源模式、write boost 参数等详细信息。以下是设备描述符条目示例：

```xml theme={null}
<ufs bNumberLU="6" bBootEnable="1" bDescrAccessEn="0" bInitPowerMode="1" bHighPriorityLUN="0x5" bSecureRemovalType="0"
bInitActiveICCLevel="0" wPeriodicRTCUpdate="0" bConfigDescrLock="0" bWriteBoosterBufferPreserveUserSpaceEn="1" bWriteBoosterBufferType="1"
shared_wb_buffer_size_in_kb="4194304" />
```

provision XML 文件还使用单元描述符（Unit Descriptor）参数描述每个 LUN，例如 Logical Unit Enable、Boot LUN ID。以下是 LUN 描述符条目示例：

```xml theme={null}
<ufs LUNum="0" bLUEnable="1" bBootLunID="0" size_in_kb="4096" bDataReliability="0" bLUWriteProtect="0" bMemoryType="0"
bLogicalBlockSize="0x0c" bProvisioningType="2" wContextCapabilities="0" wb_buffer_size_in_kb="0"
desc="LU 0 - User LUN - Rest of the device" />
```

下表描述了 *provision XML* 文件中使用的一些重要参数。

| 参数                   | 描述                                                                                                                 |
| -------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `bNumberLU`          | 逻辑单元的数量。`bNumberLU` 不包括知名（well-known）逻辑单元。                                                                         |
| `bBootEnable`        | 指示设备是否启用了引导功能：`00h` = 引导功能已禁用，`01h` = 可引导功能已启用                                                                     |
| `bDescrAccessEn`     | 指示在引导序列的部分初始化阶段之后是否可以读取设备描述符：`00h` = 设备描述符访问已禁用，`01h` = 设备描述符访问已启用                                                 |
| `BInitPowerMode`     | 定义设备初始化或硬件复位后的电源模式：`00h` = UFS-Sleep 模式，`01h` = 活动模式                                                               |
| `bHighPriorityLUN`   | 定义高优先级逻辑单元                                                                                                         |
| `bSecureRemovalType` | `00h` = 通过擦除物理内存来移除信息；`01h` = 通过使用单个字符覆盖寻址位置然后擦除来移除信息；`02h` = 通过使用某个字符、其补码然后随机字符覆盖寻址位置来移除信息；`03h` = 使用供应商定义的机制移除信息 |
| `bConfigDescrLock`   | `0h` = 配置描述符未锁定；`1h` = 配置描述符已锁定                                                                                    |

<Note>
  * 要重新配置 UFS 设备，请设置 `bConfigDescrLock="0"`。此参数是 provision XML 文件的一部分。
  * 要防止重新配置，请在 UFS 设备配置和 provisioning 定稿后设置 `bConfigDescrLock="1"`。
</Note>

| 参数                  | 描述                                                                                                                                |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `LUNum`             | 逻辑单元号                                                                                                                             |
| `bLUEnable`         | 启用/禁用逻辑单元：`00h` = 禁用逻辑单元，`01h` = 启用逻辑单元                                                                                           |
| `bBootLunID`        | 引导 LUN ID：`00h` = 不可引导，`01h` = Boot LU A，`02h` = Boot LU B                                                                        |
| `size_in_kb`        | 以 KB 为单位指定 LUN 大小                                                                                                                 |
| `bLUWriteProtect`   | 逻辑单元写保护：`00h` = LU 未受写保护，`01h` = 当 `fPowerOnWPEn = 1` 时 LU 受写保护                                                                   |
| `bMemoryType`       | 定义逻辑单元内存类型：`00h` = 普通内存，`01h` = 系统代码内存类型，`02h` = 非持久性内存类型，`03h` = 增强型内存类型 1，`04h` = 增强型内存类型 2，`05h` = 增强型内存类型 3，`06h` = 增强型内存类型 4 |
| `bProvisioningType` | 配置类型：`00h` = 禁用精简配置（Thin Provisioning），`02h` = 启用精简配置且 `TPRZ = 0`                                                                 |

## UFS 设备分区布局

默认的 UFS 设备配置会创建八个 LUN（LUN0 到 LUN7）。

* Linux 数据和所有 Linux 文件系统镜像存储在 LUN0 中。
* 引导知名 LUN（WLUN）0xB0 在 LUN1 和 LUN2 之间交替，为 XBL 提供故障安全备份。
* 引导链的其余部分存储在 LUN4 中。
* LUN6 和 LUN7 默认未使用。

<img src="https://mintcdn.com/qualcomm-staging/QCK4UbmV_LqAUkRw/System/Memory-and-Storage/images/default-ufs-provisioning-layout.svg?fit=max&auto=format&n=QCK4UbmV_LqAUkRw&q=85&s=3443277399d7e84130f35dd7e7aa5e87" alt="默认 UFS 设备布局" width="674" height="480" data-path="System/Memory-and-Storage/images/default-ufs-provisioning-layout.svg" />
