Chroot

如何 chroot 進入具有不同架構的文件系統?

  • August 4, 2021

我正在chroot嘗試ARMx86_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

引用自:https://unix.stackexchange.com/questions/41889