west flash
用来烧录hex文件,它在后台调用nrfjprog完成烧录任务。这个命令的好处是,我们无需手动指定hex路径,west会自动找到正确的文件,并在必要时候执行编译。
本文介绍它的基本用法和后台逻辑。
基本用法
其用法简单无奇,如下:
$ west flash
如果工程有改动,它会自动编译,生成新的hex,然后再执行下载。
它的后台命令为:
nrfjprog --program zephyr.hex -f <family> --snr <snr>
--[eraseall | sectoranduicrerase | sectorerase]
后台逻辑
根据west build文章中的分析思路,可以得知运行west flash
时,会先执行zephyr\scripts\west_commands\flash.py
,再调用zephyr\scripts\west_commands\run_common.py
,该脚本会读取runners.yaml文件的内容。
在Zephyr中,runner指下载或调试的工具,由于不同芯片的下载工具相同,所以需要一个文件来记录该工具的配置信息,它就是runners.yaml,其内容如下:
runners:
- nrfjprog
- jlink
flash-runner: nrfjprog
debug-runner: jlink
args:
common:
- --board-dir=C:/repo/zephyr-repo/zephyr/boards/arm/nrf52_pca10040
- --elf-file=C:/repo/zephyr-repo/zephyr/samples/hello_world/build/zephyr/zephyr.elf
- --hex-file=C:/repo/zephyr-repo/zephyr/samples/hello_world/build/zephyr/zephyr.hex
- --bin-file=C:/repo/zephyr-repo/zephyr/samples/hello_world/build/zephyr/zephyr.bin
- --gdb=C:/dev/gccarmemb/7.3-2018q2/bin/arm-none-eabi-gdb.exe
nrfjprog:
- --nrf-family=NRF52
这些配置信息告诉west使用nrfjprog进行下载,并提供了hex文件路径。
runners.yaml的产生
以nrf52_pca10040为例,该硬件的runner配置信息通过zephyr\boards\arm\nrf52_pca10040\board.cmake
进行设置。
cmake在编译时依次执行运行以下文件:
- zephyr\cmake\app\boilerplate.cmake
- zephyr\CMakeLists.txt
- zephyr\cmake\flash\CMakeLists.txt
在第3步中根据runner的配置信息生成runners.yaml文件。
(完)