MIPS-I固件QEMU模拟出现Illegal Instruction错误如何解决?
QEMU模拟MIPS-I固件Illegal Instruction错误解决方案
核心原因是架构兼容性不匹配:你使用的4kc内核对应MIPS32 R2及以上架构,默认配置下对更老的MIPS-I架构指令支持不完整,导致busybox执行时触发非法指令报错。
解决步骤如下:
- 调整QEMU启动参数,明确指定兼容MIPS-I的CPU型号。修改原启动命令为:
qemu-system-mipsel -M malta -cpu 24Kc -kernel vmlinux-3.2.0-4-4kc-malta -hda debian_wheezy_mipsel_standard.qcow2 -append "root=/dev/sda1" -nographic -redir tcp:2222::22
24Kc CPU支持MIPS-I指令集向下兼容,可解决大部分指令不识别问题。 - 若调整CPU参数后仍报错,改用静态QEMU用户模式中转执行chroot。首先在启动后的Debian模拟环境中安装qemu-user-static:
apt update && apt install -y qemu-user-static
将静态编译的qemu-mipsel-static复制到固件根目录下的对应路径,再执行chroot命令:cp /usr/bin/qemu-mipsel-static ./usr/bin/ && chroot ./ /usr/bin/qemu-mipsel-static /bin/sh - 检查固件根文件系统完整性:确认
./lib/ld-uClibc.so.0解释器文件存在,且./bin/sh的架构和busybox完全一致,解释器缺失或架构不匹配也会触发该错误。 - 若以上方案无效,更换专门适配MIPS-I架构的内核镜像,替换当前的3.2.0-4-4kc-malta内核后再启动模拟。
补充说明:如果仅需要单独测试固件内的二进制,不需要启动完整系统,可直接在x86宿主系统中安装qemu-user-static,直接使用
qemu-mipsel-static -L ./ ./bin/busybox命令执行测试,无需启动qemu-system虚拟机。
内容的提问来源于stack exchange,提问作者Rolling
相关产品推荐
相关产品推荐

