Commit 7a3462de authored by Martí Bolívar's avatar Martí Bolívar Committed by Anas Nashif
Browse files

scripts: runner: use arguments, not environment vars



The various runners (flash/debug scripts) use environment variables to
take arguments. This is legacy behavior which is not desirable.

Use command line arguments instead.

Note: this leaves more general environment variables with publicly
      documented behavior in place for now, for compatibility, e.g.:

      ZEPHYR_FLASH_OVER_DFU, OPENSDA_FW, ESP_IDF_PATH, PYOCD_DAPARG

For example, when using dfu-util to flash arduino_101, instead of
setting DFUUTIL_PID, DFUUTIL_ALT, and DFUUTIL_IMG environment
variables, have the script invocation look like this:

  python3 .../zephyr_flash_debug.py dfu-util flash \
          [common arguments omitted] \
          --pid=8087:0aba --alt=x86_app \
          --img=.../build/zephyr/zephyr.bin

Make similar changes for other runners (openocd, etc.) and
targets (debug, debugserver).

To implement this in the scripts:

  - have the individual scripts/support/runner/some-runner.py files
    register their own command line arguments

  - teach them to construct instances from arguments, not the
    environment

  - have zephyr_flash_debug.py request runners to register command
    line argument parsers, and handle arguments

In the build system:

  - add a new board_runner_args() extension function that board.cmake
    files can use to add to the zephyr_flash_debug.py command line

  - adjust cmake/flash/CMakeLists.txt to invoke with arguments

  - add new helper include files for each runner (like
    boards/common/dfu-util.board.cmake, etc.), which add default
    options as needed and then add on overrides from
    board_runner_args() calls

  - update board.cmake files to use the new includes and extension

This implied some tweaking when using openocd to make the CMake string
escaping and unescaping work properly.

Signed-off-by: default avatarMarti Bolivar <marti@opensourcefoundries.com>
parent 94290ee1
Loading
Loading
Loading
Loading
+5 −20
Original line number Diff line number Diff line
if(DEFINED ENV{ZEPHYR_FLASH_OVER_DFU})
  set(BOARD_FLASH_RUNNER dfu-util)

  set(DFUUTIL_PID 8087:0aba)
  set(DFUUTIL_ALT sensor_core)
  set(DFUUTIL_IMG ${PROJECT_BINARY_DIR}/${KERNEL_BIN_NAME})

  set_property(GLOBAL APPEND PROPERTY FLASH_SCRIPT_ENV_VARS
    DFUUTIL_PID
    DFUUTIL_ALT
    DFUUTIL_IMG
    )
else()
  set(BOARD_FLASH_RUNNER openocd)
endif()

set(BOARD_DEBUG_RUNNER openocd)

set(OPENOCD_PRE_CMD "targets 1")
set(OPENOCD_LOAD_CMD "load_image     ${PROJECT_BINARY_DIR}/${KERNEL_BIN_NAME} ${CONFIG_FLASH_BASE_ADDRESS}")
set(OPENOCD_VERIFY_CMD "verify_image ${PROJECT_BINARY_DIR}/${KERNEL_BIN_NAME} ${CONFIG_FLASH_BASE_ADDRESS}")
set(GDB_PORT 3334)
board_runner_args(dfu-util "--pid=8087:0aba" "--alt=sensor_core")
set(PRE_LOAD targets 1)
board_runner_args(openocd "--cmd-pre-load=\"${PRE_LOAD}\"" "--gdb-port=3334")

set_property(GLOBAL APPEND PROPERTY FLASH_SCRIPT_ENV_VARS
  OPENOCD_PRE_CMD
  OPENOCD_LOAD_CMD
  OPENOCD_VERIFY_CMD
  GDB_PORT
  )
include($ENV{ZEPHYR_BASE}/boards/common/dfu-util.board.cmake)
include($ENV{ZEPHYR_BASE}/boards/common/openocd.board.cmake)
+2 −8
Original line number Diff line number Diff line
# TODO: can this board just use the usual openocd runner?
set(BOARD_FLASH_RUNNER em-starterkit)
set(BOARD_DEBUG_RUNNER em-starterkit)

set(OPENOCD_LOAD_CMD "load_image     ${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME} ${CONFIG_FLASH_BASE_ADDRESS}")
set(OPENOCD_VERIFY_CMD "verify_image ${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME} ${CONFIG_FLASH_BASE_ADDRESS}")

set_property(GLOBAL APPEND PROPERTY FLASH_SCRIPT_ENV_VARS
  OPENOCD_LOAD_CMD
  OPENOCD_VERIFY_CMD
  )
board_finalize_runner_args(em-starterkit)
+3 −6
Original line number Diff line number Diff line
set(PRE_LOAD targets 1)
board_runner_args(openocd "--cmd-pre-load=\"${PRE_LOAD}\"")
set(OPENOCD_USE_LOAD_IMAGE NO)
include($ENV{ZEPHYR_BASE}/boards/common/openocd.board.cmake)

set(OPENOCD_PRE_CMD "targets 1")

set_property(GLOBAL APPEND PROPERTY FLASH_SCRIPT_ENV_VARS
  OPENOCD_PRE_CMD
  )
+2 −7
Original line number Diff line number Diff line
set(PRE_LOAD targets 1)
board_runner_args(openocd "--cmd-pre-load=\"${PRE_LOAD}\"")
include($ENV{ZEPHYR_BASE}/boards/common/openocd.board.cmake)

set(OPENOCD_PRE_CMD "targets 1")
set(OPENOCD_LOAD_CMD "load_image     ${PROJECT_BINARY_DIR}/${KERNEL_BIN_NAME} ${CONFIG_FLASH_BASE_ADDRESS}")

set_property(GLOBAL APPEND PROPERTY FLASH_SCRIPT_ENV_VARS
  OPENOCD_PRE_CMD
  )
+3 −12
Original line number Diff line number Diff line
set(BOARD_FLASH_RUNNER dfu-util)
board_runner_args(dfu-util "--pid=0483:df11" "--alt=0")
board_runner_args(dfu-util "--dfuse-addr=${CONFIG_FLASH_BASE_ADDRESS}")

set(DFUUTIL_PID 0483:df11)
set(DFUUTIL_ALT 0)
set(DFUUTIL_IMG ${PROJECT_BINARY_DIR}/${KERNEL_BIN_NAME})
set(DFUUTIL_DFUSE_ADDR ${CONFIG_FLASH_BASE_ADDRESS})

set_property(GLOBAL APPEND PROPERTY FLASH_SCRIPT_ENV_VARS
  DFUUTIL_PID
  DFUUTIL_ALT
  DFUUTIL_IMG
  DFUUTIL_DFUSE_ADDR
  )
include($ENV{ZEPHYR_BASE}/boards/common/dfu-util.board.cmake)
Loading