如何 chroot 到具有不同架構的檔案系統?

如何 chroot 到具有不同架構的檔案系統?

我正在chroot嘗試ARMx86_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-staticbinfmt-qemu-static來自 AUR 。

然後確保將其複製qemu-*-staticusr/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 和服務),但從“自然”位置運行一些二進位就足夠了,可以訪問它們的所有配置文件,包括一些從“主機”系統等

相關內容