iot-lab/iot-lab-training

security/ota: errors at compile for iotlab-m3

Closed this issue · 4 comments

I'm having issues with the riot/security/ota notebook, in jupyter I get the following:

!make ETHOS_BAUDRATE=500000 IOTLAB_NODE=auto-ssh riotboot/flash-combined-slot0

make[1]: Nothing to be done for 'prepare'.
/home/jovyan/work/training/riot/RIOT/bootloaders/riotboot/../..//Makefile.include:583: *** FLASHFILE is not defined for this board: .  Stop.
make: *** [/home/jovyan/work/training/riot/RIOT/makefiles/boot/riotboot.mk:80: riotboot/bootloader/binfile] Error 2

And then if I open a terminal and try to manually compile that application I get:

BOARD=iotlab-m3 make -C examples/suit_update/
make: Entering directory '/home/jovyan/work/training/riot/RIOT/examples/suit_update'
Building application "suit_update" for "iotlab-m3" with MCU "stm32".

make[1]: Nothing to be done for 'prepare'.
"make" -C /home/jovyan/work/training/riot/RIOT/pkg/c25519
"make" -C /home/jovyan/work/training/riot/RIOT/build/pkg/c25519/src -f /home/jovyan/work/training/riot/RIOT/Makefile.base MODULE=c25519
"make" -C /home/jovyan/work/training/riot/RIOT/pkg/libcose
...
...
/home/jovyan/work/training/riot/RIOT/bootloaders/riotboot/bin/iotlab-m3/periph_common/pm.o: In function `__get_PRIMASK':
/home/jovyan/work/training/riot/RIOT/cpu/cortexm_common/include/vendor/cmsis_gcc.h:386: multiple definition of `pm_off'
/home/jovyan/work/training/riot/RIOT/bootloaders/riotboot/bin/iotlab-m3/periph/pm.o:/home/jovyan/work/training/riot/RIOT/cpu/cortexm_common/include/vendor/cmsis_gcc.h:386: first defined here
collect2: error: ld returned 1 exit status
make: *** [/home/jovyan/work/training/riot/RIOT/bootloaders/riotboot/../..//Makefile.include:634: /home/jovyan/work/training/riot/RIOT/bootloaders/riotboot/bin/iotlab-m3/riotboot.elf] Error 1
make: *** [/home/jovyan/work/training/riot/RIOT/makefiles/boot/riotboot.mk:80: riotboot/bootloader/binfile] Error 2
make: Leaving directory '/home/jovyan/work/training/riot/RIOT/examples/suit_update'

Both issues I do not get when compiling locally on a local copy of this repository, is there some additional background settings in jupyter that could explain this? Thanks.

Hi @fjmolinas ,
I don't understand why. I have just tried the notebook with success. Are you sure that your copy of RIOT is not modified in the Jupyter docker instance ?

You can view below the stacktrace of the command

!make ETHOS_BAUDRATE=500000 IOTLAB_NODE=auto-ssh riotboot/flash-combined-slot0
"make" -C /home/jovyan/work/training/riot/RIOT/boards/iotlab-m3
"make" -C /home/jovyan/work/training/riot/RIOT/boards/common/iotlab
"make" -C /home/jovyan/work/training/riot/RIOT/core
"make" -C /home/jovyan/work/training/riot/RIOT/cpu/stm32
"make" -C /home/jovyan/work/training/riot/RIOT/cpu/cortexm_common
"make" -C /home/jovyan/work/training/riot/RIOT/cpu/cortexm_common/periph
"make" -C /home/jovyan/work/training/riot/RIOT/cpu/stm32/periph
"make" -C /home/jovyan/work/training/riot/RIOT/cpu/stm32/stmclk
"make" -C /home/jovyan/work/training/riot/RIOT/cpu/stm32/vectors
"make" -C /home/jovyan/work/training/riot/RIOT/drivers
"make" -C /home/jovyan/work/training/riot/RIOT/drivers/periph_common
"make" -C /home/jovyan/work/training/riot/RIOT/sys
"make" -C /home/jovyan/work/training/riot/RIOT/sys/checksum
"make" -C /home/jovyan/work/training/riot/RIOT/sys/malloc_thread_safe
"make" -C /home/jovyan/work/training/riot/RIOT/sys/newlib_syscalls_default
"make" -C /home/jovyan/work/training/riot/RIOT/sys/pm_layered
"make" -C /home/jovyan/work/training/riot/RIOT/sys/riotboot
"make" -C /home/jovyan/work/training/riot/RIOT/sys/stdio_null
compiling /home/jovyan/work/training/riot/RIOT/dist/tools/riotboot_gen_hdr/bin/genhdr...
suit: generating key in /home/jovyan/work/training/riot/RIOT/keys
mkdir -p /home/jovyan/work/training/riot/RIOT/build/pkg
2021-06-16 08:36:49 URL:https://www.dlbeer.co.nz/downloads/c25519-2017-10-05.zip [68419/68419] -> "/home/jovyan/work/training/riot/RIOT/build/pkg/c25519-2017-10-05.zip" [1]
test "dbfb4285837ab2ea3d99c448b22877cc7a139ccbaebb1de367e2bec1fd562fe629b389d86603915448078b8fd7e631c8fc9a7d126eb889a1ba0c17611369b190  /home/jovyan/work/training/riot/RIOT/build/pkg/c25519-2017-10-05.zip" =  "$(sha512sum "/home/jovyan/work/training/riot/RIOT/build/pkg/c25519-2017-10-05.zip")"
[INFO] cloning libcose
Cloning into '/home/jovyan/work/training/riot/RIOT/build/pkg/libcose'...
remote: Enumerating objects: 1786, done.
remote: Counting objects: 100% (107/107), done.
remote: Compressing objects: 100% (67/67), done.
remote: Total 1786 (delta 47), reused 75 (delta 40), pack-reused 1679
Receiving objects: 100% (1786/1786), 742.38 KiB | 10.46 MiB/s, done.
Resolving deltas: 100% (1133/1133), done.
HEAD is now at 8b5f651 Merge pull request #88 from bergzand/pr/ci/add_gcc9
[INFO] updating libcose /home/jovyan/work/training/riot/RIOT/build/pkg/libcose/.pkg-state.git-downloaded
echo 8b5f651c3203682a2d98121cd3e5c844cb2b4c36 > /home/jovyan/work/training/riot/RIOT/build/pkg/libcose/.pkg-state.git-downloaded
[INFO] patch libcose
[INFO] cloning nanocbor
Cloning into '/home/jovyan/work/training/riot/RIOT/build/pkg/nanocbor'...
remote: Enumerating objects: 583, done.
remote: Counting objects: 100% (226/226), done.
remote: Compressing objects: 100% (142/142), done.
remote: Total 583 (delta 97), reused 167 (delta 72), pack-reused 357
Receiving objects: 100% (583/583), 284.07 KiB | 5.80 MiB/s, done.
Resolving deltas: 100% (238/238), done.
HEAD is now at 3a672f7 Merge pull request #19 from bergzand/pr/fix/non32bit
[INFO] updating nanocbor /home/jovyan/work/training/riot/RIOT/build/pkg/nanocbor/.pkg-state.git-downloaded
echo 3a672f79b2458a96393447e50a41174f741eadc5 > /home/jovyan/work/training/riot/RIOT/build/pkg/nanocbor/.pkg-state.git-downloaded
[INFO] patch nanocbor
"make" -C /home/jovyan/work/training/riot/RIOT/pkg/c25519
"make" -C /home/jovyan/work/training/riot/RIOT/build/pkg/c25519/src -f /home/jovyan/work/training/riot/RIOT/Makefile.base MODULE=c25519
"make" -C /home/jovyan/work/training/riot/RIOT/pkg/libcose
"make" -C /home/jovyan/work/training/riot/RIOT/build/pkg/libcose/src -f /home/jovyan/work/training/riot/RIOT/Makefile.base MODULE=libcose
"make" -C /home/jovyan/work/training/riot/RIOT/build/pkg/libcose/src/crypt -f /home/jovyan/work/training/riot/RIOT/pkg/libcose/Makefile.libcose_crypt
"make" -C /home/jovyan/work/training/riot/RIOT/pkg/nanocbor
"make" -C /home/jovyan/work/training/riot/RIOT/build/pkg/nanocbor/src -f /home/jovyan/work/training/riot/RIOT/Makefile.base MODULE=nanocbor
"make" -C /home/jovyan/work/training/riot/RIOT/boards/iotlab-m3
"make" -C /home/jovyan/work/training/riot/RIOT/boards/common/iotlab
"make" -C /home/jovyan/work/training/riot/RIOT/core
"make" -C /home/jovyan/work/training/riot/RIOT/cpu/stm32
"make" -C /home/jovyan/work/training/riot/RIOT/cpu/cortexm_common
"make" -C /home/jovyan/work/training/riot/RIOT/cpu/cortexm_common/periph
"make" -C /home/jovyan/work/training/riot/RIOT/cpu/stm32/periph
"make" -C /home/jovyan/work/training/riot/RIOT/cpu/stm32/stmclk
"make" -C /home/jovyan/work/training/riot/RIOT/cpu/stm32/vectors
"make" -C /home/jovyan/work/training/riot/RIOT/drivers
"make" -C /home/jovyan/work/training/riot/RIOT/drivers/ethos
"make" -C /home/jovyan/work/training/riot/RIOT/drivers/netdev
"make" -C /home/jovyan/work/training/riot/RIOT/drivers/periph_common
"make" -C /home/jovyan/work/training/riot/RIOT/sys
"make" -C /home/jovyan/work/training/riot/RIOT/sys/auto_init
"make" -C /home/jovyan/work/training/riot/RIOT/sys/checksum
"make" -C /home/jovyan/work/training/riot/RIOT/sys/crypto
"make" -C /home/jovyan/work/training/riot/RIOT/sys/div
"make" -C /home/jovyan/work/training/riot/RIOT/sys/evtimer
"make" -C /home/jovyan/work/training/riot/RIOT/sys/fmt
"make" -C /home/jovyan/work/training/riot/RIOT/sys/hashes
"make" -C /home/jovyan/work/training/riot/RIOT/sys/iolist
"make" -C /home/jovyan/work/training/riot/RIOT/sys/isrpipe
"make" -C /home/jovyan/work/training/riot/RIOT/sys/luid
"make" -C /home/jovyan/work/training/riot/RIOT/sys/malloc_thread_safe
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/application_layer/nanocoap
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/application_layer/uhcp
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/crosslayer/inet_csum
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/netapi
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/netif
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/netif/ethernet
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/netif/hdr
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/netif/init_devs
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/netreg
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/network_layer/icmpv6
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/network_layer/icmpv6/echo
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/network_layer/ipv6
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/network_layer/ipv6/hdr
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/network_layer/ipv6/nib
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/network_layer/ndp
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/pkt
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/pktbuf
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/pktbuf_static
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/sock
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/sock/udp
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/transport_layer/udp
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/gnrc/application_layer/uhcpc
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/link_layer/eui_provider
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/link_layer/l2util
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/netif
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/network_layer/icmpv6
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/network_layer/ipv6/addr
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/network_layer/ipv6/hdr
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/sock
"make" -C /home/jovyan/work/training/riot/RIOT/sys/net/transport_layer/udp
"make" -C /home/jovyan/work/training/riot/RIOT/sys/newlib_syscalls_default
"make" -C /home/jovyan/work/training/riot/RIOT/sys/pm_layered
"make" -C /home/jovyan/work/training/riot/RIOT/sys/posix/inet
"make" -C /home/jovyan/work/training/riot/RIOT/sys/progress_bar
"make" -C /home/jovyan/work/training/riot/RIOT/sys/random
"make" -C /home/jovyan/work/training/riot/RIOT/sys/random/tinymt32
"make" -C /home/jovyan/work/training/riot/RIOT/sys/riotboot
"make" -C /home/jovyan/work/training/riot/RIOT/sys/shell
"make" -C /home/jovyan/work/training/riot/RIOT/sys/shell/commands
"make" -C /home/jovyan/work/training/riot/RIOT/sys/stdio_uart
"make" -C /home/jovyan/work/training/riot/RIOT/sys/suit
"make" -C /home/jovyan/work/training/riot/RIOT/sys/suit/storage
"make" -C /home/jovyan/work/training/riot/RIOT/sys/suit/transport
"make" -C /home/jovyan/work/training/riot/RIOT/sys/test_utils/interactive_sync
"make" -C /home/jovyan/work/training/riot/RIOT/sys/tsrb
"make" -C /home/jovyan/work/training/riot/RIOT/sys/uuid
"make" -C /home/jovyan/work/training/riot/RIOT/sys/xtimer
creating /home/jovyan/work/training/riot/security/ota/bin/iotlab-m3/suit_update-slot0.1623832600.riot.bin...
iotlab-node --jmespath='keys(@)[0]' --format='int'  --list grenoble,m3,101 --flash /home/jovyan/work/training/riot/security/ota/bin/iotlab-m3/suit_update-slot0-combined.bin | grep 0
0

Hi @fjmolinas ,
I don't understand why. I have just tried the notebook with success. Are you sure that your copy of RIOT is not modified in the Jupyter docker instance ?

Indeed it seems at some point I had switched to a newer RIOT release, I was able to bisect the commit, anyway, this is an issue in RIOT.

Thanks for the help @fsaintma!

FYI the fix thatt would allow bumping the RIOT version RIOT-OS/RIOT#16559