HPM Manufacturing Tool 是 HPMicro 公司推出的配置及批量烧写工具,旨在帮助企业用户快速批量的对HPMicro公司推出的芯片进行镜像配置及烧写。该工具主推 GUI 用户界面交互模式,该模式包含了烧写工具(HPMicro Programmer)及由烧写工具导出的量产包工具(HPMicro Manufacturing Util)两个入口。同时该工具也支持命令行烧写模式。下面分别对这几种操作模式进行介绍。
HPM Manufacturing Tool 首次启动加载主界面为烧写工具(HPMicro Programmer),该工具主要帮助用户进行烧写镜像、编辑镜像、烧写OTP以及量产命令配置等操作。主界面如下图所示:
该界面当前版本主要包含以下几部分,菜单栏,活动窗口和主窗口。菜单栏中视图菜单可以控制活动窗口的显示状态,帮助菜单包含用户手册,语言切换等功能。主界面主要包含对芯片的烧写以及配置操作,如镜像烧写、OTP读写、量产烧写等功能。后续将分别进行介绍。
HPM Programmer工具打开后主界面默认是未使能状态,需要先在设备窗口连接设备。该工具支持USB-HID和串口两种连接方式。连接好开发板后,用户需要手动选择芯片以及设备类型,随后工具会自动检测已插入设备,点击连接按钮进行连接。连接成功如下图所示:
连接成功后,便可以进行镜像烧写、OTP读写及量产命令设置等操作了。
自 v0.5.0 版本之后,工具在使用 USB-HID 连接时,支持了自定义修改 vid,pid 的功能。该功能要求您先在 OTP 第 68 字将要指定的 vid 和 pid 写入 OTP,这样在设备连接时,就会检测到编辑后的 vid 和 pid。以 HPM5E00 为例,首先以默认的 USB-HID 配置连接设备,此时,vid 为 0x34b7,pid 为 0x0008。连接成功后,点击 OTP 操作页,在写视图中写入 68 字的值 0x12345678,指定 vid 为 0x1234,pid 为 0x5678。点击写入后,刷新 OTP 读视图值,确保数据已写入,如下图所示:
写入成功后,断开工具连接,reset设备,此时可以发现修改参数之后的设备已经被检测到,但由于 vid 和 pid 和默认配置不匹配,无法自动选取到设备列表中,如下图所示:
此时需要编辑工具设备窗口的 vid 和 pid 值,首选确保设备窗口中芯片类型与修改 OTP 前设备保持一致,然后点击下方编辑按钮,将 vid 和 pid 修改为自定义的值后点击新增。设备列表中会新增一个芯片类型,并默认选择。此时应该能检测到设备,点击连接后正常连接,如下图所示:
新增的芯片类型支持删除,您可以在断开设备连接后,在芯片下拉框中直接删除自定义 vid,pid 的芯片,也可以选择了要删除的芯片后,点击下方的删除按钮,如下图所示:
sudo ./hpm_manufacutring_gui
su - 命令切换账号,因为 su 命令默认会加载环境变量,这样有可能导致桌面环境变量错误因而无法正常打开工具。想要通过非 root 用户连接设备,参考下面两种方案。
cd /etc/udev/rules.d
sudo vim 71-hpmicro.usbhid.rules
数字71代表优先级,数字越大优先级越高。该值建议参考 rules.d 目录下其他文件。
SUBSYSTEMS=="usb", ATTRS{idVendor}=="34b7",MODE="0666",GROUP="${group}"
其中${group}修改为当前用户组名称
sudo service udev reload
sudo service udev restart
镜像烧写功能可以支持HPMicro自研芯片的启动镜像烧写以及用户自定义数据的烧写。
对于启动镜像,目前根据 SoC 类型主要分为 FLASH 镜像以及 EMMC 镜像,现分别介绍如下:
在烧写之前,用户需要也需要选择Flash配置信息告诉SoC当前Flash配置状态。Flash Words配置可以参考 HPM SDK下 boards.c文件开头注释,相关内容如下所示:
/**
* @brief FLASH configuration option definitions:
* option[0]:
* [31:16] 0xfcf9 - FLASH configuration option tag
* [15:4] 0 - Reserved
* [3:0] option words (exclude option[0])
* option[1]:
* [31:28] Flash probe type
* 0 - SFDP SDR / 1 - SFDP DDR
* 2 - 1-4-4 Read (0xEB, 24-bit address) / 3 - 1-2-2 Read(0xBB, 24-bit address)
* 4 - HyperFLASH 1.8V / 5 - HyperFLASH 3V
* 6 - OctaBus DDR (SPI -> OPI DDR)
* 8 - Xccela DDR (SPI -> OPI DDR)
* 10 - EcoXiP DDR (SPI -> OPI DDR)
* [27:24] Command Pads after Power-on Reset
* 0 - SPI / 1 - DPI / 2 - QPI / 3 - OPI
* [23:20] Command Pads after Configuring FLASH
* 0 - SPI / 1 - DPI / 2 - QPI / 3 - OPI
* [19:16] Quad Enable Sequence (for the device support SFDP 1.0 only)
* 0 - Not needed
* 1 - QE bit is at bit 6 in Status Register 1
* 2 - QE bit is at bit1 in Status Register 2
* 3 - QE bit is at bit7 in Status Register 2
* 4 - QE bit is at bit1 in Status Register 2 and should be programmed by 0x31
* [15:8] Dummy cycles
* 0 - Auto-probed / detected / default value
* Others - User specified value, for DDR read, the dummy cycles should be 2 * cycles on FLASH datasheet
* [7:4] Misc.
* 0 - Not used
* 1 - SPI mode
* 2 - Internal loopback
* 3 - External DQS
* [3:0] Frequency option
* 1 - 30MHz / 2 - 50MHz / 3 - 66MHz / 4 - 80MHz / 5 - 100MHz / 6 - 120MHz / 7 - 133MHz / 8 - 166MHz
*
* option[2] (Effective only if the bit[3:0] in option[0] > 1)
* [31:20] Reserved
* [19:16] IO voltage
* 0 - 3V / 1 - 1.8V
* [15:12] Pin group
* 0 - 1st group / 1 - 2nd group
* [11:8] Connection selection
* 0 - CA_CS0 / 1 - CB_CS0 / 2 - CA_CS0 + CB_CS0 (Two FLASH connected to CA and CB respectively)
* [7:0] Drive Strength
* 0 - Default value
* option[3] (Effective only if the bit[3:0] in option[0] > 2, required only for the QSPI NOR FLASH that not supports
* JESD216)
* [31:16] reserved
* [15:12] Sector Erase Command Option, not required here
* [11:8] Sector Size Option, not required here
* [7:0] Flash Size Option
* 0 - 4MB / 1 - 8MB / 2 - 16MB
*/
用户可以将RAM镜像经过编辑后烧写到 EMMC 中。选择 RAM 镜像后,用户需要先点击编辑按钮进行镜像编辑,然后选择 RAM 镜像添加固件容器头,生成新镜像文件(具体请参考镜像编辑章节)。选择新镜像后,用户需要先选择EMMC的内存类型,以 HPM6800 为例,内存类型可以切换到 SDXC0 或 SDXC1。切换后,烧写地址将更改为 Sector 索引并自动填充索引值。同时,自定义内存配置将改为 自定义 EMMC 配置选项。与 FLASH Option 信息不同,EMMC 配置信息 Option[0] 以 0xeccf9 开头,整体配置如下图所示:
配置完成之后点击镜像烧写任务栏的烧写按钮,会直接对当前镜像进行烧写。如下图所示,动画结束表示烧写完成。
自 v0.6.0 版本后,工具新增了快速校验烧写内容的功能,该功能需加载 v0.6.0 版本固件后方可使用。在设备正常连接并加载固件后,在镜像烧写标签页的烧写按钮旁边会有一个下拉按钮(如固件未正常加载该按钮会被置灰),点击后可以选择“烧写并校验”功能。如下图所示:
选择 “烧写并校验” 选项后,按钮文案会同步为 “烧写并校验”,点击后工具会先执行烧写操作,烧写完毕后工具会使用校验命令校验内存中的烧写内容与文件是否一致,如果一致会看到 “Verify checksum success” 的日志提示,如下图所示:
注意:右边同步到按钮的功能与 “烧写” 按钮功能保持一致,如果当前选择了 “烧写并校验” 选项,点击同步到之后,量产命令列表中也会在最后加入校验命令。
当前工具提供了对OTP进行读写的功能,第一次打开OTP标签页,工具会自动读取当前芯片可读的OTP字,可以通过表格右侧下拉框修改展示的列数,点击刷新按钮会重新获取可读OTP字的值,如下图所示:
当鼠标悬浮到某个字上时,会显示当前字的十六进制以及二进制表达,同时会显示当前字的一些关键字段,如下图所示:
切换到写视图,工具提供了两种添加OTP字的方式:
当添加完毕后,点击OTP标签页工具栏右侧的写入按钮,便可以修改已编辑的OTP字。
您也可以直接导入一个 csv 或 txt 格式的配置文件直接加载配置文件中的OTP数据。该配置文件格式与读视图中导出的配置文件保持一致,以 “word,value” 开头,代表每行两个值的意义,如下所示:
导入过程会自动过滤掉值不存在的字以及值为 0 的值,导入成功后如下图所示:
自 v0.6.0 版本后,工具新增了内存视图标签页,方便用户对当前连接设备的 FLASH/eMMC 等内存数据进行查看、校验以及擦除等。整体界面如下图所示:
内存下拉框中会自动加载当前设备支持的 FLASH/eMMC 并显示其对应的起始地址,如上图中,HPM5300 系列的 XPI0 的地址 0x80000000 已自动填入。
内存视图当前支持读取指定内存数据,比较数据以及擦除三个主要功能。但在使用前均需要对 FLASH/eMMC 进行配置,当工具检测到 ROM 未配置当前数据时,会先弹框提示配置 FLASH/eMMC 后,当配置成功后,再继续执行选择的命令,如下图所示:
下面分别介绍内存视图的主要功能。
内存视图支持读取指定开始地址以及指定长度的内存数据。使用读取功能时,长度参数需要手动进行填写,填写后点击读取按钮,未配置内存时会先弹出配置对话框。配置完毕后便会将读取内容显示到界面上,如下图所示:
读取的内容会按照偏移地址进行显示,每行16个字节,分为左右两部分,左边为具体地址的十六进制值,右面对应位置为该值对应的 ASCII 码。
内存视图支持比较某个镜像文件与内存中某个内存区域数据是否一致。工具此处提供了两种比较方式,一种为普通的镜像比较,即通过直接读取内存数据逐字节进行比较。同时也提供了快速校验方式,该方式会直接计算文件的校验和,与对应内存区域的校验和直接进行比较(该方式在正常加载固件后方可使用)。
两个比较方式各有特点:
注意:
下面是采用镜像比较的方法比对了一份不匹配数据的执行结果,可以看到,在内存视图中会标识处错误的地址以及在日志中会显示错误值。如下图所示:
您可以点击擦除按钮来对当前内存区域进行区域擦除或整片擦除。您需要通过下拉按钮先来选择擦除的方式。区域擦除即会对输入的地址以及长度进行指定擦除。整片擦除将会擦除整块内存数据,因此当选择整块擦除时,地址以及长度参数可以忽略。
下图为执行区域擦除后的结果:
批量烧写功能为高级功能,主要为量产工具提供烧写命令。
自 v0.6.0 版本后,工具新增了 verify-checksum 命令来校验内存数据,该功能需要在固件正常加载后才可使用。
该命令有两个入口:
在命令配置对话框中选择 verify-checksum 命令,然后配置即可。需要输入想要验证的地址,同时支持十六进制数组以及文件两种数据输入方式,如下图所示:
您也可以在配置 write-memory 命令时勾选“写完数据后验证 checksum” 复选框,这样在执行完 write-memory 命令后工具会自动执行 verify-checksum 命令对当前写入的命令进行校验,如下图所示:
命令添加后效果如下图所示:
自 v0.6.0 版本后,新增了烧写固定文件夹下单个镜像功能。通过该功能,你可以在 write-memory 命令中选择一个指定的文件夹,工具会遍历该文件夹目录下所有镜像文件并显示(子目录不遍历)。您在烧写时可以随时切换该目录下的镜像文件进行烧写,避免了想要快速切换文件时需要手动编辑 write-memory 的问题。
您需要现在 write-memory 命令中选择一个固定文件夹,如下图所示:
确定选择后,命令列表中便会显示该文件夹以及该文件夹下对应的镜像,如下图所示:
在烧写前您需要先选定要烧写的镜像,每次烧写前均可动态切换。
工具支持将整个当前工具配置进行导出,开发模式下也支持导入别人导出的无锁配置文件。导入导出按钮入口如下图所示:
导出支持两种模式,一种是无锁配置,该类型配置文件在开发模式和量产模式均可导入,方便开发人员进行配置保存及测试。锁定配置仅支持在量产模式进行导入,锁定配置详细信息请参考下一节。
开发模式下导入配置仅可导入无锁配置文件,导入锁定配置文件会提示错误。
自 v0.6.0 版本后,工具提供了两种类型的导入文件类型:
注意:v0.6.0 版本后导出配置仅支持 HPMARC 后缀文件,该配置文件在 v0.6.0 及以上版本可用。
考虑到烧写工具与量产工具数据的一致性,烧写工具和量产工具会公用同一份配置文件,这就导致配置文件存在数据泄露的危险。因此该版本工具提供了锁定配置的功能,当配置锁定后,配置文件会写入加密字段,只允许当前配置文件在量产工具中打开,如果强行在烧写工具中打开便会清空文件。锁定配置的入口在菜单栏配置下拉菜单中,有个导出菜单,点击后选择导出锁定配置,选择保存路径后,会将当前配置导出一份新的加锁的配置文件,只需要在量产工具中直接导入该配置文件即可,如下图所示:
当配置完成后,您可以生成可控的量产包进行量产烧写,点击右上角的导出量产包按钮,会弹出配置量产包的对话框,如下图所示:
其中,量产包名和生成量产包路径是必填项,填写这两项之后就可以生成量产包,您也可以对量产包进行控制,如设置该包可以烧写的最大次数,当烧写到达最大次数后,无法进行烧写,您也可以设置量产包的解压密码,设置后需要密码才能解压正常使用,配置好后,点击确定等待量产包打包,如下图所示:
量产包生成完毕后便可以正常使用量产工具了。
解压量产包后,双击打开 hpm_manufacturing_gui
程序便可以使用量产工具。量产工具的主要作用是使用量产命令列表中配置的命令批量烧写插入的设备,使用量产工具之前需要先在烧写工具(HPMicro
Programmer)量产命令列表中进行配置。量产工具仅支持导入配置、开始烧写和停止烧写等操作。
量产工具主体分为上下两部分。上半部分包括烧写设备信息和开始烧写按钮(首次加载是置灰状态)。下半部分包括USB和串口两个标签页及其对应设备列表。其中,USB列表支持设备自动插拔检测,串口设备需要手动添加后才支持烧写。
如果量产工具未能读取到烧写命令,开始烧写按钮是置灰无法点击状态,如下图所示:
用户可以点击右上角导入配置按钮,导入一个新的配置文件,导入后程序会自动检测该文件内烧写序列的有效性,当检测成功后烧写按钮为绿色,是可烧写状态。如下图所示:
点击 START后软件便进入烧写状态,此时只要插入USB设备便会自动进行烧写,手动添加的串口设备也会自动进行烧写,点击
STOP按钮会停止自动烧写,但是USB设备仍然会自动检测插拔状态。如下图所示:
在量产工具界面,用户可以通过右上角 导入配置 按钮导入其他用户烧写工具的配置。
自 v0.6.0 版本后,工具支持了 HPMARC 后缀格式的完整配置导出,您可以在此处导入 HPMARC 后缀的配置然后直接进行烧写。
如果导入了 HPMMFG
后缀的文件,如果用户配置了烧写镜像的命令,默认情况下,镜像路径为绝对路径,如果导入后绝对路径失效工具会进行提示。为了防止该问题,量产工具支持镜像相对路径烧写。用户只要将镜像文件放到软件目录下(软件根目录或者子目录中),便会自动将镜像识别为相对路径,这样只要将镜像拷贝到量产工具相对应目录下便可正常烧写。在
v0.5.0 及以上版本,工具支持直接构建量产压缩包,更方便使用。优先建议您使用量产压缩包功能,或直接导入 HPMARC 后缀的配置文件。
为了用户使用方便,在量产工具中使用串口设备进行烧写时,当手动添加了某个串口连接后,后续再连接的设备如果是相同的串口号,那将会自动连接,不需要手动添加配置,以此提高烧写效率。用户可以通过右上角的帮助菜单中的设置功能将此功能关闭,如下图所示:
为了增强以及扩展 ROM 的功能,HPM Manufacturing Tool 自 0.3.2 版本后,增加了 ROM 固件自动安装功能。对于烧写工具和量产工具两种模式,该固件都会在设备连接时通过
Load image 命令自动下载到 RAM 后默认开启。固件存放地址为软件根目录 bl_fw 目录,按照 SoC 进行分类,分为签名固件和非签名固件。固件命名格式为
${socName}_blfw_[unsigned|signed].bin。想要在连接时取消固件自动加载功能,用户可以手动修改固件名称使其无法被程序定位。该功能有以下几点需要注意:
Load image 命令进行加载的,加载了固件后,Load image命令无法再正常使用; HPM Manufacturing Tool同时支持命令行模式,在命令行模式下,输入 hpm_manufacturing_cmd.exe -h便可查看命令行支持的参数,其中
-p 代表串口,后面跟串口名,如 -p COM1,如果只有单个设备连接,可以省略串口名,直接 -p。-u 代表USB,后面跟USB设备的vid和pid,如 -u 0x34B7,0x0001,如果只有单个设备连接,可以省略 vid 和 pid,直接
-p。
-r 代表运行,后面跟要执行的烧写命令。-t 代表命令超时时间,单位为毫秒,默认值为10000(10秒)。-f 代表烧写前先加载bootloader firmware, 参数为 <芯片名称>,<0,1> 或 <固件路径>, 0
代表非签名固件,1 为签名固件。注意:固件加载成功后,设备会自动重新上电,同时 load-image 命令后续可能无法正常使用。-i 代表镜像编辑命令,设置该参数后除了-r设置命令参数有效,其余参数均无效。当前支持的配置命令为
-r "create-image <json_file_path>",其中 json_file_path 为镜像编辑助手生成的配置文件路径。
当前支持的烧写命令如下所示:
-- query-rte <id> [<param>]
id = 0, ROM features, param is not required
id = 4, Memory properties
- param: 0 - ILM / 1 - DLM
0x10000 - XPI0 NOR / 0x10001 - XPI1 NOR / 0x20000 - OTP
0x30000 - SDXC0 / 0x30001 - SDXC1
id = 5, Supported command list
-- config-memory <memory_id> <config address>
memory_id: 0x10000 - XPI0 NOR / 0x10001 - XPI1 NOR
0x30000 - SDXC0 / 0x30001 - SDXC1
-- write-memory <memory_id> <address/sector-index for eMMC> [[four-byte hexadecimal array]]/<file path>
- memory_id: 0 - ILM / 1 - DLM
0x10000 - XPI0 NOR / 0x10001 - XPI1 NOR
0x20000 - OTP
0x30000 - SDXC0 / 0x30001 - SDXC1
-- read-memory <memory_id> <address/sector-index for eMMC> <byte length> [file path]
- memory_id: 0 - ILM / 1 - DLM
0x10000 - XPI0 NOR / 0x10001 - XPI1 NOR
0x20000 - OTP
0x30000 - SDXC0 / 0x30001 - SDXC1
-- verify-checksum <memory_id> <address/sector-index for eMMC> [[four-byte hexadecimal array]]/<file path>
- memory_id: 0 - ILM / 1 - DLM
0x10000 - XPI0 NOR / 0x10001 - XPI1 NOR
0x30000 - SDXC0 / 0x30001 - SDXC1
-- erase-region <memory_id> <address/sector-index for eMMC> <byte length>
- memory_id: 0x10000 - XPI0 NOR / 0x10001 - XPI1 NOR
-- erase-chip <memory_id>
- memory_id: 0x10000 - XPI0 NOR / 0x10001 - XPI1 NOR
-- load-image <image path>
-- load-blfw <soc_type> <isSigned>
- soc_type: SoC Serial Name such as HPM6700/HPM6400, HPM6300, HPM6200, HPM5300, HPM6800
- isSigned: 0 - unsigned / 1 - signed.
- note: load-blfw is a wrapper for load-image boot loader firmware. So using these two commands at the same time could cause an error.
- note: The device will be reset automatically if firmware loads success.
-- reset [<reset_type>], default reset_type is 0
0 - Default reset / 1 - Hot reset / 2 - Cold reset;
-- create-image <path>
- path: the configuration file of hpm_image_helper in the root directory such as imageutil.json.
烧写样例如下:
"Windows 平台:用 'hpm_manufacturing_cmd.exe' 的路径来替换 ${hpm_manufacturing_cmd}。对于 USB 设备,当使用
PowerShell 运行命令时,需要使用双引号表示设备名称。"
"Linux 平台:使用 sudo ./hpm_manufacturing_cmd 替换 ${hpm_manufacturing_cmd}, 想要正常连接USB
或串口设备,sudo 提权是有必要的。
${hpm_manufacturing_cmd} -p COM11 -r "load-image boot_image.bin" (Windows)
${hpm_manufacturing_cmd} -p /dev/ttyUSB0 -r "load-image boot-image.bin" (Linux/MacOSX)
${hpm_manufacturing_cmd} -u "0x34b7,0x0001" -r "load-image boot_image.bin"
${hpm_manufacturing_cmd} -u "0x34b7,0x0001" -r "query-rte 0"
${hpm_manufacturing_cmd} -u "\\?\HID#VID_34B7&PID_0001#6&289dd98c&2&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}" -r "query-rte 0"
如果只有单个设备连接,设备名称可以忽略:
${hpm_manufacturing_cmd} -p -r "load-image boot_image.bin" (Windows)
${hpm_manufacturing_cmd} -u -r "query-rte 0"
典型烧写序列如下:
${hpm_manufacturing_cmd} -u "0x34b7,0x0001" -r "write-memory 0x0 0x200 [[0xfcf90001,0x05,0x0,0x0]]"
${hpm_manufacturing_cmd} -u "0x34b7,0x0001" -r "config-memory 0x10000 0x200"
${hpm_manufacturing_cmd} -u "0x34b7,0x0001" -r "write-memory 0x10000 0x80000400 flash_xip.bin"
同时命令也支持连续烧写,如下所示:
${hpm_manufacturing_cmd} -u "0x34b7,0x0001" -r "write-memory 0x0 0x200 [[0xfcf90001,0x05,0x0,0x0]]" -r "config-memory 0x10000 0x200" -r "write-memory 0x10000 0x80000400 flash_xip.bin"
典型的固件加载烧写序列:
${hpm_manufacturing_cmd} -p -r "load-blfw HPM6200 0"
${hpm_manufacturing_cmd} -p -f "HPM6200,0" -r "query-rte 0"
典型的镜像编辑序列命令:(imageUtil.json 是由 hpm_image_helper 在生成镜像时保留的配置文件)
${hpm_manufacturing_cmd} -i -r "create-image imageUtil.json"
镜像编辑助手作为独立的应用程序进行分发,您可以直接双击安装目录下的hpm_image_helper程序直接运行镜像助手程序,也可以通过烧写工具进行内部拉起打开。烧写工具内部有两个入口:
视图菜单栏下点击镜像编辑窗口菜单进行打开;编辑按钮,点击后可以拉起镜像编辑助手对当前选择的镜像文件进行编辑。镜像助手在加载时需要获取具体芯片型号信息,换句话说,烧写工具只有在连接设备成功后,才能拉起镜像助手。镜像助手的运行界面如下图所示:
镜像助手当前支持 FLASH、RAM、自定义数据三种类型的镜像,左侧显示的是当前选择镜像的布局以及标识了每个是否是必选项。助手右侧为配置界面,从上往下按模块进行配置,每个模块右上角都有提示按钮,鼠标悬浮到提示按钮会提示当前模块的一些配置信息。整体主要分为以下几个模块:
选择您想要生成的镜像类型,默认为 FLASH 类型,不同镜像类型会对后面的模块产生不同的限制,因此您需要确保首先勾选此项目。
该工具当前支持编辑可执行固件以及命令容器固件两种固件类型,您需要根据您自己的需求进行选择。
当选择完要生成的镜像类型以及固件类型选择可执行固件后,您就需要在此处选择想要编辑的固件,如果是从烧写工具镜像文件入口打开的镜像助手,那么此处会填写烧写工具中配置的镜像文件值。当固件地址更新后,会自动读取固件内容,如果判断当前固件类型是 FLASH 类型固件,会根据读取内容填入相关信息,如果判断为 RAM 类型的固件,则其它信息需要手动添加。具体可以参考助手工具右上角提示信息,整个固件选择部分如下图所示:
在单核启动场景中,只需要配置固件0即可。在双核启动场景中,固件0代表主核固件,固件1代表从核固件,由于固件1没有自动检测内容的逻辑,您需要手动配置固件1的信息。
当选择完要生成的镜像类型以及固件类型选择命令容器后,您可以将一批命令封装成镜像来执行。当前命令容器支持以下四种命令:
编辑效果如下图所示:
点击新建超级根证书按钮可以生成四个根证书,在对话框中勾选生成二级根证书复选框,可以生成二级证书并会自动填入根证书和二级证书信息,同时签名证书算法会与证书配置对话框中密钥超度的选择类型对应,如下图所示:
根证书生成路径是在工具根目录/tools/signing_tool/certs/。以生成时的时间戳为文件夹名称进行保存。文件夹内有 crts 和 keys
两个文件夹分别代表公钥和私钥。公钥会写入镜像中,私钥会对当前镜像进行签名以供后续 BootROM 进行验签。
在生成镜像时,工具会自动把 SRK HASH 值写入到日志窗口,如下图所示:
您可以复制这些值保存下来或者直接添加到 HPMicro Manufacturing Tool 中进行写入。当然工具提供了相当快捷的方式帮您完成以上操作:
详细镜像签名原理及流程可参考先楫知识库:HPMicro Manufacturing Tool 镜像安全启动配置及Bootloader固件同步签名流程
镜像助手也提供了 EXIP 加密逻辑,勾选加密复选框,便可以进行配置。如下图所示:
启用镜像加密功能后,我们便能看到各类配置,下面分别进行说明:
详细镜像加密原理及流程可参考先楫知识库:HPMicro Manufacturing Tool 镜像加密流程
选择镜像输出路径后,点击生成,便能生成新的镜像,您可以从日志窗口查看是否生成成功。
在 HPM_MFG_TOOL 工具中镜像烧写标签页选择一个 RAM 镜像,此时工具无法自动检测到镜像容器头,会提示去编辑,打开镜像编辑助手后,界面如下所示:
此处需要二次配置的地方有两处:
简单的 Load to RAM 镜像其它选项均可采用默认配置,然后添加一个生成镜像路径,点击生成即可。
当选中某个 FLASH 镜像进行编辑时,工具会从 FLASH 中获取到基本信息,如固件信息头,信息表,FLASH 配置等,您不需要再自行填写,如下所示:
您只需要勾选镜像签名复选框,然后便会弹出镜像编辑窗口,此时您可以输入已有的根证书路径,或者点击新建根证书,通过工具来生成根证书,根证书生成完毕后会自动填入根证书选项中,如下图所示:
SRK Index 为根证书索引,选择某个索引后镜像生成过程中会使用该索引对应的根证书进行签名及后续校验。
签名类型 选项与新建根证书对话框中的密钥长度类型保持一致,如果您使用的是新建根证书生成的密钥,该选项无需修改。
SRK HASH 需要写入 OTP 中供 BootROM 验签使用,您可以直接勾选
同步 SRK HASH OTP 字到 OTP 写视图复选框,这样工具在生成镜像时会自动将 SRK HASH 写入开发工具的 OTP
写视图,后续直接在开发工具烧写即可。未勾选后续则需要手动配置并烧写 SRK HASH 值到 OTP 后,签名才能正常使用。
如果 SoC 的 lifecycle 为 secure 模式,那么在 OTP 写入 SRK HASH 后,工具默认的未签名 bootloader 固件则无法正常使用,您需要用相同的证书对 bootloader
固件进行签名并放置到开发工具根目录 bl_fw 对应的 SoC 下。或者您直接勾选 同步签名 bootloader 固件,那么工具会自动为您完成以上流程。
最后添加一个生成镜像路径,点击生成即可完成镜像签名操作。
在烧写镜像到设备后,为了数据的安全性,防止镜像内容被直接读取,一般都会对镜像进行加密操作。当镜像被加密后,执行时设备需要先使用对应的密钥进行解密,然后再执行镜像程序。
当选中某个 FLASH 镜像进行加密时,与镜像签名一样,工具会从 FLASH 中获取到基本信息,如固件信息头,信息表,FLASH 配置等,您不需要再自行填写。
您只需要勾选镜像加密复选框,填入对应的信息即可。如下图所示:
KEK 为加密算法封包解包密钥,您可以点击右侧的随机按钮随机生成,也可以自己输入16字节十六进制数;
然后需要选择要加密的 FLASH 区域基地址 XPI0 NOR 或者 XPI1 NOR;
紧接着输入要加密的区域起始地址和范围(字节长度),工具当前支持加密四个区域。加密区域的地址和字节长度需要与 1KB 对齐。加密区域使用的两个参数 AES Key 和 Nonce 可按需添加,不填写时工具会在加密时随机生成;
镜像加密密钥以及其它 OTP 对应参数需要烧写到 OTP 后,加密流程才可以正常使用。此处强烈建议您保持勾选 同步 EXIP KEK OTP 字到 OTP 写视图复选框及子选项。由工具帮您完成
OTP 配置,后续镜像生成后,只需要在开发工具写视图写入对应 OTP 配置即可。
以上配置完成后,点击生成按钮,便可以生成一份加密镜像,同时会将对应的 OTP 所需信息拷贝到烧写工具 OTP 写视图待后续烧写;