Skip to content

Instantly share code, notes, and snippets.

@hiroshi-nishiura
Created April 18, 2019 09:55
Show Gist options
  • Save hiroshi-nishiura/1b6703e21244d1641b78adc6b5d32add to your computer and use it in GitHub Desktop.
Save hiroshi-nishiura/1b6703e21244d1641b78adc6b5d32add to your computer and use it in GitHub Desktop.
build aarch64/armhf docker container on ubuntu x86_64
# require packages
# apt install g++-aarch64-linux-gnu
# apt install g++-arm-linux-gnueabihf
# apt install qemu-user-static
echo BUILD arm64v8/ubuntu:multiarch
docker run -dit --name c_arm64v8 arm64v8/ubuntu:18.04
docker cp /usr/bin/qemu-aarch64-static c_arm64v8:/usr/bin/
docker cp /usr/bin/qemu-arm-static c_arm64v8:/usr/bin/
docker cp /usr/arm-linux-gnueabihf/lib c_arm64v8:/lib/arm-linux-gnueabihf
docker commit c_arm64v8 arm64v8/ubuntu:multiarch
docker rm c_arm64v8
docker run -dit --name c_arm64v8 arm64v8/ubuntu:multiarch
docker exec c_arm64v8 ln -sr /lib/arm-linux-gnueabihf/ld-2.23.so /lib/ld-linux-armhf.so.3
docker commit c_arm64v8 arm64v8/ubuntu:multiarch
echo COPY ROOTFS
mkdir -p rootfs
docker cp c_arm64v8:/lib rootfs
mkdir -p rootfs/usr
docker cp c_arm64v8:/usr/lib rootfs/usr
echo CLEANUP
docker stop c_arm64v8
#docker system prune -f
docker rm c_arm64v8
docker image prune -f
@hiroshi-nishiura
Copy link
Author

hiroshi-nishiura commented Apr 24, 2019

x86_64 LinuxでARMの実行環境をDockerで構築するスクリプト

  • armhf、aarch64 どちらもOK
  • qemu-arm-static、qemu-aarch64-staticを利用
  • Dockerfileでは構築困難なのでシェルスクリプトで構築した
  • rootfsもホストに構築するので、クロス開発できる
  • エミュレーションなので速くはない。git cloneとか結構きつい

gdbリモートデバッグ方法

gdbserverはDockerコンテナ上では動かないので、qemu-[arm|aarch64]-staticのgdb機能を使う

$ qemu-[arm|aarch64]-static -g <port> <program>

をコンテナで実行するとgdbserverと同等のリモートデバッグが可能。

/rootをホストディレクトリにする

クロスコンパイルしてリモートデバッグするとき、コンテナの/rootをホスト側の開発ディレクトリを共有してしまうと便利である。

$ docker run -it -v <proj-dir>:/root <image>

bashが正常に動くように、proj-dirには/rootに元々入っている .bashrc と .profile をコピーしておく。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment