aarch64架构Termux下chroot amd64 Ubuntu执行命令报Exec format error
出现该问题是因为系统未配置binfmt_misc规则,无法自动识别x86_64架构ELF二进制并调用对应qemu静态仿真程序执行,因此需要手动添加规则。所有操作需在Termux宿主环境的root权限下执行,无需提前进入chroot。
操作步骤
挂载binfmt_misc文件系统
执行命令:mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
如果系统提示already mounted可直接跳过该步骤。注册x86_64 ELF识别规则
执行命令:echo ':qemu-x86_64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00:\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/bin/qemu-x86_64-static:OCF' > /proc/sys/fs/binfmt_misc/register验证规则生效
执行命令:cat /proc/sys/fs/binfmt_misc/qemu-x86_64
输出内容包含enabled字样即说明规则注册成功。正常chroot进入目标系统
执行你之前的chroot命令即可:sudo chroot ubuntu /bin/qemu-x86_64-static /bin/bash --login
进入系统后直接执行ls等x86_64原生命令即可正常运行,无需额外添加qemu前缀。
注意事项
- 上述
binfmt_misc规则为临时生效,设备重启后会丢失,如需持久化可将挂载、注册规则的命令添加到Termux的开机启动脚本中(如/data/data/com.termux/files/usr/etc/profile)。 - 需确保chroot目标目录下
/bin/qemu-x86_64-static文件存在且权限正常,路径与注册规则中填写的路径完全一致,否则仍会出现执行报错。 - 如需删除已注册的规则,执行
echo -1 > /proc/sys/fs/binfmt_misc/qemu-x86_64即可。
内容的提问来源于stack exchange,提问作者Rajmani Kumar

