致謝
本文得以成文,得到exagear吧小吧主在那老虎山上的指導(dǎo)口锭,在此致謝胀溺。
起因
雖然目前國內(nèi)外民間高手修改了熊哥的exagear,使其能部分利用手機(jī)硬件加速唬格,但由于exagear的核心實(shí)現(xiàn)沒有本質(zhì)變化家破,還是不自由。并且二者只是x86解釋器不同购岗,原理上是可通用互換的汰聋。exagear實(shí)現(xiàn)了一個(gè)binfmt,同時(shí)組件集成度高喊积,用戶友好度高烹困,理論上更復(fù)雜,只是官方停止了維護(hù)乾吻,同時(shí)不好修改適應(yīng)私人環(huán)境髓梅。box86開源,定制度高绎签,更像一個(gè)x86指令模擬器枯饿,可根據(jù)私人手機(jī)調(diào)優(yōu)參數(shù)和效率。
本文采取termux+proot+box86+wine
方式诡必,配合mesa開源驅(qū)動奢方,效率上和exagear相當(dāng)。
安裝termux和proot Linux
可以參考拙文安卓上運(yùn)行Linux。
實(shí)現(xiàn)硬件加速
opengl方式
根據(jù)手機(jī)gpu的型號袱巨,看是否支持zink阁谆,tunip,分別選擇github上各大神修改的mesa版本愉老。
編譯mesa可以選擇在termux中直接編譯场绿,前述拙文中有高手文章教程。這個(gè)難度較大嫉入,除了下載特定修改版本焰盗,可能還需要手工修改代碼。低端手機(jī)可能不支持zink咒林,需要修改印度大神DLC01的mesa中/src/gallium/drivers/zink/zink_resource.c的map_resources函數(shù)熬拒,這樣可以實(shí)現(xiàn)軟zink,大約能提高10-20幀垫竞。
在proot中相對簡單(然而官方版本不能直接調(diào)用安卓庫澎粟,只能使用llvmpipe),只需要proot的linux版本足夠新欢瞪,比如建議ubuntu18以上活烙。編譯環(huán)境一般只要一條命令:
apt-get build-dep mesa
然后編譯,例如mesa官方22.20:
meson .. -Dgallium-va=false -Ddri-drivers= -Dgal
lium-drivers=virgl,zink,swrast
-Ddri3=true -Dvulkan-drivers=freedreno
-Dglx=xlib -Dplatforms=x11
少量依賴可根據(jù)編譯信息補(bǔ)齊遣鼓。
dxvk方式
待更新......
box86編譯和環(huán)境變量
box86編譯非常簡單啸盏,教程文章較多,不贅述骑祟。
box86有兩個(gè)環(huán)境變量:
BOX86_PATH:
指向wine可執(zhí)行文件路徑
BOX86_LD_LIBRARY_PATH:
指向wine及box86依賴的庫
這里是一個(gè)移植在termux中執(zhí)行回懦,采用exagear的wine環(huán)境的示例腳本,大家看下應(yīng)該就能明白了:
配置xvfb和x11vnc
個(gè)人曾采用安卓的一些xserver軟件次企,發(fā)現(xiàn)相比xvfb怯晕,并沒有改善,而且操作體驗(yàn)極不方便抒巢。其它vnc方式則降速明顯贫贝。
客戶端強(qiáng)烈建議使用bvncFree,支持縮放蛉谜,等比屏幕稚晚,自動適配手機(jī)屏幕三種屏幕顯示,三種鼠標(biāo)手勢模式型诚,基本持平exagear操作體驗(yàn)客燕。如果非要exagear的操作模式,可以用exagear運(yùn)行一個(gè)32位的vncview狰贯,設(shè)置成全屏也搓,并反編譯exagear修改下屏幕分辨率數(shù)組把顯示分辨率調(diào)整適配一下赏廓。
virgl overlay的使用
同樣需要適配的mesa,注意在proot環(huán)境中啟動時(shí)需要指定編譯的libgl.so.1的LD_LIBRARY_PATH路徑傍妒,否則不能檢測到VTEST_SOCK幔摸。
其它問題
mesa的幾個(gè)環(huán)境變量:
GALLIUM_DRIVER:
指定使用的gallium驅(qū)動,如zink,llvmpipe
LIBGL_DRIVERS_PATH:
opengl的驅(qū)動路徑
其它問題可以留言詢問颤练,如果個(gè)人有空看到既忆,會盡力回答^_^