背景
在研发的过程中,我们经常发现我们的研发机器跟实际程序运行的机器的架构是不同的,这时候我们可以使用qemu-user-static包来运行、调试异构的程序。
方案
例如:我现在的是一个aarch64的linux机器,我开发了一个mips32的打印hello的程序。
➜ ~ uname -a
Linux ubuntu-linux-22-04-02-desktop 5.15.0-118-generic #128-Ubuntu SMP Fri Jul 5 09:30:28 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux
➜ ~ file ./main
./main: ELF 32-bit MSB executable, MIPS, MIPS32 version 1 (SYSV), statically linked, Go BuildID=jf3KvcC7wGWktQduCQ5r/9LA77qYZ5Ife0UELcJao/ac9VC_o1NkJi4dHc_lUo/lLqAyTKDzQcDhLcLNciN, stripped
首先通过apt安装qemu-user-static包
apt install qemu-user-static
安装完成后可以看到支持各种架构的qemu模拟程序:
➜ ~ ls /usr/bin/qemu-*-static
/usr/bin/qemu-aarch64-static /usr/bin/qemu-cris-static /usr/bin/qemu-microblaze-static /usr/bin/qemu-mipsel-static /usr/bin/qemu-ppc-static /usr/bin/qemu-s390x-static /usr/bin/qemu-sparc64-static
/usr/bin/qemu-aarch64_be-static /usr/bin/qemu-hexagon-static /usr/bin/qemu-microblazeel-static /usr/bin/qemu-mipsn32-static /usr/bin/qemu-ppc64-static /usr/bin/qemu-sh4-static /usr/bin/qemu-x86_64-static
/usr/bin/qemu-alpha-static /usr/bin/qemu-hppa-static /usr/bin/qemu-mips-static /usr/bin/qemu-mipsn32el-static /usr/bin/qemu-ppc64le-static /usr/bin/qemu-sh4eb-static /usr/bin/qemu-xtensa-static
/usr/bin/qemu-arm-static /usr/bin/qemu-i386-static /usr/bin/qemu-mips64-static /usr/bin/qemu-nios2-static /usr/bin/qemu-riscv32-static /usr/bin/qemu-sparc-static /usr/bin/qemu-xtensaeb-static
/usr/bin/qemu-armeb-static /usr/bin/qemu-m68k-static /usr/bin/qemu-mips64el-static /usr/bin/qemu-or1k-static /usr/bin/qemu-riscv64-static /usr/bin/qemu-sparc32plus-static
最后我们使对应架构的qemu模拟器运行我们的异构程序,可以看到程序正常运行打印了 预期的hello。
➜ ~ qemu-mips-static main
hello#
总结
利用qemu可以可以快速验证我们的异构程序。