Siemens IOT2050
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