我正在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 和服務),但從“自然”位置運行一些二進位就足夠了,可以訪問它們的所有配置文件,包括一些從“主機”系統等