Chroot
如何 chroot 進入具有不同架構的文件系統?
我正在
chroot
嘗試ARM
從x86_64
.我已經看到可以
qemu
通過將二進製文件複製到 chroot 系統來使用靜態:$ cp /usr/bin/qemu-arm archarm-chroot/usr/bin
但儘管如此,我總是收到以下錯誤:
chroot: failed to run command ‘/bin/bash’: Exec format error
我知道這意味著架構不同。難道我做錯了什麼?
**重要提示:**請查看其他答案。這是舊的和不准確的答案。
你不能 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 編譯)。
我不時使用 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