命令行上位机操作流程 ======================== 使用方法 --------- 打开本地命令窗口,路径切到工具可执行文件所在目录,windows 环境下输入:工具名 + 命令;linux 环境下输入:./工具名 + 命令。如打包固件: .. figur/assets/images/sdk/package.png :alt: package package 也可以不用切换到可执行文件所在目录,直接指定工具名的完整路径。 加载配置文件进行加密打包指令 ----------------------------- 打包配置文件各参数说明如下,其中除了 firmware_bin 的镜像文件支持路径外,frtdec_cfg 的 key,secure_info 的 iv、key、public_key、private_key 以及 rk 也支持文本路径。并且其路径为相对配置文件的相对路径。 |cfg_file_1| |cfg_file_2| |cfg_file_3| 命令 ~~~~~~ NSPackageTool package -f filepath -o outFileName - -f:后面指定配置文件的路径。 - filepath:配置文件的路径,可以是绝对路径也可以是相对路径,文件类型不做限制,内容格式如上图。 - -o:后面指定打包后的文件名称,存放路径与配置文件一致,不需要指定文件类型,默认是bin格式。 NSPackageTool package -f filepath -o outFileName -i binFilePath - -i:可重新指定被打包的固件文件 **注意**:命令的顺序不能随意调换顺序 使用举例 ~~~~~~~~~ - NSPackageTool package -f D:/NSTools_console/cfg.yaml -o package_printf - NSPackageTool package -f ../cfg.json -o package_printf - NSPackageTool package -f ./test/cfg.yaml -o package_printf - NSPackageTool package -f ../test/cfg.yaml -o package_printf -i ./printf.bin 打包不仅生成打包好的可执行二进制文件,还会生成用于烧写秘钥的 eFuse program 配置文件(文件类型为 yaml)。 **注意**:打包配置文件已在当前目录下时,不能直接用 -f XXX.yaml,而需用 -f ./XXX.yaml。 不对称密钥对生成 ----------------- 命令 ~~~~~~ NSPackageTool genkey -a signName -o filename.type - -a:algorithm后面指定签名算法,signName 可选 ed25519、sm2、rsa2048 和 rsa4096。 - -o:后面指定生成的文件名、类型及路径,类型支持 txt(hexstring)、pem 和 der。 **注意**:命令的顺序不能随意调换顺序。 使用举例 ~~~~~~~~~~ - NSPackageTool genkey -a ed25519 -o ed25519.txt 生成的公钥为./ed25519_public_key_gen.txt,私钥为./ed25519_private_key_gen.txt - NSPackageTool genkey -a sm2 -o ../keypairs/sm2.pem 生成的公钥为../keypairs/sm2_public_key_gen.pem,私钥为../keypairs/sm2_private_key_gen.pem 当前版本 ~~~~~~~~~ NSPackageTool -v 或 version DFU 下载 ---------- 获取UART可连接的COM端口 ~~~~~~~~~~~~~~~~~~~~~~~~ NSPackageTool dfu -i uart -l - -i:指定 DFU 通信接口,目前只支持串口。 - -l:list,列出所有端口。 **注意**:命令的顺序不能随意调换顺序。 Flash擦写 ~~~~~~~~~~ NSPackageTool dfu -i uart -c/-hc COMx -cmd erase -addr 0x70000000 -sector 4096*n - -i:指定 DFU 通信接口,目前只支持串口。 - -c:connect,串口连接之后发送擦写指令(前提是上一个指令已经发送 handshake 指令),后面接端口名。 - -hc:connect & send handshake 指令,之后再发送擦写指令,用于复位后进入 DFU 模式初次握手连接,后面接端口名。 - -cmd:后面接 DFU 指令。 - -addr:指定起始地址。 - -sector:指定擦除多少扇区,格式必须为 4096*n。 **注意**:命令的顺序不能随意调换顺序。 Flash烧写 ~~~~~~~~~~ NSPackageTool dfu -i uart -c/-hc COMx -f ./printf.bin -cmd program -addr 0x70000000 -sector 2048 - -i:指定 DFU 通信接口,目前只支持串口。 - -c:connect,串口连接之后发送烧写指令,后面接端口名。 - -hc:connect & send handshake 指令,之后再发送烧写指令,用于复位后进入 DFU 模式初次握手连接,后面接端口名。 - -f:后面接可执行二进制文件路径。 - -cmd:后面接 DFU 指令。 - -addr:指定起始地址。 - -sector:指定每次烧写块大小,支持1024、2048和4096。 **注意**:命令的顺序不能随意调换顺序。 Sram模式烧写 ~~~~~~~~~~~~~ NSPackageTool dfu -i uart -c/-hc COMx -f ./sram.bin -cmd sram -addr 0x08000000 -sector 4096 - -i:指定 DFU 通信接口,目前只支持串口。 - -c:connect,串口连接之后发送烧写指令,后面接端口名。 - -hc:connect & send handshake 指令,之后再发送烧写指令,用于复位后进入 DFU 模式初次握手连接,后面接端口名。 - -f:后面接可执行二进制文件路径。 - -cmd:后面接 DFU 指令。 - -addr:指定起始地址。 - -sector:指定每次烧写块大小,支持 1024、2048 和 4096。 **注意**:命令的顺序不能随意调换顺序。 Boot启动 ~~~~~~~~~~ 一般sram模式烧写完可执行文件后,进行跳转执行。 NSPackageTool dfu -i uart -c/-hc COMx -cmd boot -addr 0x08000000 - -i:指定 DFU 通信接口,目前只支持串口。 - -c:connect,串口连接之后发送烧写指令,后面接端口名。 - -hc:connect & send handshake 指令,之后再发送烧写指令,用于复位后进入 DFU 模式初次握手连接,后面接端口名。 - -cmd:后面接 DFU 指令。 - -addr:指定跳转地址。 **注意**:命令的顺序不能随意调换顺序。 eFuse Program Write ~~~~~~~~~~~~~~~~~~~~~~ 加载 efuse Program 配置文件批量烧写。 NSPackageTool dfu -i uart -c/-hc COMx -f ./efuse.yaml -cmd efuse - -i:指定 DFU 通信接口,目前只支持串口。 - -c:connect,串口连接之后发送烧写指令,后面接端口名。 - -hc:connect & send handshake 指令,之后再发送烧写指令,用于复位后进入 DFU 模式初次握手连接,后面接端口名。 - -f:后面指令配置文件,格式为 yaml。 - -cmd:后面接 DFU 指令。 **注意**:命令的顺序不能随意调换顺序。 efuse program配置文件内容格式如下: .. figur/assets/images/sdk/efuse_command.png :alt: efuse_command efuse_command eFuse write Single Word ~~~~~~~~~~~~~~~~~~~~~~~~~~~ eFuse 单word写入。 NSPackageTool dfu -i uart -c/-hc COMx -cmd efuse -index 128 -val 0x1 - -i:指定 DFU 通信接口,目前只支持串口。 - -c:connect,串口连接之后发送烧写指令,后面接端口名。 - -hc:connect & send handshake 指令,之后再发送烧写指令,用于复位后进入 DFU 模式初次握手连接,后面接端口名。 - -cmd:后面接 DFU 指令。 - -index:指定eFuse map中的eFuse word index。 - -val:要写入的值。 **注意**:命令的顺序不能随意调换顺序。 多镜像打包及下载 ----------------- 打包命令 ~~~~~~~~~~~ NSPackageTool package -i file1path -addr address1 -i file2path -addr address2 … -o outFileName - -i:后面指定镜像文件的路径。 - file1path:配置文件的路径,可以是绝对路径也可以是相对路径,文件类型格式不做要求。 - -addr:后面指定镜像文件的下载地址。 - -o:后面指定打包后的文件名称,存放路径与配置文件一致,文件类型默认是 bin 格式。 **注意**:命令的顺序不能随意调换顺序。 使用举例 ~~~~~~~~~~~ NSPackageTool package -i ./fm1.bin -addr 0xa0000000 -i fm2.bin -addr 0xa0004000 -o pck2fm 下载 ~~~~~~~ 命令与4.3节一样,不同的是命令指定的下载地址不起作用。 附录:错误代码查找表 ---------------------- +------------+-------------------------------------------------------------------------------------------+ | 错误代码 | 说明 | +============+===========================================================================================+ | 0x10300000 | ED25519密钥问题:长度不对、不合法等。检查下对称密钥是否与所选算法一致,以及是否被篡改过等 | +------------+-------------------------------------------------------------------------------------------+ | 0x10300001 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300002 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300003 | | +------------+-------------------------------------------------------------------------------------------+ | | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300030 | SM2密钥问题:长度不对、不合法等。检查下对称密钥是否与所选算法一致,以及是否被篡改过等 | +------------+-------------------------------------------------------------------------------------------+ | 0x10300031 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300032 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300033 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300034 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300035 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300036 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300037 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300038 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300039 | | +------------+-------------------------------------------------------------------------------------------+ | 0x1030003a | | +------------+-------------------------------------------------------------------------------------------+ | 0x1030003b | | +------------+-------------------------------------------------------------------------------------------+ | 0x1030003c | | +------------+-------------------------------------------------------------------------------------------+ | | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300050 | RSA密钥问题:长度不对、不合法等。检查下对称密钥是否与所选算法一致,以及是否被篡改过等 | +------------+-------------------------------------------------------------------------------------------+ | 0x10300051 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300052 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300053 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300054 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300055 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300056 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300057 | | +------------+-------------------------------------------------------------------------------------------+ | | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300070 | 加密问题,先排除密钥,IV等值的配置是否有异常。 | +------------+-------------------------------------------------------------------------------------------+ | 0x10300071 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300072 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300073 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300074 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300075 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300076 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300077 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300078 | | +------------+-------------------------------------------------------------------------------------------+ | 0x10300079 | | +------------+-------------------------------------------------------------------------------------------+ | 0x1030007a | | +------------+-------------------------------------------------------------------------------------------+ | 0x1030007b | | +------------+-------------------------------------------------------------------------------------------+ | | | +------------+-------------------------------------------------------------------------------------------+ | 0x1030007c | hash digest计算问题,先检查排除参数配置问题。 | +------------+-------------------------------------------------------------------------------------------+ | 0x1030007d | | +------------+-------------------------------------------------------------------------------------------+ | 0x1030007e | | +------------+-------------------------------------------------------------------------------------------+ .. |cfg_file_1| image:: /assets/images/sdk/cfg1.png .. |cfg_file_2| image:: /assets/images/sdk/cfg2.png .. |cfg_file_3| image:: /assets/images/sdk/cfg2.png