跳转至

跨平台编译运行

方案

镜像跨平台编译有两种方式: 1)使用binfmt实现镜像跨平台编译运行 2)使用qemu-user-static实现镜像跨平台编译运行

涉及镜像

[ tonistiigi/binfmt, lcr.loongnix.cn/tonistiigi/binfmt, cr.loongnix.cn/tonistiigi/binfmt, multiarch/qemu-user-static, lcr.loongnix.cn/library/qemu-user-static, cr.loongnix.cn/library/qemu-user-static, ]

x86仿真运行编译LA abi1.0

(以下方式二选一即可) 1. binfmt - 获取cr.loongnix.cn/tonistiigi/binfmt:x86_add_loongarch docker pull cr.loongnix.cn/tonistiigi/binfmt:x86_add_loongarch - 将qemu-loongarch64注册码注册到/proc/sys/fs/binfmt_misc下,qemu-loongarch64存入缓存 docker run --rm --privileged cr.loongnix.cn/tonistiigi/binfmt:x86_add_loongarch --install loongarch64 - 拉取LA镜像,如 docker pull --platform=linux/loong64 cr.loongnix.cn/library/alpine:3.11 - 编译运行时需指定LA架构,如 docker buildx build --platform linux/loong64 -t example:example -f example . 2. qemu-user-static - 获取multiarch/qemu-user-static:latest qemu-loongarch二进制

docker pull multiarch/qemu-user-static:latest
wget https://github.com/Loongson-Cloud-Community/qemu-user-static/releases/download/x86_abi1.0/qemu-loongarch64-static
- 将qemu-loongarch64注册码注册到/proc/sys/fs/binfmt_misc下, 手动下载qemu-loongarch64 并放置到/usr/bin
docker run --rm -it --privileged multiarch/qemu-user-static:latest --reset
mv qemu-loongarch64-static /usr/bin/qemu-loongarch64-static
- 拉取LA镜像,如 docker pull --platform=linux/loong64 cr.loongnix.cn/library/alpine:3.11 - 编译运行时需指定LA架构,如 docker buildx build --platform linux/loong64 -t example_image -f example . docker run -it --rm --platform loong64 -v /usr/bin/qemu-loongarch64-static:/usr/bin/qemu-loongarch64-static debian:11 uname -m

x86仿真运行编译LA abi2.0

(以下方式二选一即可) 1. binfmt - 获取lcr.loongnix.cn/tonistiigi/binfmt:x86_add_loongarch docker pull lcr.loongnix.cn/tonistiigi/binfmt:x86_add_loongarch - 将qemu-loongarch64注册码注册到/proc/sys/fs/binfmt_misc下,qemu-loongarch64存入缓存 docker run --rm --privileged lcr.loongnix.cn/tonistiigi/binfmt:x86_add_loongarch --install loongarch64 - 拉取LA镜像,如 docker pull --platform=linux/loong64 lcr.loongnix.cn/library/alpine:latest - 编译运行时需指定LA架构,如 docker buildx build --platform linux/loong64 -t example_image -f example . 2. qemu-user-static - 获取multiarch/qemu-user-static:latest qemu-loongarch二进制

docker pull multiarch/qemu-user-static:latest
wget https://github.com/multiarch/qemu-user-static/releases/download/v7.2.0-1/qemu-loongarch64-static
- 将qemu-loongarch64注册码注册到/proc/sys/fs/binfmt_misc下, 手动下载qemu-loongarch64 并放置到/usr/bin
docker run --rm -it --privileged multiarch/qemu-user-static:latest --reset
mv qemu-loongarch64-static /usr/bin/qemu-loongarch64-static
- 拉取LA镜像,如 docker pull --platform=linux/loong64 lcr.loongnix.cn/library/alpine:latest - 编译运行时需指定LA架构,如 docker buildx build --platform linux/loong64 -t example:example -f example . docker run -it --rm --platform loong64 -v $(pwd)/qemu-loongarch64-static:/usr/bin/qemu-loongarch64-static debian:11 uname -m

注意:

abi 1.0和abi 2.0的qemu并不一致,因此需要在不同的地址下载镜像及二进制,但由于在qemu中loongarch64的magic和misk恒定,因此在x86平台下不能同时对abi1.0和abi2.0进行仿真 在使用abi1.0(2.0)之后如果想要切换为2.0(1.0) - 如果使用binfmt镜像,需要先清理当前内存中注册的qemu 执行docker run --rm --privileged xx.loongnix.cn/tonistiigi/binfmt:x86_add_loongarch --uninstall loongarch64 - 如果使用qemu-user-static,需要删除/usr/bin下的qemu-static-loongarch64

LA abi1.0仿真运行编译x86

(以下方式二选一即可) 1. binfmt - 同x86方式相同,使用镜像不同 docker pull cr.loongnix.cn/tonistiigi/binfmt:loongarch64_other_arch 2. qemu-user-static - 同x86方式相同,使用镜像不同 docker pull cr.loongnix.cn/library/qemu-user-static:latest-loongarch64 - 全部架构的qemu-static二进制tar包地址 https://github.com/Loongson-Cloud-Community/qemu-user-static/releases/download/abi2.0/qemu-static-8.2.0-rc2.tar.gz

LA abi2.0仿真运行编译x86

(以下方式二选一即可) 1. binfmt - 同x86方式相同,使用镜像不同 docker pull lcr.loongnix.cn/library/binfmt:latest 2. qemu-user-static - 同x86方式相同,使用镜像不同 docker pull lcr.loongnix.cn/library/qemu-user-static:latest - 全部架构的qemu-static二进制tar包地址 https://github.com/Loongson-Cloud-Community/qemu-user-static/releases/download/abi2.0/qemu-static-8.2.0-rc2.tar.gz