Merge branch 'doc/add_Chinese_translation_to_README_files_in_components_and_tools_folders_1st_batch' into 'master'

Add Chinese translation for storage documents linked to README files in components and tools folders (1st batch)

See merge request espressif/esp-idf!5620
This commit is contained in:
Krzysztof Budzynski 2019-09-06 20:18:20 +08:00
commit a2f86200c7
9 changed files with 617 additions and 3 deletions

View file

@ -1,6 +1,8 @@
NVS Partition Generator Utility NVS Partition Generator Utility
=============================== ===============================
:link_to_translation:`zh_CN:[中文]`
Introduction Introduction
------------ ------------

View file

@ -0,0 +1,304 @@
NVS 分区生成程序
===============================
:link_to_translation:`en:[English]`
介绍
------------
NVS 分区生成程序 (:component_file:`nvs_flash/nvs_partition_generator/nvs_partition_gen.py`) 根据 CSV 文件中的键值对生成二进制文件。该二进制文件与 :doc:`非易失性存储器 (NVS) </api-reference/storage/nvs_flash>` 中定义的 NVS 结构兼容。NVS 分区生成程序适合用于生成二进制数据Blob其中包括设备生产时可从外部烧录的 ODM/OEM 数据。这也使得生产制造商在使用同一个固件的基础上,通过自定义参数,如序列号等,为每个设备生成不同配置。
准备工作
-------------
在加密模式下使用该程序,需安装下列软件包:
- cryptography package
根目录下的 `requirements.txt` 包含必需 python 包,请预先安装。
CSV 文件格式
---------------
.csv 文件每行需包含四个参数,以逗号隔开。具体参数描述见下表:
+------+----------+--------------------------------------------------------------+-----------------------------------------------------------------+
| 序号 | 参数 | 描述 | 说明 |
+======+==========+==============================================================+=================================================================+
| 1 | Key | 主键,应用程序可通过查询此键来获取数据。 | |
+------+----------+--------------------------------------------------------------+-----------------------------------------------------------------+
| 2 | Type | 支持 ``file````data````namespace``。 | |
+------+----------+--------------------------------------------------------------+-----------------------------------------------------------------+
| 3 | Encoding | 支持 ``u8````i8````u16````u32``、 | ``file`` |
| | | ``i32````string````hex2bin````base64````binary``。 | 类型当前仅支持 |
| | | 决定二进制 ``bin`` 文件中 value 被编码成的类型。 | ``hex2bin````base64``、 |
| | | ``string````binary`` 编码的区别在于, | ``string````binary`` 编码。 |
| | | ``string`` 数据以 NULL 字符结尾,``binary`` 数据则不是。 | |
+------+----------+--------------------------------------------------------------+-----------------------------------------------------------------+
| 4 | Value | Data value | ``namespace`` 字段的 ``encoding````value`` 应为空。 |
| | | | ``namespace````encoding````value`` 为固定值,不可设置。 |
| | | | 这些单元格中的所有值都会被忽视。 |
+------+----------+--------------------------------------------------------------+-----------------------------------------------------------------+
.. note:: CSV 文件的第一行应为列标题,不可设置。
此类 CSV 文件的 Dump 示例如下::
key,type,encoding,value <-- 列标题
namespace_name,namespace,, <-- 第一个条目为 "namespace"
key1,data,u8,1
key2,file,string,/path/to/file
.. note::
请确保:
- 逗号 ',' 前后无空格;
- CSV 文件每行末尾无空格。
NVS 条目和命名空间 (namespace)
-----------------------------------
如 CSV 文件中出现命名空间条目,后续条目均会被视为该命名空间的一部分,直至找到下一个命名空间条目。找到新命名空间条目后,后续所有条目都会被视为新命名空间的一部分。
.. note:: CSV 文件中第一个条目应始终为 ``namespace``
支持多页 Blob
----------------------
默认情况下,二进制 Blob 可跨多页,格式参考 :ref:`structure_of_entry` 章节。如需使用旧版格式,可在程序中禁用该功能。
支持加密
-------------------
NVS 分区生成程序还可使用 AES-XTS 加密生成二进制加密文件。更多信息详见 :ref:`nvs_encryption`
支持解密
-------------------
如果 NVS 二进制文件采用了 AES-XTS 加密,该程序还可对此类文件进行解密,更多信息详见 :ref:`nvs_encryption`
运行程序
-------------------
**使用方法**::
python nvs_partition_gen.py [-h] {generate,generate-key,encrypt,decrypt} ...
**可选参数**
+------+------------+----------------------+
| 序号 | 参数 | 描述 |
+------+------------+----------------------+
| 1 | -h, --help | 显示帮助信息并退出 |
+------+------------+----------------------+
**命令**::
运行 nvs_partition_gen.py {command} -h 查看更多帮助信息
+------+--------------+---------------+
| 序号 | 参数 | 描述 |
+------+--------------+---------------+
| 1 | generate | 生成 NVS 分区 |
+------+--------------+---------------+
| 2 | generate-key | 生成加密密钥 |
+------+--------------+---------------+
| 3 | encrypt | 加密 NVS 分区 |
+------+--------------+---------------+
| 4 | decrypt | 解密 NVS 分区 |
+------+--------------+---------------+
生成 NVS 分区(默认模式)
----------------------------------
**使用方法**::
python nvs_partition_gen.py generate [-h] [--version {1,2}] [--outdir OUTDIR]
input output size
**位置参数**
+--------+--------------------------------------------------+
| 参数 | 描述 |
+--------+--------------------------------------------------+
| input | 待解析的 CSV 文件路径 |
+--------+--------------------------------------------------+
| output | NVS 二进制文件的输出路径 |
+--------+--------------------------------------------------+
| size | NVS 分区大小(以字节为单位,且为 4096 的整数倍) |
+--------+--------------------------------------------------+
**可选参数**
+-----------------+------------------------------------------------+
| 参数 | 描述 |
+-----------------+------------------------------------------------+
| -h, --help | 显示帮助信息并退出 |
+-----------------+------------------------------------------------+
| --version {1,2} | - 设置多页 Blob 版本。 |
| | - 版本 1禁用多页 Blob |
| | - 版本 2启用多页 Blob |
| | - 默认版本:版本 2。 |
+-----------------+------------------------------------------------+
| --outdir OUTDIR | 输出目录,用于存储创建的文件。(默认当前目录) |
+-----------------+------------------------------------------------+
运行如下命令创建 NVS 分区,该程序同时会提供 CSV 示例文件::
python nvs_partition_gen.py generate sample_singlepage_blob.csv sample.bin 0x3000
仅生成加密密钥
-----------------------
**使用方法**::
python nvs_partition_gen.py generate-key [-h] [--keyfile KEYFILE]
[--outdir OUTDIR]
**可选参数**
+-------------------+------------------------------------------------+
| 参数 | 描述 |
+-------------------+------------------------------------------------+
| -h, --help | 显示帮助信息并退出 |
+-------------------+------------------------------------------------+
| --keyfile KEYFILE | 加密密钥文件的输出路径 |
+-------------------+------------------------------------------------+
| --outdir OUTDIR | 输出目录,用于存储创建的文件。(默认当前目录) |
+-------------------+------------------------------------------------+
运行以下命令仅生成加密密钥::
python nvs_partition_gen.py generate-key
生成 NVS 加密分区
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**使用方法**::
python nvs_partition_gen.py encrypt [-h] [--version {1,2}] [--keygen]
[--keyfile KEYFILE] [--inputkey INPUTKEY]
[--outdir OUTDIR]
input output size
**位置参数**
+--------+--------------------------------------+
| 参数 | 描述 |
+--------+--------------------------------------+
| input | 待解析 CSV 文件的路径 |
+--------+--------------------------------------+
| output | NVS 二进制文件的输出路径 |
+--------+--------------------------------------+
| size | NVS 分区大小 |
| | (以字节为单位,且为 4096 的整数倍) |
+--------+--------------------------------------+
**可选参数**
+---------------------+------------------------------+
| 参数 | 描述 |
+---------------------+------------------------------+
| -h, --help | 显示帮助信息并退出 |
+---------------------+------------------------------+
| --version {1,2} | - 设置多页 Blob 版本。 |
| | - 版本 1禁用多页 Blob |
| | - 版本 2启用多页 Blob |
| | - 默认版本:版本 2。 |
+---------------------+------------------------------+
| --keygen | 生成 NVS 分区加密密钥 |
+---------------------+------------------------------+
| --keyfile KEYFILE | 密钥文件的输出路径 |
+---------------------+------------------------------+
| --inputkey INPUTKEY | 内含 NVS 分区加密密钥的文件 |
+---------------------+------------------------------+
| --outdir OUTDIR | 输出目录,用于存储创建的文件 |
| | (默认当前目录) |
+---------------------+------------------------------+
运行以下命令加密 NVS 分区,该程序同时会提供一个 CSV 示例文件。
- 通过 NVS 分区生成程序生成加密密钥来加密::
python nvs_partition_gen.py encrypt sample_singlepage_blob.csv sample_encr.bin 0x3000 --keygen
.. note:: 创建的加密密钥格式为 ``<outdir>/keys/keys-<timestamp>.bin``
- 通过 NVS 分区生成程序生成加密密钥,并将密钥存储于自定义的文件中::
python nvs_partition_gen.py encrypt sample_singlepage_blob.csv sample_encr.bin 0x3000 --keygen --keyfile sample_keys.bin
.. note:: 创建的加密密钥格式为 ``<outdir>/keys/keys-<timestamp>.bin``
.. note:: 加密密钥存储于新建文件的 ``keys/`` 目录下,与 NVS 密钥分区结构兼容。更多信息请参考 :ref:`nvs_key_partition`
- 将加密密钥用作二进制输入文件来进行加密::
python nvs_partition_gen.py encrypt sample_singlepage_blob.csv sample_encr.bin 0x3000 --inputkey sample_keys.bin
解密 NVS 分区
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**使用方法**::
python nvs_partition_gen.py decrypt [-h] [--outdir OUTDIR] input key output
**位置参数**
+--------+-------------------------------+
| 参数 | 描述 |
+--------+-------------------------------+
| input | 待解析的 NVS 加密分区文件路径 |
+--------+-------------------------------+
| key | 含有解密密钥的文件路径 |
+--------+-------------------------------+
| output | 已解密的二进制文件输出路径 |
+--------+-------------------------------+
**可选参数**
+-----------------+------------------------------+
| 参数 | 描述 |
+-----------------+------------------------------+
| -h, --help | 显示帮助信息并退出 |
+-----------------+------------------------------+
| --outdir OUTDIR | 输出目录,用于存储创建的文件 |
| | (默认当前目录) |
+-----------------+------------------------------+
运行以下命令解密已加密的 NVS 分区::
python nvs_partition_gen.py decrypt sample_encr.bin sample_keys.bin sample_decr.bin
您可以自定义格式版本号:
- 版本 1禁用多页 Blob
- 版本 2启用多页 Blob
版本 1禁用多页 Blob
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如需禁用多页 Blob请按照如下命令将版本参数设置为 1以此格式运行分区生成程序。该程序同时会提供一个 CSV 示例文件::
python nvs_partition_gen.py generate sample_singlepage_blob.csv sample.bin 0x3000 --version 1
版本 2启用多页 Blob
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如需启用多页 Blob请按照如下命令将版本参数设置为 2以此格式运行分区生成程序。该程序同时会提供一个 CSV 示例文件::
python nvs_partition_gen.py generate sample_multipage_blob.csv sample.bin 0x4000 --version 2
.. note:: NVS 分区最小为 0x3000 字节。
.. note:: 将二进制文件烧录至设备时,请确保与应用的 sdkconfig 设置一致。
说明
-------
- 分区生成程序不会对重复键进行检查,而将数据同时写入这两个重复键中。请注意不要使用同名的键;
- 新页面创建后前一页的空白处不会再写入数据。CSV 文件中的字段须按次序排列以优化内存;
- 暂不支持 64 位数据类型。

View file

@ -1,6 +1,8 @@
Wear Levelling API Wear Levelling API
================== ==================
:link_to_translation:`zh_CN:[中文]`
Overview Overview
-------- --------
Most of flash memory and especially SPI flash that is used in ESP32 has a sector-based organization and also has a limited number of erase/modification cycles per memory sector. The wear levelling component helps to distribute wear and tear among sectors more evenly without requiring any attention from the user. Most of flash memory and especially SPI flash that is used in ESP32 has a sector-based organization and also has a limited number of erase/modification cycles per memory sector. The wear levelling component helps to distribute wear and tear among sectors more evenly without requiring any attention from the user.

View file

@ -0,0 +1,47 @@
磨损均衡 API
==================
:link_to_translation:`en:[English]`
概述
--------
ESP32 所使用的 flash特别是 SPI flash 多数具备扇区结构,且每个扇区仅允许有限次数的擦除/修改操作。为了避免过度使用某一扇区,乐鑫提供了磨损均衡组件,无需用户介入即可帮助用户均衡各个扇区之间的磨损。
磨损均衡组件包含了通过分区组件对外部 SPI flash 进行数据读取、写入、擦除和存储器映射相关的 API 函数。磨损均衡组件还具有软件上更高级别的 API 函数,与 :doc:`FAT 文件系统 </api-reference/storage/fatfs>` 协同工作。
磨损均衡组件与 FAT 文件系统组件共用 FAT 文件系统的扇区,扇区大小为 4096 字节,是标准 flash 扇区的大小。在这种模式下,磨损均衡组件性能达到最佳,但需要在 RAM 中占用更多内存。
为了节省内存,磨损均衡组件还提供了另外两种模式,均使用 512 字节大小的扇区:
- **性能模式**:先将数据保存在 RAM 中,擦除扇区,然后将数据存储回 flash。如果设备在扇区擦写过程中突然断电则整个扇区4096 字节)数据将全部丢失。
- **安全模式**:数据先保存在 flash 中空余扇区,擦除扇区后,数据即存储回去。如果设备断电,上电后可立即恢复数据。
设备默认设置如下:
- 定义扇区大小为 512 字节
- 默认使用性能模式
您可以使用配置菜单更改设置。
磨损均衡组件不会将数据缓存在 RAM 中。写入和擦除函数直接修改 flash函数返回后flash 即完成修改。
磨损均衡访问 API
-----------------------------------
处理 flash 数据常用的 API 如下所示:
- ``wl_mount`` - 为指定分区挂载并初始化磨损均衡模块
- ``wl_unmount`` - 卸载分区并释放磨损均衡模块
- ``wl_erase_range`` - 擦除 flash 中指定的地址范围
- ``wl_write`` - 将数据写入分区
- ``wl_read`` - 从分区读取数据
- ``wl_size`` - 返回可用内存的大小(以字节为单位)
- ``wl_sector_size`` - 返回一个扇区的大小
请尽量避免直接使用原始磨损均衡函数,建议您使用文件系统特定的函数。
内存大小
-----------
内存大小是根据分区参数在磨损均衡模块中计算所得,由于模块使用 flash 部分扇区存储内部数据,因此计算所得内存大小有少许偏差。

