文章中所使用的工具,请参考《nRF5x系列蓝牙模块DFU升级服务移植 -- 1 工具安装》说明。
2.1 micro_ecc_lib_nrf52.lib文件的生成
首先选中C:MinGWmsys文件夹中的批处理执行文件msys.bat,点击打开,如下图所示:
在SDK中找到算法,如下图所示:
在打开的msys.bat文件框中的命令行输入指令cd /F/nRF5_SDK_15.0/external/micro-ecc/nrf52hf_keil/armgcc,然后回车执行指令,如下图所示:
继续输入指令make,然后回车,如下图所示:
生成的lib文件,可在F:nRF5_SDK_15.0externalmicro-eccnrf52hf_keilarmgcc文件夹中找到,如下图所示:
备注:在make时候,如果提示文件找不到,如下图所示:
该处错误是因为没有发现GNU的路径,这里我们打开F:nRF5_SDK_15.0componentstoolchaingcc文件夹,找到Makefile.windows文件,使用记事本打开,修改GNU安装路径,如下图所示:
2.2 密钥的生成
在F盘新建一个命名为key的文件夹,在此处打开dos命令框(Shift 鼠标右键打开),在命令行中输入指令nrfutil.exe keys generate F:keyprivate.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:keyprivate.key --out_file F:keypublic_key.c,回车执行,结果如下图所示:
打开F:key文件夹,可以找到新生成的public_key.c文件,如下图所示:
到此密钥已经完成生成,而这个公钥是后面boot工程所需要的,所以需要将public_key.c文件重命名为dfu_public_key.c,并替换F:nRF5_SDK_15.0examplesdfu中的dfu_public_key.c文件,如下图所示:
2.3 boot工程的hex生成
打开F:nRF5_SDK_15.0examplesdfusecure_bootloaderpca10040_blearm5_no_packs文件夹下的keil工程,如下图所示:
如果之前的操作均完成且正确的话,编译该工程会提示0错误,并且在F:nRF5_SDK_15.0examplesdfusecure_bootloaderpca10040_blearm5_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.0examplesble_peripheralble_app_buttonless_dfupca10040s132arm5_no_packs文件夹下的keil工程,如下图所示:
如果之前的操作均完成且正确的话,编译该工程会提示0错误,并且在F:nRF5_SDK_15.0examplesble_peripheralble_app_buttonless_dfupca10040s132arm5_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文件,如下图所示: