Jiv*_*ngs 47 chroot qemu arch-arm
我试图chroot进入的Arch LinuxARM的文件系统x86_64。
我已经看到可以qemu通过将二进制文件复制到 chroot 系统来使用静态:
$ cp /usr/bin/qemu-arm archarm-chroot/usr/bin
Run Code Online (Sandbox Code Playgroud)
但尽管如此,我总是收到以下错误:
chroot: failed to run command ‘/bin/bash’: Exec format error
Run Code Online (Sandbox Code Playgroud)
我知道这意味着架构不同。难道我做错了什么?
Luc*_*Luc 47
我不时使用 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
Run Code Online (Sandbox Code Playgroud)
0xA*_*xAF 15
你不能 chroot 进入不同的架构。通过 chrooting,您正在架构上执行二进制文件(来自 chroot)。在 x86(以及 x86_64)上执行 ARM 二进制文件会导致“Exec 格式错误”。
如果您想运行来自不同架构的二进制文件,您将需要一个模拟器。Qemu 是一个很好的候选者,但您需要学习如何使用它。这将涉及创建 RootFS 并为 ARM 编译内核。您可能需要一个工具链来编译 ARM 二进制文件(和内核)。有一件事是肯定的:忘记 chroot 方法,你不能在 x86 (x86_64) 上运行为 ARM 编译的二进制文件。
编辑: 在与@UrichDangel 闲聊后,我意识到,应该可以使用 qemu-user 程序(在这种情况下为 qemu-arm)进入 chroot 环境。Chroot 应该执行为您的主机架构编译的 qemu-arm,然后 qemu-arm 可以执行您的 /bin/sh(为 arm 编译)。
Chr*_*olf 10
我认为问题是你不应该复制qemu-arm而是qemu-arm-static. 这是一个静态编译的可执行文件,无需任何库即可从 chroot 内部运行。
您也可以查看/proc/sys/fs/binfmt_misc是否存在文件qemu-arm。如果没有重启服务binfmt_support。
小智 9
在 Arch 上,从 AUR安装qemu-user-static和安装binfmt-qemu-static。
然后确保将 复制qemu-*-static到usr/bin/您想要 chroot到的目录中,然后chroot应该使用类似的东西chroot /mnt qemu-arm-static /bin/bash
小智 6
我相信,对于这个 OP,他所需要做的就是配置 binfmts,只需运行:
update-binfmts --enable qemu-arm
Run Code Online (Sandbox Code Playgroud)
运行此命令后,就可以 chroot 进入arm文件系统了。
| 归档时间: |
|
| 查看次数: |
71012 次 |
| 最近记录: |