View file

@ -1 +1 @@
.. include:: /../../tools/mass_mfg/docs/README.rst .. include:: /../../tools/mass_mfg/docs/README_CN.rst

View file

@ -1 +1 @@
.. include:: /../../components/nvs_flash/nvs_partition_generator/README.rst .. include:: /../../components/nvs_flash/nvs_partition_generator/README_CN.rst

View file

@ -1,4 +1,4 @@
.. include:: ../../../../components/wear_levelling/README.rst .. include:: ../../../../components/wear_levelling/README_CN.rst
另请参阅 另请参阅
----------- -----------
@ -31,3 +31,4 @@
----------------------- -----------------------
.. include:: /_build/inc/wear_levelling.inc .. include:: /_build/inc/wear_levelling.inc

View file

@ -1,6 +1,8 @@
Manufacturing Utility Manufacturing Utility
===================== =====================
:link_to_translation:`zh_CN:[中文]`
Introduction Introduction
------------ ------------

View file

@ -0,0 +1,256 @@
量产程序
=====================
:link_to_translation:`en:[English]`
介绍
------------
这一程序主要用于量产时为每一设备创建工厂 NVS非易失性存储器分区映像。NVS 分区映像由 CSV逗号分隔值文件生成文件中包含了用户提供的配置项及配置值。
注意,该程序仅创建用于量产的二进制映像,您需要使用以下工具将映像烧录到设备上:
- esptool.py
- Flash 下载工具(仅适用于 Windows
- 直接烧录程序
准备工作
-------------
**该程序需要用到分区公用程序。**
* 操作系统要求:
- Linux、MacOS 或 Windows标准版
* 安装依赖包:
- Python最低版本要求为 2.7。下载地址https://www.python.org/downloads/。
.. note::
使用该程序之前,请确保:
- Python 路径已添加到 PATH 环境变量中;
- 已经安装 `requirement.txt` 中的软件包,`requirement.txt` 在 esp-idf 根目录下。
具体流程
-----------
.. blockdiag::
blockdiag {
A [label = "CSV 配置文件"];
B [label = "主 CSV 文件"];
C [label = "二进制 bin 文件", stacked];
A -- B -> C
}
CSV 配置文件
----------------------
CSV 配置文件中包含设备待烧录的配置信息,定义了待烧录的配置项。例如定义 ``firmware_key`` (``key``) 的 ``type````data````encoding````hex2bin``
配置文件中数据格式如下(`REPEAT` 标签可选)::
name1,namespace, <-- 第一行为 "namespace" 条目
key1,type1,encoding1
key2,type2,encoding2,REPEAT
name2,namespace,
key3,type3,encoding3
key4,type4,encoding4
.. note:: 文件第一行应始终为 ``namespace`` 条目。
每行应包含三个参数:``key````type````encoding``,并以逗号分隔。如果有 ``REPEAT`` 标签,则主 CSV 文件中所有设备此键值均相同。
*有关各个参数的详细说明,请参阅 NVS 分区生成程序的 README 文件。*
CSV 配置文件示例如下::
app,namespace,
firmware_key,data,hex2bin
serial_no,data,string,REPEAT <-- "serial_no" 被标记为 "REPEAT"
device_no,data,i32
.. note::
请确保:
- 逗号 ',' 前后无空格;
- CSV 文件每行末尾无空格。
主 CSV 文件
---------------------
主 CSV 文件中包含设备待烧录的详细信息,文件中每行均对应一个设备实体。主 CSV 文件中的 ``key`` 应首先在 CSV 配置文件中定义。
主 CSV 文件的数据格式如下::
key1,key2,key3,.....
value1,value2,value3,.... <-- 对应一个设备实体
value4,value5,value6,.... <-- 对应一个设备实体
value7,value8,value9,.... <-- 对应一个设备实体
.. note:: 文件中键 (``key``) 名应始终置于文件首行。从配置文件中获取的键,在此文件中的排列顺序应与其在配置文件中的排列顺序相同。主 CSV 文件同时可以包含其它列(键),这些列将被视为元数据,而不会编译进最终二进制文件。
每行应包含相应键的键值 (``value``) ,并用逗号隔开。如果某键带有 ``REPEAT`` 标签,则仅需在第二行(即第一个条目)输入对应的值,后面其他行为空。
参数描述如下:
``value``
Data value
``value`` 是与键对应的键值。
主 CSV 文件示例如下::
id,firmware_key,serial_no,device_no
1,1a2b3c4d5e6faabb,A1,101 <-- 对应一个设备实体(在 CSV 配置文件中标记为 `REPEAT` 的键,除第一个条目外,其他均为空)
2,1a2b3c4d5e6fccdd,,102 <-- 对应一个设备实体
3,1a2b3c4d5e6feeff,,103 <-- 对应一个设备实体
.. note:: 如果出现 `REPEAT` 标签,则会在相同目录下生成一个新的主 CSV 文件用作主输入文件,并在每行为带有 `REPEAT` 标签的键插入键值。
量产程序还会创建中间 CSV 文件NVS 分区程序将使用此 CSV 文件作为输入,然后生成二进制文件。
中间 CSV 文件的格式如下::
key,type,encoding,value
key,namespace, ,
key1,type1,encoding1,value1
key2,type2,encoding2,value2
此步骤将为每一设备生成一个中间 CSV 文件。
运行量产程序
-------------------
**使用方法**::
python mfg_gen.py [-h] {generate,generate-key} ...
**可选参数**
+------+------------+----------------------+
| 序号 | 参数 | 描述 |
+------+------------+----------------------+
| 1 | -h, --help | 显示帮助信息并退出 |
+------+------------+----------------------+
**命令**
运行 mfg_gen.py {command} -h 查看更多帮助信息
+------+--------------+---------------+
| 序号 | 参数 | 描述 |
+------+--------------+---------------+
| 1 | generate | 生成 NVS 分区 |
+------+--------------+---------------+
| 2 | generate-key | 生成加密密钥 |
+------+--------------+---------------+
**为每个设备生成工厂映像(默认)**
**使用方法**::
python mfg_gen.py generate [-h] [--fileid FILEID] [--version {1,2}] [--keygen]
[--keyfile KEYFILE] [--inputkey INPUTKEY]
[--outdir OUTDIR]
conf values prefix size
**位置参数**
+--------+--------------------------------------------------+
| 参数 | 描述 |
+--------+--------------------------------------------------+
| conf | 待解析的 CSV 配置文件路径 |
+--------+--------------------------------------------------+
| values | 待解析的主 CSV 文件路径 |
+--------+--------------------------------------------------+
| prefix | 每个输出文件名前缀的唯一名称 |
+--------+--------------------------------------------------+
| size | NVS 分区大小(以字节为单位,且为 4096 的整数倍) |
+--------+--------------------------------------------------+
**可选参数**
+---------------------+--------------------------------------------------------------------------------+
| 参数 | 描述 |
+---------------------+--------------------------------------------------------------------------------+
| -h, --help | 显示帮助信息并退出 |
+---------------------+--------------------------------------------------------------------------------+
| --fileid FILEID | 每个文件名后缀的唯一文件标识符(主 CSV 文件中的任意键),默认为数值 1、2、3... |
+---------------------+--------------------------------------------------------------------------------+
| --version {1,2} | - 设置多页 Blob 版本。 |
| | - 版本 1 - 禁用多页 Blob |
| | - 版本 2 - 启用多页 Blob |
| | - 默认版本:版本 2 |
+---------------------+--------------------------------------------------------------------------------+
| --keygen | 生成 NVS 分区加密密钥 |
+---------------------+--------------------------------------------------------------------------------+
| --inputkey INPUTKEY | 内含 NVS 分区加密密钥的文件 |
+---------------------+--------------------------------------------------------------------------------+
| --outdir OUTDIR | 输出目录,用于存储创建的文件(默认当前目录) |
+---------------------+--------------------------------------------------------------------------------+
请运行以下命令为每个设备生成工厂映像,量产程序同时提供了一个 CSV 示例文件::
python mfg_gen.py generate samples/sample_config.csmples/sample_values_singlepage_blob.csv Sample 0x3000
主 CSV 文件应在 ``file`` 类型下设置一个相对路径,指向运行该程序的当前目录。
**为每个设备生成工厂加密映像**
运行以下命令为每一设备生成工厂加密映像,量产程序同时提供了一个 CSV 示例文件。
- 通过量产程序生成加密密钥来进行加密::
python mfg_gen.py generate samples/sample_config.csv samples/sample_values_singlepage_blob.csv Sample 0x3000 --keygen
.. note:: 创建的加密密钥格式为 ``<outdir>/keys/keys-<prefix>-<fileid>.bin``
.. note:: 加密密钥存储于新建文件的 ``keys/`` 目录下,与 NVS 密钥分区结构兼容。更多信息请参考 :ref:`nvs_key_partition`
- 提供加密密钥用作二进制输入文件来进行加密::
python mfg_gen.py generate samples/sample_config.csv samples/sample_values_singlepage_blob.csv Sample 0x3000 --inputkey keys/sample_keys.bin
**仅生成加密密钥**
**使用方法**::
python mfg_gen.py generate-key [-h] [--keyfile KEYFILE] [--outdir OUTDIR]
**可选参数:**
+-------------------+----------------------------------------------+
| 参数 | 描述 |
+-------------------+----------------------------------------------+
| -h, --help | 显示帮助信息并退出 |
+-------------------+----------------------------------------------+
| --keyfile KEYFILE | 加密密钥文件的输出路径 |
+-------------------+----------------------------------------------+
| --outdir OUTDIR | 输出目录,用于存储创建的文件(默认当前目录) |
+-------------------+----------------------------------------------+
运行以下命令仅生成加密密钥::
python mfg_gen.py generate-key
.. note:: 创建的加密密钥格式为 ``<outdir>/keys/keys-<timestamp>.bin``。时间戳格式为:``%m-%d_%H-%M``
.. note:: 如需自定义目标文件名,请使用 --keyfile 参数。
生成的加密密钥二进制文件还可以用于为每个设备的工厂映像加密。
``fileid`` 参数的默认值为 1、2、3...,与主 CSV 文件中的行一一对应,内含设备配置值。
运行量产程序时,将在指定的 ``outdir`` 目录下创建以下文件夹:
- ``bin/`` 存储生成的二进制文件
- ``csv/`` 存储生成的中间 CSV 文件
- ``keys/`` 存储加密密钥(创建工厂加密映像时会用到)