Store PLCnext CommunityPLCnext on LinkedInPLCnext on Instagram  PLCnext on YouTube Github PLCnext CommunityStore PLCnext Community

 

 How to create a Blog Entry

Container builds for arm on x86

Challenge


For a faster development we want to create ARM based containers for the AXCF2152 or AXCF1152 on x86 hardware. For this purpose, a virtual machine based on Debian or Ubuntu is used, which runs on our normal PC.

 

We need a emulator

 

To run ARM binary code on an x86 system we need an emulator that allows us to do this.

Qemu is one of the few hypervisors that can emulate ARM binary code and compile it for x86. All we need to do is install Qemu on our host system and activate the emulator.

 

Install Qemu for Ubuntu or Debian:
 
apt-get update && apt-get install -y --no-install-recommends qemu-user-static binfmt-support
update-binfmts --enable qemu-arm
update-binfmts --display qemu-arm
 

Example for usage

 

To use Qemu now we need an extension in the container, namely the binary /usr/bin/qemu-arm-static. There are several ways to use it in the container.

If the extension is only needed temporarily and if it exists locally, it can simply be passed to the container. To do this, the necessary binary is mounted in the container.

 

docker run -it --restart always \
    -v /usr/bin/qemu-arm-static:/usr/bin/qemu-arm-static \
    arm32v7/debian /bin/sh

 

This starts the container and jumps to a shell in the container. Now all necessary changes can be made. The changes can be transferred to the images afterwards with a commit.

docker commit ...

 

For a container build, the binary must be present in the container, there are two ways to do this.

1. The binary is already available, there are prefabricated images on Dockerhub for this purpose. https://hub.docker.com/u/multiarch/

2. The binary is added to the container images.

 

Example dockerfile:
 
From debian:armhf
COPY qemu-arm-static /usr/bin/qemu-arm-static
RUN .....

The line COPY must appear directly as second command after FROM. The whole thing works with all build tools.

 

One container for all

 

If you install the Qemu extension on an AXCF3152, you can use the same container for both systems (x86 and ARM). Regarding the perfomance this should be tested extensively.