![通过 qemu 在 Debian armel 上运行 Debian i386 二进制文件](https://linux22.com/image/21361/%E9%80%9A%E8%BF%87%20qemu%20%E5%9C%A8%20Debian%20armel%20%E4%B8%8A%E8%BF%90%E8%A1%8C%20Debian%20i386%20%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6.png)
我正在尝试跟随本指南在我的 SheevaPlug 上设置 Ventrilo 服务器,运行 Debian armel。此页面指出我可以使用 QEMU 在我的 Arm 系统上运行为 i386 制作的二进制文件。
qemu 的设置说我需要安装 qemu、qemu-user 和 qemu-libc-i386。我找到了前两个apt-get, 但qemu-libc-i386不是一个包。所以我尝试运行 qemu 来运行 ventrilo 服务器,如下所示:
# qemu-i386 ./ventrilo_srv
/lib/ld-linux.so.2: No such file or directory
看来这ld-linux.so.2
是我在 armel as 中的 i386 版本ld-linux.so.3
。
所以我知道如何操作是针对不同的 Linux 发行版的,但似乎我应该能够在 Debian 中运行它,如果他们可以在他们疯狂的发行版中运行的话。我可以获得一个可以安装的软件包libc-i386这样我就可以让它运行(类似于ia32 库对于 x64 系统?)我也尝试so.2
从另一个 i386 系统复制,但这并没有让我有任何进展。
答案1
是的,您可以在 QEmu 中运行 x86 二进制文件,并且 QEmu 在 ARM 处理器上运行。它会非常慢,因为 QEmu 对 x86 处理器进行软件模拟,你可能会发现自己缺少 RAM,但它可以工作。
该qemu-user
软件包包含虚拟机本身,即 x86 处理器和一些硬件设备的模拟器以及在该硬件上运行的 Linux 内核。 (该qemu-system
软件包包含一个硬件模拟器,您可以在上面安装您选择的操作系统。)您仍然需要使用运行时环境填充虚拟机,包括/lib/ld-linux.so.2
(动态加载程序,运行任何动态链接的可执行文件所必需的)和一堆图书馆。这就是qemu-libc-i386
Optware 上的软件包所提供的。它有点类似于ia32-libs
amd64 系统,但要简单得多,因为 amd64 处理器可以本机执行 i386 二进制文件;这里您需要在 x86 VM 中拥有库。
您可以尝试抓住qemu-libc-i386
来自 Optware 的软件包。 Optware 软件包格式与 Debian 非常接近,因此您可以手动将 ipk 转换为 deb:
mkdir tmp
wget http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/qemu-libc-i386_2.3.6-1_arm.ipk
tar xzf qemu-libc-i386_2.3.6-1_arm.ipk
ar rc qemu-libc-i386_2.3.6-1_arm.deb debian-binary control.tar.gz data.tar.gz
我不保证这会起作用。您可能需要确保 QEmu 的版本匹配。
如果安装修改后的 ipk 不起作用,请尝试在您的系统上复制其内容。在某处解压data.tar.gz
(或从其他 x86 系统获取相同的文件),查看postinst
脚本的control.tar.gz
作用,并提供qemu-i386
.
答案2
我通过复制我的 PC i386 解决了 ARM 设备上的问题ld-linux.so.2如下 :
scp /lib/ld-linux.so.2 [email protected]:/lib
然后复制所有需要的共享库。就我而言,在复制它们之前,我已将它们全部组织到设备内的一个新文件夹中:
mkdir /lib/i386-linux-gnu
scp /usr/lib/i386-linux-gnu/libstdc++.so.6 [device]:/lib/i386-linux-gnu
scp /usr/lib/i386-linux-gnu/libgcc_s.so.1 [device]:/lib/i386-linux-gnu
scp /usr/lib/i386-linux-gnu/libc.so.6 [device]:/lib/i386-linux-gnu
scp /usr/lib/i386-linux-gnu/libm.so.6 [device]:/lib/i386-linux-gnu