mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-09-12 13:21:56 +00:00
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: Marti Bolivar <marti@opensourcefoundries.com>
32 lines
1.0 KiB
CMake
32 lines
1.0 KiB
CMake
set_ifndef(BOARD_FLASH_RUNNER openocd)
|
|
set_ifndef(BOARD_DEBUG_RUNNER openocd)
|
|
|
|
# "load_image" or "flash write_image erase"?
|
|
if(CONFIG_X86 OR CONFIG_ARC)
|
|
set_ifndef(OPENOCD_USE_LOAD_IMAGE YES)
|
|
endif()
|
|
if(OPENOCD_USE_LOAD_IMAGE)
|
|
set_ifndef(OPENOCD_FLASH load_image)
|
|
else()
|
|
set_ifndef(OPENOCD_FLASH flash write_image erase)
|
|
endif()
|
|
|
|
# zephyr.bin, or something else?
|
|
set_ifndef(OPENOCD_IMAGE "${PROJECT_BINARY_DIR}/${KERNEL_BIN_NAME}")
|
|
|
|
# CONFIG_FLASH_BASE_ADDRESS, or something else?
|
|
if(NOT DEFINED OPENOCD_ADDRESS)
|
|
# This can't use set_ifndef() because CONFIG_FLASH_BASE_ADDRESS is
|
|
# the empty string on some targets, which causes set_ifndef() to
|
|
# choke.
|
|
set(OPENOCD_ADDRESS "${CONFIG_FLASH_BASE_ADDRESS}")
|
|
endif()
|
|
|
|
set(OPENOCD_CMD_LOAD_DEFAULT ${OPENOCD_FLASH} ${OPENOCD_IMAGE} ${OPENOCD_ADDRESS})
|
|
set(OPENOCD_CMD_VERIFY_DEFAULT verify_image ${OPENOCD_IMAGE} ${OPENOCD_ADDRESS})
|
|
|
|
board_finalize_runner_args(openocd
|
|
"--cmd-load=\"${OPENOCD_CMD_LOAD_DEFAULT}\""
|
|
"--cmd-verify=\"${OPENOCD_CMD_VERIFY_DEFAULT}\""
|
|
)
|