作者ivon852 (内容农场杀手)
看板Linux
标题[闲聊] 可将x86指令转换成ARM的Box86
时间Wed Jan 5 15:23:04 2022
Box86/Box64这套开源软体可将x86的Linux程式转译成ARM的指令,以Userspace执行,并使
用Dynamic recompilation提升转换效率,使得ARM平台也能够执行x86程式。
https://i.imgur.com/dObYjE8.png
实际例子: ARM64的Proot Ubuntu,透过box64执行只有amd64版的Minecraft基岩版伺服器软
体。
https://i.imgur.com/UGCv7Be.png
那还有什麽Linux程式一定要用x86版的? Wine就是一个例子。
(注: 为方便讨论,下文「x86」指电脑CPU架构,「x86_64」包含amd64、x64)
## Box86/Box64的应用
Wine虽能执行Windows exe程式,但也是仅限x86架构的装置能执行。若在ARM架构的装置,
如树莓派或手机要跑ARM版Wine也是可以,但是只能执行「ARM版的Windows exe」,因为Win
e不包含跨架构模拟。
因此安装Box86/Box64充当转译器,翻译x86版Wine的指令,这样就可以在ARM平台透过Wine
执行Windows的程式。
## 实际执行模式探讨
Box86/Box64从[Github](
https://github.com/ptitSeb/box86) clone下来编译後就能使用
。
box + wine的指令如下:
```
box86 wine <exe>
```
或者
```
box64 wine64 <exe>
```
Wine主要是执行32位元的Windows exe,针对64位元exe另有Wine64。尽管Wine64相容Wine32
,但是bug很多不该混用。
Box86/Box64亦是如此,执行时後面要接对应位元的Linux程式才能正确执行。
也就是说,假设有一个64位元的notepad.exe,指令就应该是:
```
box64 wine64 notepad.exe
```
图: Android Proot Ubuntu透过Box64 + Wine64执行Notepad++
https://i.imgur.com/EacC29t.png
## Box86/Box64的限制
因为严格对应位元,64位元的系统若要编译Box86,需要使用chroot或者启用MultiArch,不
然的话Box86就只能在32位元系统运作。
同样,Wine本身开不起来的exe,透过Box86或Box64也是一样开不起来。
## 结语
尽管模拟会损失效能,但这是补足ARM平台软体的一个解决方案。通常Linux软体不会只释出
一种架构,但若真碰到了,Box86/Box64或许能帮得上忙,更重要的是Box86是开源的技术。
顺带一提,类似的x86转ARM程式还有Wine官方的Hangover、Eltech的Exagear、苹果的Roset
ta 2、微软的x86模拟器等等;当然也有反过来的例如Intel Houdini。
--
https://i.imgur.com/qBnCgUO.jpg
https://i.imgur.com/klpjZcQ.jpg
https://i.imgur.com/yLTmoHs.jpg
https://i.imgur.com/WepO17T.jpg
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.176.66.2 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Linux/M.1641367387.A.907.html
1F:推 NoyVaughty: 推推 01/06 21:38
2F:推 mgdesigner: cool! 01/06 23:09
3F:推 Bencrie: 跟 multiarch + qemu-system-x86 比有什麽优势吗 01/06 23:48
4F:→ bitlife: 确实cool, 不过倒是比较想用 BoxARM 01/07 09:02
5F:→ bitlife: 如果有的话 01/07 09:02
6F:推 Bencrie: 查了一下 box86 有做到 library 层的转接,会比只有模拟 01/07 09:20
7F:→ Bencrie: 到 syscalls 的 qemu 更快 01/07 09:21