A few weeks ago Siemens released a very much needed upgrade of the IOT2000 platform; the newcomer is called IOT2050 and is a huge step forward compared to the very very underpowered IOT2040.
I have had one for a few days laying on my desk but I just found the time to play with it today.
Other than the new hardware, the officially supported operating system also changed from Yocto Linux to Debian Buster (kudos for dropping Yocto).

root@iot2050-debian:/# cat /etc/debian_version 
10.4
root@iot2050-debian:/# uname -a
Linux iot2050-debian 4.19.59+ #1 SMP PREEMPT Sun May 24 17:08:31 UTC 2020 aarch64 GNU/Linux

This custom version of Debian has to be built from source using the same bitbake toolchain that was also used to build Yocto Linux for the IOT2020/IOT2040.
Compilation procedure is actually pretty easy, the only requirement is a Linux box or a VM with Docker and ~20 GB of disk space (I used a Debian 10 VM):

  • download the latest milestone of meta-iot2050-master ZIP file from Siemens’ github.
  • ssh into the Linux box and install Docker: sudo apt install docker
  • add <user> to docker group: sudo gpasswd -a <user> docker
  • restart the virtual machine to make sure all changes are applied.
  • unzip the meta-iot2050-master and open a terminal into the project directory.
  • compile Debian: ./kas-docker --isar build kas-iot2050-example.yml

When the compilation process is done, check the directory build/tmp/deploy/images/iot2050/.
The system image is the file having wic.img extension; this can be written on a MicroSD card from Windows using Rufus or from any Linux machine using dd command line tool:

user@linux-box:/# sudo dd if=./iot2050-image-example-isar-iot2050.wic.img of=/dev/<device_name> bs=4M oflag=sync ; sync

MicroSD card’s <device_name> can be found using sudo fdisk -l.

Network perfomance

One of the things I was most interested in was checking out the network speed the device can reach.
I secretly always wanted to use a device like this as router, so the first thing I did after disabling node-red and eclipse-mosquitto was load up iperf3.

client Thinkpad T480 | server IOT2050

root@iot2050-debian:/# iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.0.51, port 53158
[  5] local 192.168.0.150 port 5201 connected to 192.168.0.51 port 53160
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec   105 MBytes   884 Mbits/sec                  
[  5]   1.00-2.00   sec   106 MBytes   889 Mbits/sec                  
[  5]   2.00-3.00   sec   106 MBytes   886 Mbits/sec                  
[  5]   3.00-4.00   sec   106 MBytes   889 Mbits/sec                  
[  5]   4.00-5.00   sec   106 MBytes   890 Mbits/sec                  
[  5]   5.00-6.00   sec   106 MBytes   891 Mbits/sec                  
[  5]   6.00-7.00   sec   105 MBytes   883 Mbits/sec                  
[  5]   7.00-8.00   sec   106 MBytes   890 Mbits/sec                  
[  5]   8.00-9.00   sec   106 MBytes   893 Mbits/sec                  
[  5]   9.00-10.00  sec   106 MBytes   888 Mbits/sec                  
[  5]  10.00-10.00  sec   214 KBytes   853 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  1.03 GBytes   888 Mbits/sec                  receiver

client IOT2050 | server Thinkpad T480

root@iot2050-debian:/# iperf3 -c 192.168.0.51
Connecting to host 192.168.0.51, port 5201
[  5] local 192.168.0.150 port 50436 connected to 192.168.0.51 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   115 MBytes   964 Mbits/sec    0    530 KBytes       
[  5]   1.00-2.00   sec   112 MBytes   940 Mbits/sec    0    530 KBytes       
[  5]   2.00-3.00   sec   112 MBytes   941 Mbits/sec    0    584 KBytes       
[  5]   3.00-4.00   sec   112 MBytes   942 Mbits/sec    0    611 KBytes       
[  5]   4.00-5.00   sec   111 MBytes   934 Mbits/sec   77    279 KBytes       
[  5]   5.00-6.00   sec   112 MBytes   942 Mbits/sec    0    349 KBytes       
[  5]   6.00-7.00   sec   111 MBytes   936 Mbits/sec    0    387 KBytes       
[  5]   7.00-8.00   sec   112 MBytes   942 Mbits/sec    0    404 KBytes       
[  5]   8.00-9.00   sec   111 MBytes   935 Mbits/sec    0    416 KBytes       
[  5]   9.00-10.00  sec   112 MBytes   944 Mbits/sec    0    424 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.10 GBytes   942 Mbits/sec   77             sender
[  5]   0.00-10.04  sec  1.09 GBytes   936 Mbits/sec                  receiver

Take the results with a bit of grain of salt and consider that this is just raw TCP stream; still I think this is actually pretty impressive considering IOT2050 is equipped with a dual core TI ARM64 AM6548 SoC.

Docker

Docker officially supports AMR64 and there is an official repo for Debian.
The Docker package that can be installed from the repo doesn’t like nftables, luckily moving back to legacy iptables is pretty easy.
First of all, install a few Docker dependencies:

root@iot2050-debian:/# apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

Enable iptables-legacy:

root@iot2050-debian:/# update-alternatives --set iptables /usr/sbin/iptables-legacy
root@iot2050-debian:/# update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
root@iot2050-debian:/# reboot

Add the repo and finally install Docker and Docker Compose:

root@iot2050-debian:/# curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
root@iot2050-debian:/# add-apt-repository \
   "deb [arch=arm64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"
root@iot2050-debian:/# apt-get update
root@iot2050-debian:/# sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose pass

Run a sample container just to check that everything is actually working:

root@iot2050-debian:/# docker run -d -p 1883:1883 --name eclipse-mosquitto eclipse-mosquitto
root@iot2050-debian:/# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
bfd9d4cdf3a6        eclipse-mosquitto   "/docker-entrypoint.…"   2 seconds ago       Up 2 seconds        0.0.0.0:1883->1883/tcp   eclipse-mosquitto