【问题标题】:Bus error when attempting to run Wine under a x86 chroot environment on Raspberry Pi尝试在 Raspberry Pi 上的 x86 chroot 环境下运行 Wine 时出现总线错误
【发布时间】:2019-08-26 18:50:24
【问题描述】:

按照https://www.novaspirit.com/2019/04/15/run-x86-arm/ 的教程进行一些修改后(我使用/x86/ 作为chroot 目录并通过apt-get 安装wine),尝试运行winecfg 只是返回“总线错误”

这是在 Raspberry Pi 4 上运行的。错误是如此非描述性,以至于我无法通过我的故障排除尝试找到任何地方。

以下是我为安装它而运行的每个命令的完整列表:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get update && sudo apt-get install qemu qemu-user qemu-user-static binfmt-support debootstrap binutils
sudo mkdir /x86/
sudo debootstrap --foreign --arch i386 stretch /x86 http://ftp.us.debian.org/debian
sudo mount -t sysfs sys /x86/sys/
sudo mount -t proc proc /x86/proc/
sudo mount --bind /dev /x86/dev/
sudo mount --bind /dev/pts /x86/dev/pts/
sudo mount --bind /dev/shm /x86/dev/shm/
sudo cp /usr/bin/qemu-i386-static /x86/usr/bin/
sudo chroot /x86/ /debootstrap/debootstrap --second-stage
sudo chroot /x86/ /bin/su -l root
echo "export LANGUAGE='C'" >> .bashrc
echo "export LC_ALL='C'" >> .bashrc
echo "export DISPLAY=:0" >> .bashrc
source ~/.bashrc
apt update
adduser -uid 1000 pi
apt install leafpad
exit
sudo chroot /x86/ /bin/su -l pi
echo "export LANGUAGE='C'" >> .bashrc
echo "export LC_ALL='C'" >> .bashrc
echo "export DISPLAY=:01" >> .bashrc
source ~/.bashrc
exit
sudo chroot /x86/ /bin/su -l root
apt install wine
exit
sudo chroot /x86/ /bin/su -l pi
winecfg

当我尝试运行 winecfg 或使用 wine 运行时,我只收到错误 Bus Error

【问题讨论】:

  • 我认为 qemu 并没有像 WINE 所期望的那样模拟真实 x86 系统的所有细节。看起来您正在使用 qemu-user;您是否在 Google 上搜索过 qemu-user 上的 WINE 是否受支持,或者是否已知不工作?根据wiki.winehq.org/Emulation,也许。如果您想调试 WINE 和/或 qemu,请尝试使用 strace 找出系统调用 winecfg 在引发 SIGBUS 时正在执行什么操作,或者如果由于(来宾)用户空间操作而发生这种情况,它会执行什么操作.

标签: x86 arm cross-platform chroot x86-emulation


【解决方案1】:

Raspbian Buster 存储库中的 qemu 二进制文件源自较旧的源代码版本,其中包含一组不幸的错误。

一种解决方法是修改您的过程以使用带有 x86_64 chroot 的 qemu-x86_64-staticwine64[1]

或者,您可以从源代码构建更新版本的qemu-i386-user。如果你有 Debian Buster x86_64 系统,交叉编译说明如下:

git clone git://git.qemu-project.org/qemu.git
cd qemu
sudo dpkg --add-architecture armhf
sudo apt-get update
sudo apt-get install -y g++-arm-linux-gnueabihf flex bison libglib2.0-dev:armhf
./configure --cross-prefix=arm-linux-gnueabihf- --prefix=$(pwd)/usr --static --target-list="i386-linux-user x86_64-linux-user " --enable-linux-user --disable-system
make && make install
cd usr/bin
for f in *; do mv $f $f-static; done

引用的线程还包含指向此类测试构建的链接。

[1]https://www.raspberrypi.org/forums/viewtopic.php?f=41&t=226376&start=72

【讨论】:

  • 也可以使用apt install ninja-build 来编译最新版本的 QEMU。大多数较新的 Raspberry Pi 模型都有足够的内存来自行编译(不再需要交叉编译);此方法提供的二进制文件替换了qemu-user-static 包中的二进制文件,更新后pi 可能需要重新启动(请记住为chroot 重新挂载proc 等)。但是,当我尝试运行wine notepad 时,我现在收到page_set_flags 断言失败(和非法指令),所以我想知道我们是否需要qemu 存储库的已知良好提交(提交8011837a 匹配答案日期)
  • 不幸的是,即使在提交 8011837a 时,我仍然遇到 assert 问题
猜你喜欢
  • 2019-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多