看板 Linux 關於我們 聯絡資訊
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://www.ptt.cc/bbs/Linux/M.1641367387.A.907.html
NoyVaughty: 推推 01/06 21:38
mgdesigner: cool! 01/06 23:09
Bencrie: 跟 multiarch + qemu-system-x86 比有什麼優勢嗎 01/06 23:48
bitlife: 確實cool, 不過倒是比較想用 BoxARM 01/07 09:02
bitlife: 如果有的話 01/07 09:02
Bencrie: 查了一下 box86 有做到 library 層的轉接,會比只有模擬 01/07 09:20
Bencrie: 到 syscalls 的 qemu 更快 01/07 09:21