在Arch Linux中使用Qemu运行MIPS二进制文件遇报错求助
解决Arch Linux上Qemu-MIPS复制到固件目录执行报错的问题
嘿,我来帮你梳理下这个问题——把qemu-mips复制到固件根目录后执行报错,大概率是动态链接库依赖缺失或者QEMU用户模式的环境配置没到位,毕竟Arch官方的qemu-mips是针对主机系统编译的动态链接版本,直接丢到固件环境里,它找不到对应的依赖库,自然会报错。
1. 先明确具体报错信息
首先你得先拿到准确的错误输出,这样才能精准定位问题。在固件目录下执行:
./qemu-mips 2>&1
如果是类似error while loading shared libraries: libxxx.so.xx: cannot open shared object file: No such file or directory,那就是动态库的问题,直接看后面的静态编译方案就行。
2. 使用静态编译的Qemu-MIPS
Arch默认的qemu-mips是动态链接的,依赖主机系统的glibc等库,固件环境里没有这些库,所以需要静态编译一个不依赖外部库的版本:
- 先安装编译依赖:
sudo pacman -S base-devel git qemu-utils - 克隆QEMU源码并编译静态版:
git clone https://git.qemu.org/git/qemu.git cd qemu ./configure --static --target-list=mips-linux-user --disable-system make -j$(nproc) - 编译完成后,在
build/mips-linux-user/目录下找到qemu-mips,把它复制到固件根目录,再执行就不会有动态库的问题了。
3. 用binfmt_misc配合chroot(更简便的方案)
其实根本不需要把qemu-mips复制到固件目录,通过配置主机的binfmt_misc,可以让系统自动识别MIPS二进制并调用qemu-mips来运行:
- 安装
binfmt-support包:sudo pacman -S binfmt-support - 注册MIPS二进制的处理规则:
echo ':mips:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-mips:' | sudo tee /proc/sys/fs/binfmt_misc/register - 然后直接chroot到固件目录运行你的MIPS二进制就行:
sudo chroot ./固件根目录 /path/to/你的MIPS二进制文件
4. 检查基础配置
最后再确认两个基础点:
- 确保
qemu-mips有可执行权限:执行chmod +x ./qemu-mips - 确认你的MIPS二进制是32位大端(对应
qemu-mips),如果是小端需要用qemu-mipsel,64位则用qemu-mips64/qemu-mips64el
内容的提问来源于stack exchange,提问作者user3408678
相关产品推荐
相关产品推荐

