Raj*_*mar 0 linux ubuntu qemu chroot cpu-architecture
我在 root 权限下使用 termux。我的手机有 aarch64 cpu 架构。我正在尝试使用我见过的 amd64 架构来 chroot ubuntu 文件系统,这https://unix.stackexchange.com/a/222981 这是我的命令
sudo chroot ubuntu /bin/qemu-x86_64-static /bin/bash --login
我成功登录,但是当我运行命令
ls或任何命令时
它给出了一个错误,就像Exec format error
我用 qemu-x86_64-static 尝试了该命令一样,qemu-x86_64-static /bin/ls它成功执行了,有什么想法吗???
我想我可以为所有以 qemu-x86_64-static 开头的命令添加别名,但这不是一个好主意......
您需要告诉内核,当它看到 arm64 二进制文件时,应该通过启动 QEMU 来运行它。此机制称为“binfmt-misc”,要配置它,您需要以正确的格式将数据写入主机系统/proc/sys/fs/binfmt_misc/目录中的特殊文件。当您安装 QEMU 软件包时,大多数 Linux 发行版都会自动为您执行此操作,但显然 Android 不会为您执行此操作。
首先检查你的手机内核是否编译了 binfmt-misc 支持:应该有一个文件/proc/sys/fs/binfmt_misc/status,如果你cat读取它的内容,它应该读取enabled。如果没有,请尝试modprobe binfmt_misc。如果之后该status文件仍然不存在,那么您将无法使其正常工作,除非您可以以某种方式为您的手机构建新内核。
如果您的手机内核中存在支持,您可以尝试qemu-binfmt-conf.sh上游 QEMU 附带的脚本作为向 binfmt-misc 机器注册 QEMU 的机制:
https: //github.com/qemu/qemu/blob/master/scripts/ qemu-binfmt-conf.sh
(这只是一个将正确的数据行写入到的脚本/proc/sys/fs/binfmt_misc/register。)