1. qemu-user 是什么
本来, 对于 QEmu, 我只知道它是一个模拟器, 可以像 VirtualBox/VMWare 那样跑一个操作系统, 只不过 QEmu 可以在 AMD64 上面跑针对 PowerPC, ARM 的操作系统, 当然, CPU 指令是解释执行的, 相对来说比较慢.
但是前几天折腾 CentOS/Fedora 上面的rpm构建工具mock时才发现, 原来 QEmu 还有一种运行方式, 那就是跟wine的运行方式相同: 直接运行程序文件.在这种模式下, 这个针对 PowerPC或者ARM编译的程序, 就比较像一个本地程序, 它跟本机的Linux内核打交道, 进行系统调用, 访问本地文件(其实是通过qemu进行)和本地设备.
在 QEmu 的术语中, 前面那种运行整个操作系统的方式, 称为"full system emulation", 在 Ubuntu/CentoS 由软件包 qemu-system-xxx (比如qemu-system-ppc, qemu-system-aarch64, qemu-system-arm)提供功能;后面这种运行单个程序文件的方式, 称为"user mode emulation", 由软件包qemu-user或者qemu-user-static提供功能(注意没有细分为qemu-user-ppc, qemu-user-arm, 不过这也许只是因为这些模拟器文件都不大, 就揉到了一个包里面.至于qemu-user和qemu-user-static的区别, 现在只需要知道后者是静态链接版本, 至于在什么场景下需要用到哪一种, 以后再来说).
1.1. 举个例子
这里举个例子说明一下应用场景:在树莓派 2 (CPU是armv7) 上面跑针对 i386 编译的linux程序.
我在命令行上工作是, 喜欢用一个叫做 fzf 的小程序 (这类程序我以前介绍过: 命令行上的narrowing(随着输入逐步减少备选项)工具 -