west命令详解:flash

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在编译时依次执行运行以下文件:

  1. zephyr\cmake\app\boilerplate.cmake
  2. zephyr\CMakeLists.txt
  3. zephyr\cmake\flash\CMakeLists.txt

在第3步中根据runner的配置信息生成runners.yaml文件。

(完)