[閒聊] 可將x86指令轉換成ARM的Box86

作者: ivon852 (ASUS)   2022-01-05 15:23:04
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。
作者: NoyVaughty (吃貨)   2022-01-06 21:38:00
推推
作者: mgdesigner (機槍設計師)   2022-01-06 23:09:00
cool!
作者: Bencrie   2022-01-06 23:48:00
跟 multiarch + qemu-system-x86 比有什麼優勢嗎
作者: bitlife (BIT一生)   2022-01-07 09:02:00
確實cool, 不過倒是比較想用 BoxARM如果有的話
作者: Bencrie   2022-01-07 09:20:00
查了一下 box86 有做到 library 層的轉接,會比只有模擬到 syscalls 的 qemu 更快

Links booklink

Contact Us: admin [ a t ] ucptt.com