Я проверяю скрипт, на самом деле он, наконец, вызовет docker следующим образом:
a) make BUILD_IN_DOCKER = 1 BOARD = stm32f4discovery all
docker run --rm -t -u "$(id -u)" \
-v '/usr/share/zoneinfo/PRC:/etc/localtime:ro' -v '/home/shubuntu1/g/RIOT-2019.04:/data/riotbuild/riotbase' -e 'RIOTBASE=/data/riotbuild/riotbase' -e 'CCACHE_BASEDIR=/data/riotbuild/riotbase' -e 'BUILD_DIR=/data/riotbuild/riotbase/build' -e 'RIOTPROJECT=/data/riotbuild/riotbase/examples/hello-world' -e 'RIOTCPU=/data/riotbuild/riotbase/cpu' -e 'RIOTBOARD=/data/riotbuild/riotbase/boards' -e 'RIOTMAKE=/data/riotbuild/riotbase/makefiles' \
-e 'BOARD=stm32f4discovery' \
-w '/data/riotbuild/riotbase/examples/hello-world/' \
'riot/riotbuild:latest' make all 'BOARD=stm32f4discovery'
b) make BUILD_IN_DOCKER = 1 BOARD = stm32f4discovery flash
docker run --rm -t -u "$(id -u)" \
-v '/usr/share/zoneinfo/PRC:/etc/localtime:ro' -v '/home/shubuntu1/g/RIOT-2019.04:/data/riotbuild/riotbase' -e 'RIOTBASE=/data/riotbuild/riotbase' -e 'CCACHE_BASEDIR=/data/riotbuild/riotbase' -e 'BUILD_DIR=/data/riotbuild/riotbase/build' -e 'RIOTPROJECT=/data/riotbuild/riotbase/examples/hello-world' -e 'RIOTCPU=/data/riotbuild/riotbase/cpu' -e 'RIOTBOARD=/data/riotbuild/riotbase/boards' -e 'RIOTMAKE=/data/riotbuild/riotbase/makefiles' \
-e 'BOARD=stm32f4discovery' \
-w '/data/riotbuild/riotbase/examples/hello-world/' \
'riot/riotbuild:latest' make 'BOARD=stm32f4discovery'
Они почти одинаковы, и основное использование контейнера - это просто сборка исходного кода в двоичный файл stm32, поскольку он не добавляет никаких прав для управления оборудованием при запуске контейнера.
Сравните с a)
, b)
также имеет следующий вывод:
### Мигающая цель ###
sh: 1: openocd: не найдено
/home/shubuntu1/g/RIOT-2019.04/examples/hello-world/../../
Makefile.include: 538: рецепт для целевой 'flash' не выполнен
make: *** [flash] Ошибка 127
На самом деле это не относится к контейнеру, он работает на хосте, основная причина в том, что вы не устанавливаете openocd
на хост, который использовался для прошивки двоичного файла stm32 на устройство.
См. это , поиск OpenOCD
, ясно, что вам нужно установить openocd, затем, после того как контейнер докера завершит сборку, двоичный файл также будет на хосте, как на томе докера, и, наконец, openocd
на хосте может прошить ваш бинарный файл.