文章中所使用的工具,请参考《nRF5x系列蓝牙模块DFU升级服务移植 -- 1 工具安装》说明。
2.1 micro_ecc_lib_nrf52.lib文件的生成
首先选中C:\MinGW\msys文件夹中的批处理执行文件msys.bat,点击打开,如下图所示:
在SDK中找到算法,如下图所示:
在打开的msys.bat文件框中的命令行输入指令cd /F/nRF5_SDK_15.0/external/micro-ecc/nrf52hf_keil/armgcc,然后回车执行指令,如下图所示:
继续输入指令make,然后回车,如下图所示:
生成的lib文件,可在F:\nRF5_SDK_15.0\external\micro-ecc\nrf52hf_keil\armgcc文件夹中找到,如下图所示:
备注:在make时候,如果提示文件找不到,如下图所示:
该处错误是因为没有发现GNU的路径,这里我们打开F:\nRF5_SDK_15.0\components\toolchain\gcc文件夹,找到Makefile.windows文件,使用记事本打开,修改GNU安装路径,如下图所示:
2.2 密钥的生成
在F盘新建一个命名为key的文件夹,在此处打开dos命令框(Shift+鼠标右键打开),在命令行中输入指令nrfutil.exe keys generate F:\key\private.key,回车执行指令,执行结果如下图所示:
打开F:\key文件夹,可以找到新生成的private.key文件,如下图所示:
然后使用该文件生成一个C文件,这里的文件分别是私钥(private.key)和公钥(public_key.c)。
备注:务必要保存好私钥private.key,以后每个新的image要升级时,都会先通过这个私钥对它进行签名,一旦private.key丢失或者被暴露,DFU将无法进行或者变得不安全。
在dos命令行中输入指令nrfutil keys display --key pk --format code F:\key\private.key --out_file F:\key\public_key.c,回车执行,结果如下图所示:
打开F:\key文件夹,可以找到新生成的public_key.c文件,如下图所示:
到此密钥已经完成生成,而这个公钥是后面boot工程所需要的,所以需要将public_key.c文件重命名为dfu_public_key.c,并替换F:\nRF5_SDK_15.0\examples\dfu中的dfu_public_key.c文件,如下图所示:
2.3 boot工程的hex生成
打开F:\nRF5_SDK_15.0\examples\dfu\secure_bootloader\pca10040_ble\arm5_no_packs文件夹下的keil工程,如下图所示:
如果之前的操作均完成且正确的话,编译该工程会提示0错误,并且在F:\nRF5_SDK_15.0\examples\dfu\secure_bootloader\pca10040_ble\arm5_no_packs\_build文件夹中生成nrf52832_xxaa_s132.hex文件,如下图所示:
把nrf52832_xxaa_s132.hex的文件名更改为boot.hex,放到之前新建的F:\key文件夹中,如下图所示:
2.4 应用程序的hex生成
这里使用SDK库自带的ble_app_buttonless_dfu用例工程进行hex文件生成步骤的说明。
打开F:\nRF5_SDK_15.0\examples\ble_peripheral\ble_app_buttonless_dfu\pca10040\s132\arm5_no_packs文件夹下的keil工程,如下图所示:
如果之前的操作均完成且正确的话,编译该工程会提示0错误,并且在F:\nRF5_SDK_15.0\examples\ble_peripheral\ble_app_buttonless_dfu\pca10040\s132\arm5_no_packs\_build文件夹中生成nrf52832_xxaa.hex文件,如下图所示:
把nrf52832_xxaa.hex的文件名更改为app.hex,放到之前新建的F:\key文件夹中,如下图所示:
2.5 应用程序的zip生成
进入F:\key文件夹,在此处打开dos命令框(Shift+鼠标右键打开),在命令行中输入指令nrfutil pkg generate --hw-version 52 --application-version 1 --application app.hex --sd-req 0xa8 --key-file private.key test.zip,回车执行指令,执行结果如下图所示:
执行后可在F:\key文件夹中找到test.zip文件,如下图所示:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。