我正在chroot
尝试ARM
从x86_64
.
我发现可以qemu
通过将二进制文件复制到 chroot 系统来使用 static:
$ cp /usr/bin/qemu-arm archarm-chroot/usr/bin
但尽管如此我总是收到以下错误:
chroot: failed to run command ‘/bin/bash’: Exec format error
我知道这意味着架构不同。难道我做错了什么?
答案1
我时不时地使用 ARM chroot:我的手机运行 Linux Deploy,但镜像时不时就会死掉。然后我将其复制到我的计算机并使用 chroot 检查情况,如下所示:
# This provides the qemu-arm-static binary
apt-get install qemu-user-static
# Mount my target filesystem on /mnt
mount -o loop fs.img /mnt
# Copy the static ARM binary that provides emulation
cp $(which qemu-arm-static) /mnt/usr/bin
# Or, more simply: cp /usr/bin/qemu-arm-static /mnt/usr/bin
# Finally chroot into /mnt, then run 'qemu-arm-static bash'
# This chroots; runs the emulator; and the emulator runs bash
chroot /mnt qemu-arm-static /bin/bash
答案2
重要的:请查看其他答案。这是旧的且不准确的答案。
你不能 chroot 到不同的架构中。通过 chroot,您可以在您的架构上执行二进制文件(来自 chroot)。在 x86(以及 x86_64)上执行 ARM 二进制文件将导致“执行格式错误”。
如果您想运行来自不同架构的二进制文件,您将需要一个模拟器。 Qemu 是一个很好的选择,但您需要学习如何使用它。这将涉及创建 RootFS 并为 ARM 编译内核。您可能需要一个用于编译 ARM 二进制文件(和内核)的工具链。有一点是肯定的:忘记 chroot 方法,您无法在 x86 (x86_64) 上运行为 ARM 编译的二进制文件。
编辑: 在与 @UrichDangel 闲聊之后,我意识到,应该可以使用 qemu-user 程序(在本例中为 qemu-arm)进入 chroot 环境。 Chroot 应该执行为您的主机架构编译的 qemu-arm,然后 qemu-arm 可以执行您的 /bin/sh (为 arm 编译)。
答案3
在 Arch 上,安装qemu-user-static
和binfmt-qemu-static
来自 AUR 。
然后确保将其复制qemu-*-static
到usr/bin/
您想要 chroot 的目录中,然后chroot
应该可以使用类似的内容chroot /mnt qemu-arm-static /bin/bash
答案4
您绝对可以“chroot”到适用于不同架构的(已安装)文件系统并做一些有意义的工作,您只需要正确的工具即可。
看一下 PRoot,它是 chroot、mount --bind 和 binfmt_misc 的用户空间实现:https://proot-me.github.io/
与 QEMU 的用户模式模拟器一起,一切都已准备就绪。
虽然您通常无法执行“完全”启动(即启动 init 和服务),但从“自然”位置运行一些二进制文件就足够了,可以访问它们的所有配置文件,包括一些从“主机”系统等