首發(fā)地址:https://mp.weixin.qq.com/s/1e8er_amC94DTVCaNbSuUw
前言
折騰這玩意倒不是為了用來玩游戲啥的码党,只是想在逆向APP的時候少一點對手機的依賴德崭。畢竟手機刷機步驟也挺煩,一不留神還容易變磚揖盘。
像一些對環(huán)境檢測不嚴格的APP就可以在上面測試眉厨,也方便后面更改系統(tǒng)源碼刷機。不過可惜的是無法自定義內(nèi)核(redroid和Waydroid都是走的容器方案兽狭,和主機共享內(nèi)核)憾股,想自定義內(nèi)核只能用谷歌的cuttlefish或者avd,但是這些在arm上的支持很有限箕慧,可以運行但也是沒有GPU加速服球,后面折騰下cuttlefish。
刷Ubuntu
香橙派刷Ubuntu的過程就不說了销钝,有興趣的看之前那篇文章:香橙派5plus從ssd啟動Ubuntu有咨。刷這個系統(tǒng)的話,運行redroid就不需要再安裝配置啥了蒸健。不過座享,如果要用虛擬WIFI或者ebpf的話,還是得修改內(nèi)核參數(shù)自己編譯linux內(nèi)核來實現(xiàn)似忧,這個下篇文章具體說編譯過程渣叛。
redroid
官方教程:https://github.com/remote-android/redroid-doc
檢查必要條件
grep binder /proc/filesystems
grep ashmem /proc/misc
如果什么也沒打印,則可能需要手動啟動(我在一臺安裝Ubuntu的鯤鵬920的機器使用下面兩個命令就可以了盯捌,這個機器雖然帶的amd的顯卡淳衙,但是也無法直接調(diào)用GPU)
sudo modprobe ashmem_linux
sudo modprobe binder_linux devices=binder,hwbinder,vndbinder
如果這兩個命令報錯或是沒效果,可能是當前使用的linux內(nèi)核沒有開啟這兩個功能饺著,則需要參考下面的倉庫說明來安裝支持的內(nèi)核或是編譯一個內(nèi)核開啟這兩項功能:https://github.com/remote-android/redroid-modules
GPU加速
使用官方的docker鏡像能啟動箫攀,就是沒有GPU加速,視頻走的軟解(cpu模擬)幼衰,所以操作起來比較卡靴跛,在github的issue[1]里搜索rk3588可以看到幾條GPU加速有關(guān)的評論。
但之前一直沒人分享具體是怎么編譯帶GPU加速的鏡像渡嚣,評論里只能得出一個有點幫助的結(jié)論:從香橙派官方的SDK源碼中獲取到一些GPU加速相關(guān)的驅(qū)動文件梢睛,放到安卓源碼內(nèi)一起編譯肥印。或者直接將這些文件復(fù)制到docker容器中绝葡,重新啟動容器深碱。
這個結(jié)論太模糊了,肯定有很多坑藏畅,我就一直沒試敷硅。直到有一個大佬發(fā)出了完整的編譯過程和源碼[2]:
教程寫的很詳細,按照步驟來編譯一次就通過了墓赴。另外竞膳,還有大佬[3]在這個鏡像的基礎(chǔ)上增加了一個東西。
所以這里使用這位大佬的鏡像[4]诫硕,在這之前先看一下他提到的依賴(內(nèi)核版本5.10.160和mali ddk g18p0):
那應(yīng)該沒問題坦辟,還提到要將mali_csffw.bin
文件拷貝到/lib/firmware/
下,我看了下這個文件夾下是有這個文件的
默認是鏈接的g15p0
章办,所以我們把這個軟鏈接刪了锉走,創(chuàng)建一個新的鏈接到g18p0
。不過經(jīng)過測試藕届,用g15p0
版本redroid容器也能正常使用GPU挪蹭。
測試刷視頻也還可以,只能說不算卡吧休偶,也不算流暢梁厉,畢竟現(xiàn)在手機配置已經(jīng)很高了,比這個開發(fā)板流暢多了踏兜。
安裝docker
sudo apt install docker.io -y
sudo usermod -aG docker $USER
sudo chmod a+rw /var/run/docker.sock
后兩行命令是為了普通用戶運行docker不需要加sudo词顾。
啟動容器
然后拉取鏡像: docker pull cnflysky/redroid-rk3588:12.0.0-latest
。
docker run -d --privileged \
-p 5555:5555 \
-v ~/redroid-data:/data \
--name redroid \
cnflysky/redroid-rk3588:12.0.0-latest androidboot.redroid_height=1920 androidboot.redroid_width=1080 androidboot.redroid_magisk=1 androidboot.redroid_virt_wifi=1
然后用adb連接這個端口(adb connect 192.168.31.208:5555
)就能用QtScrcpy
看到這個容器的桌面了
先裝個aida64看看顯卡調(diào)用是否正常:
顯卡渲染用的mali-G610那就沒問題碱妆,而且刷新率也有60hz肉盹,如果走的軟解刷新率只有15hz。
magisk
這個容器啟動的時候帶了一個androidboot.redroid_magisk=1
就是開啟magisk疹尾,所以開機之后直接就能看到magisk是正常運行的上忍,第一次點進去可能要你重啟,使用docker restart redroid
重啟后就能正常使用了纳本。
lsposed
先在magisk里開啟zygisk窍蓝,然后用adb push命令將lsposed的安裝包推到容器內(nèi)。接著在Modules里安裝繁成,然后重啟就能看到lsposed也是正常運行的吓笙。
隨便安裝一個xposed模塊就能進去lsposed的設(shè)置界面,
gapps
官方就有教程[5]說明怎么編譯帶gapps的docker鏡像朴艰,不過即使帶了gapps也過不了谷歌的safetynet
驗證观蓄,很多APP用不了。
issue里也有人問了祠墅,并沒有解決方案:https://github.com/remote-android/redroid-doc/issues/378
侮穿。下載的鏡像就有谷歌商店這些。
虛擬WIFI
看了issue毁嗦,如果不設(shè)置虛擬WIFI亲茅,有些軟件即使在有網(wǎng)的情況也會認定沒有網(wǎng)絡(luò),比如QQ狗准。因為它們只檢測WIFI和流量克锣,這兩個在docker容器里都是沒有的。但是我測試發(fā)現(xiàn)腔长,有虛擬WIFI很多軟件會顯示沒網(wǎng)袭祟,沒開虛擬WIFI就正常聯(lián)網(wǎng),所以建議別開捞附,知道有這么個東西就行了巾乳。
所以需要給容器里弄一個虛擬WIFI,需要內(nèi)核支持[6]
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
切換為ip6tables-legacy
后鸟召,docker需要重啟服務(wù)sudo systemctl restart docker
胆绊,重啟機器都沒用,會導(dǎo)致容器沒網(wǎng)欧募。
而安裝的這個系統(tǒng)內(nèi)核沒有開啟這個參數(shù)压状,zcat /proc/config.gz | grep CONFIG_MAC80211_HWSIM
github提供的內(nèi)核代碼編譯起來很簡單,基本一步到位就能編譯跟继,但可惜的是沒有提供修改內(nèi)核參數(shù)的選項种冬,并且當你修改了內(nèi)核配置文件時,在編譯的時候它又會改回來还栓。
折騰了幾天碌廓,把issue里的問題都翻遍了也沒有找到答案,無奈只能自己去看編譯腳本剩盒,這個具體的過程放到下一篇文章來說谷婆,這里提供編譯好的內(nèi)核。
更新內(nèi)核
內(nèi)核deb包下載地址辽聊,系統(tǒng)用的Ubuntu22[7]:https://www.123pan.com/s/ihEKVv-TbOx.html
提取碼: AZ3A
纪挎。除了上面那個參數(shù),我還添加的ebpf相關(guān)的參數(shù)跟匆,這個后面再說异袄。
先用uname -a
查看下當前的內(nèi)核信息
首先把編譯好的內(nèi)核文件傳到機器上,然后運行sudo dpkg -i *.deb
,一共有五個deb文件玛臂,第一個是構(gòu)建信息烤蜕,可以不安裝封孙。
接著使用sudo reboot
重啟,在看內(nèi)核信息的時間。
內(nèi)核參數(shù)也是正常開啟:
坑1
更新完內(nèi)核重啟后,原先創(chuàng)建的容器沒網(wǎng)了共螺,只有后面創(chuàng)建的容器才能正常上網(wǎng)。最開始我還以為是內(nèi)核有問題膜蠢,還得我又把系統(tǒng)刷了一遍,內(nèi)核重新編譯了一遍莉兰。
坑2
雖然有網(wǎng)挑围,但是b站視頻刷不出來,只能刷新首頁糖荒,瀏覽器也訪問不了網(wǎng)頁杉辙。(注意:要先去設(shè)置里連接虛擬WIFI才有網(wǎng))
根據(jù)這個里面的說明:https://github.com/CNflysky/redroid-rk3588/issues/2
保證只有無線連接?雖然我沒理解什么意思捶朵,難道是只能由一個路由奏瞬,看ip route
默認是有兩個路由的
第二個是虛擬WIFI,那要不我把第一個刪了試試: ip route del 192.168.200.0/24 dev radio0 proto kernel scope link src 192.168.200.2
發(fā)現(xiàn)有時候有網(wǎng)泉孩,視頻能播放出來硼端,大部分時候都很卡,要一些時間才能加載出視頻來寓搬,但是刷新首頁又很快珍昨,加載評論也很快。改dns也沒用句喷,后面再試試其他軟件會不會也是這樣镣典。
vpn
可以參考:https://github.com/CNflysky/redroid-rk3588/issues/5
,我就不試了唾琼⌒执海看redroid的說明,啟動的時候也可以指定代理锡溯。如果全局設(shè)置vpn的話赶舆,adb可能會斷開連接。
音頻
可能會失敗祭饭,多試幾次就可以了
引用鏈接
- [1]
https://github.com/remote-android/redroid-doc/issues?q=rk3588
- [2]
https://github.com/redroid-rockchip
- [3]
https://blog.csdn.net/CNflysky/article/details/136452455
- [4]
https://github.com/CNflysky/redroid-rk3588
- [5]
https://github.com/remote-android/redroid-doc/blob/master/android-builder-docker/README.md
- [6]
https://github.com/redroid-rockchip/vendor_redroid_ext/tree/master/wifi
- [7]
https://github.com/Joshua-Riek/ubuntu-rockchip/releases