0

我需要的:

x86_64 机器上用于 raspberry pi 零的测试容器,可与armv6l的 qemu 仿真一起使用。

到目前为止我得到了什么:

带有测试代码的 Dockerfile

FROM python:3.7.9

COPY hello.py ./

CMD [ "python3", "./hello.py" ]

使用以下命令构建图像:

docker buildx build --platform linux/arm/v6 -t test/hello --push .

在为 linux/arm/v6 上传和构建后,我尝试使用以下命令运行它:

docker run --platform=linux/arm/v6 --rm -t test/hello uname -mpi 
Output: armv7l unknown unknown

我已经像他们在 github 页面上所说的那样设置了 qemu 和 binfmt: https ://github.com/docker/buildx#building-multi-platform-images

我不明白为什么输出是 armv7l,因为我做了所有事情来制作 armv6l 图像。不知道是否需要对 docker 或者 qemu 本身进行调整。我对 docker 的 buildx 系统以及如何在 qemu 下模拟容器非常陌生,所以如果有人能帮助我解决这个问题,我将非常感激。

编辑:

多亏了Peter,容器才知道被迫使用 armv6l。

docker run -e QEMU_CPU=arm1176 --platform=linux/arm/v6 --rm -t test/hello uname -mpi
Output: armv6l unknown unknown
4

1 回答 1

0

uname 告诉您“armv7l”,因为您没有向 QEMU 指定它应该模拟任何特定的 CPU 类型,并且它的默认值是“我们可以模拟的所有功能”。

这应该不是问题,因为所有可以在 v6 CPU 上运行的软件都将在 v7 CPU 上运行。(这就是为什么 QEMU 的默认设置是这样的:这意味着通常来宾程序都可以正常工作。)

我对 docker 不熟悉,但我怀疑它的“平台”参数只是配置了容器内的代码是用来运行的。所以你有一个装满 v6 二进制文件的容器,它将在 v6 CPU 或 v7 CPU 上运行。

如果您确实需要强制 QEMU 模拟 v6 CPU 而不是 v7 CPU,您可以将环境变量 QEMU_CPU 设置为“arm1176”,这将使 QEMU 模拟特定的 CPU。

于 2021-02-09T11:35:43.837 回答