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

# 向 SPINOR 闪存添加分区 

SPINOR 闪存是一种高速、非易失性存储器，广泛应用于嵌入式系统。在 Qualcomm 平台上，该存储器被划分为在 `nor_partition_frtos.xml` 中定义的多个逻辑分区，每个分区由唯一的 GUID 标识。

下表列出了 `nor_partition_frtos.xml` 中 RTSS SPINOR 分区的详细信息：

|               **分区**              |                                                               **说明**                                                              |
| :-------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: |
|             `SAIL_DLP`            | <ul><li>位于 NOR 起始位置的小分区（4 KB）。</li><li>用作下载/加载器指针或关键启动标记。</li><li>此分区必须位于最前面；其备份分区（`SAIL_DLP_BKUP`）必须位于最后，以确保工具和更新的可靠性。</li></ul> |
|             `SAIL_HYP`            |                        <ul><li>存储 RTSS 虚拟机监控程序镜像（`sailhyp.elf`）。</li><li>在启动过程的早期运行，以提供虚拟化和安全隔离。</li></ul>                        |
|      `SAIL_SW1` - `SAIL_SW4`      |     <ul><li>包含 RTSS 软件镜像（`sailsw1.elf`、`sailsw2.elf`、`sailsw3.elf` 和 `sailsw4.elf`）。</li><li>代表由虚拟机监控程序加载的不同软件阶段或域。</li></ul>     |
|           `SAIL_SEC_ELF`          |                                               存储 RTSS 安全相关代码和数据所需的安全 ELF 镜像或配置 blob。                                              |
|         `SAIL_DBG_POLICY`         |                                                   包含控制允许的调试功能的调试策略配置，尤其适用于量产设备。                                                   |
|          `SAIL_HYP_BKUP`          |                                                   RTSS 虚拟机监控程序镜像（SAIL\_HYP）的备份。                                                   |
| `SAIL_SW1_BKUP` - `SAIL_SW4_BKUP` |                                                           RTSS 软件分区的备份。                                                           |
|        `SAIL_SEC_ELF_BKUP`        |                                                          安全 ELF 或配置分区的备份。                                                         |
|       `SAIL_DBG_POLICY_BKUP`      |                                                             调试策略配置的备份。                                                            |
|         `SAIL_OTA_REBOOT`         |                                        一个小分区，用于存储 OTA 更新期间与重启序列相关的标志或状态信息（例如，待处理的更新或重启状态）。                                        |
|        `SAIL_OTA_METADATA`        |                       <ul><li>存储与 OTA 更新过程相关的元数据，例如版本信息、镜像详情和更新状态。</li><li>这可确保引导加载程序判断哪些镜像有效且为最新。</li></ul>                      |
|          `SAIL_DLP_BKUP`          |                                <ul><li>SAIL\_DLP 分区的备份。</li><li>此分区必须始终是 NOR 布局中的最后一个条目。</li></ul>                                |
|      `MD_BIST_PATTERN2/BKUP`      |                                 <ul><li>存储用于诊断和制造的调制解调器内置自检（BIST）模式。</li><li>备份分区提高了健壮性。</li></ul>                                |
|       `SAIL_TGB_MARKER/BKUP`      |                                                    用于 RTSS TGB 测试或工具标记和日志的小分区。                                                    |
|      `SAIL_NOR_TEST_EL1/EL2`      |                                               用于在 EL1 和 EL2 级别进行 NOR 闪存测试，而不影响生产分区。                                               |
|             `SAIL_SLT`            |                                                   系统级测试（SLT）分区，用于验证或制造脚本和二进制文件。                                                   |
|        `SAIL_CODE_COVERAGE`       |                                                        存储开发和验证期间使用的代码覆盖率数据。                                                       |
|          `SAIL_PMIC_LOG`          |                                                  非常小的分区，用于存储 PMIC 日志，例如上电原因和错误快照。                                                 |
|          `SAIL_RAM_DUMP`          |                                                   存储崩溃后捕获的 RAM 转储，以支持对安全关键故障的调试。                                                  |
|      `MD_CRASH_DUMP_IN_SAIL`      |                                                    在其他存储选项不可用时，为调制解调器崩溃转储保留的空间。                                                   |
|         `SAIL_NOC_ERR_LOG`        |                                                    存储用于调试互连或总线故障的片上网络（NoC）错误日志。                                                   |
|             `SAIL_EFS`            |                                                用于 RTSS 运行时数据和配置的嵌入式文件系统，可在重启后持久保存。                                                |
|       `SAIL_OEM_PARTITION_1`      |                                                        为 OEM 特定配置或安全应用数据保留。                                                       |

## **前提条件**

在开始之前，为每个分区创建唯一的 GUID。运行以下命令：

```python theme={null}
python -c "import uuid; print(uuid.uuid4())"
```

运行该命令后，会生成一个 GUID。

示例：

`$ python3 -c "import uuid; print(uuid.uuid4())"`

`55b3aa18-3a33-4d3d-bcb5-c3cf9770cbd1`

将此 GUID 添加到 `nor_partition_frtos.xml` 文件中。

## **将带有 GUID 的分区添加到** `nor_partition_frtos.xml`

1. 从以下文件夹获取最新的 `nor_partition_frtos.xml` 文件：
   > * 对于 IQ-9075：
   >   `<FIRMWARE_ROOT>/qualcomm-linux-spf-2-0_ap_standard_oem_sail/QCS9100.LE.2.0/common/config/sail_nor_lemans/nor_partition_frtos.xml`
   > * 对于 IQ-8275：
   >   `<FIRMWARE_ROOT>/qualcomm-linux-spf-2-0_ap_standard_oem_sail/QCS8300.LE.2.0/common/config/sail_nor_monaco/nor_partition_monaco.xml`
2. 修改该文件以添加新的分区条目：
   > ```python theme={null}
   > <partition label="PARTITION_NAME" size_in_kb="size" type="GUID obtained in prerequisites" filename="binary name"/>
   > ```
   >
   > 示例：
   >
   > ```python theme={null}
   > <partition label="SAIL_Test" size_in_kb="2048" type="55b3aa18-3a33-4d3d-bcb5-c3cf9770cbd1" filename="sailtest.elf"/>
   > ```
   >
   > <Note>
   >   **注意**
   >
   >   * 分区大小应按 4 KB 对齐。最小大小为 4 KB。
   >   * 请将高亮显示的字段替换为新分区的详细信息。
   > </Note>
3. 要将二进制文件刷写到该分区中，请在 **filename** 字段中指定该二进制文件：
   示例：

   ```python theme={null}
   <partition label="SAIL_Test" size_in_kb="2048" type="55b3aa18-3a33-4d3d-bcb5-c3cf9770cbd1" filename="sailtest.elf"/>
   ```

   <Note>
     **注意**

     * 将新分区放置在 `SAIL_SEC_ELF_BKUP` 之后、`SAIL_DLP_BKUP` 之前的任意位置。
     * `SAIL_DLP_BKUP` 应始终是最后一个分区。确保最后一个分区有对应的二进制文件。
   </Note>

## **生成用于刷写新条目的 GPT 分区表二进制文件**

1. 创建一个新目录并进入该目录：
   ```undefined theme={null}
   mkdir ./sail_new_partition_entry
   ```
   ```powershell theme={null}
   cd sail_new_partition_entry
   ```
2. 运行分区工具：
   > * 对于 IQ-9075：
   >   ```xml theme={null}
   >   python <FIRMWARE_ROOT>/qualcomm-linux-spf-2-0_ap_standard_oem_sail/QCS9100.LE.2.0/common/config/storage/ptool.py -x <FIRMWARE_ROOT>/qualcomm-linux-spf-2-0_ap_standard_oem_sail/QCS9100.LE.2.0/common/config/sail_nor_lemans/nor_partition_frtos.xml
   >   ```
   > * 对于 IQ-8275：
   >   ```xml theme={null}
   >   python <FIRMWARE_ROOT>/qualcomm-linux-spf-2-0_ap_standard_oem_ sail/QCS8300.LE.2.0/common/config/storage/ptool.py -x <FIRMWARE_ ROOT>/qualcomm-linux-spf-2-0_ap_standard_oem_sail/QCS8300.LE.1. 0/common/config/sail_nor_monaco/nor_partition_frtos.xml
   >   ```
   >
   > 这些命令会根据 XML 布局生成输出文件。
3. 将生成的文件复制到以下目录，以对 NOR 闪存进行编程：

   > `<workspace_path>/build-<DISTRO>/tmp-glibc/deploy/images/<MACHINE>/<IMAGE>/sail_nor`
   >
   > 示例：
   >
   > `<workspace_path>/build-qcom-wayland/tmp-glibc/deploy/images/qcs9075-iq-9075-evk/qcom-multimedia-image/sail_nor`
   >
   > 参数：
   >
   > > * \<DISTRO>: `qcom-wayland`
   > > * \<MACHINE>: `qcs9075-iq-9075-evk`
   > > * \<IMAGE>: `qcom-multimedia-image`

   <Note>
     **注意**

     * 如果有预编译的二进制镜像可用，请将生成的文件复制到 SDK 目录中，如以下示例所示：

     ```powershell theme={null}
     cp -r ./sail_new_partition_entry/* <sdk>\target\qcs9075-iq-9075-evk\qcom-multimedia-image\sail_nor

     ```
   </Note>
4. 有关刷写 RTSS 的更多信息，请参阅 [Flash SAIL](https://dragonwingdocs.qualcomm.com/Key-Documents/Flash-Guide/flash-with-qdl#flash-sail)。
