香橙派5plus上跑雲手機方案一 redroid(帶硬體加速)

Python成长路發表於2024-07-05

首發地址:https://mp.weixin.qq.com/s/1e8er_amC94DTVCaNbSuUw

前言

折騰這玩意倒不是為了用來玩遊戲啥的,只是想在逆向APP的時候少一點對手機的依賴。畢竟手機刷機步驟也挺煩,一不留神還容易變磚。

像一些對環境檢測不嚴格的APP就可以在上面測試,也方便後面更改系統原始碼刷機。不過可惜的是無法自定義核心(redroid和Waydroid都是走的容器方案,和主機共享核心),想自定義核心只能用谷歌的cuttlefish或者avd,但是這些在arm上的支援很有限,可以執行但也是沒有GPU加速,後面折騰下cuttlefish。

刷Ubuntu

香橙派刷Ubuntu的過程就不說了,有興趣的看之前那篇文章:香橙派5plus從ssd啟動Ubuntu。刷這個系統的話,執行redroid就不需要再安裝配置啥了。不過,如果要用虛擬WIFI或者ebpf的話,還是得修改核心引數自己編譯linux核心來實現,這個下篇文章具體說編譯過程。

redroid

官方教程:https://github.com/remote-android/redroid-doc

檢查必要條件

grep binder /proc/filesystems
grep ashmem /proc/misc

如果什麼也沒列印,則可能需要手動啟動(我在一臺安裝Ubuntu的鯤鵬920的機器使用下面兩個命令就可以了,這個機器雖然帶的amd的顯示卡,但是也無法直接呼叫GPU)

sudo modprobe ashmem_linux
sudo modprobe binder_linux devices=binder,hwbinder,vndbinder

如果這兩個命令報錯或是沒效果,可能是當前使用的linux核心沒有開啟這兩個功能,則需要參考下面的倉庫說明來安裝支援的核心或是編譯一個核心開啟這兩項功能:https://github.com/remote-android/redroid-modules

GPU加速

使用官方的docker映象能啟動,就是沒有GPU加速,影片走的軟解(cpu模擬),所以操作起來比較卡,在github的issue[1]裡搜尋rk3588可以看到幾條GPU加速有關的評論。

但之前一直沒人分享具體是怎麼編譯帶GPU加速的映象,評論裡只能得出一個有點幫助的結論:從香橙派官方的SDK原始碼中獲取到一些GPU加速相關的驅動檔案,放到安卓原始碼內一起編譯。或者直接將這些檔案複製到docker容器中,重新啟動容器。

這個結論太模糊了,肯定有很多坑,我就一直沒試。直到有一個大佬發出了完整的編譯過程和原始碼[2]

教程寫的很詳細,按照步驟來編譯一次就透過了。另外,還有大佬[3]在這個映象的基礎上增加了一個東西。

所以這裡使用這位大佬的映象[4],在這之前先看一下他提到的依賴(核心版本5.10.160和mali ddk g18p0):

那應該沒問題,還提到要將mali_csffw.bin檔案複製到/lib/firmware/下,我看了下這個資料夾下是有這個檔案的

預設是連結的g15p0,所以我們把這個軟連結刪了,建立一個新的連結到g18p0。不過經過測試,用g15p0版本redroid容器也能正常使用GPU。

測試刷影片也還可以,只能說不算卡吧,也不算流暢,畢竟現在手機配置已經很高了,比這個開發板流暢多了。

安裝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看看顯示卡呼叫是否正常:

顯示卡渲染用的mali-G610那就沒問題,而且重新整理率也有60hz,如果走的軟解重新整理率只有15hz。

magisk

這個容器啟動的時候帶了一個androidboot.redroid_magisk=1 就是開啟magisk,所以開機之後直接就能看到magisk是正常執行的,第一次點進去可能要你重啟,使用docker restart redroid重啟後就能正常使用了。

lsposed

先在magisk裡開啟zygisk,然後用adb push命令將lsposed的安裝包推到容器內。接著在Modules裡安裝,然後重啟就能看到lsposed也是正常執行的。

隨便安裝一個xposed模組就能進去lsposed的設定介面,

gapps

官方就有教程[5]說明怎麼編譯帶gapps的docker映象,不過即使帶了gapps也過不了谷歌的safetynet驗證,很多APP用不了。

issue裡也有人問了,並沒有解決方案:https://github.com/remote-android/redroid-doc/issues/378。下載的映象就有谷歌商店這些。

虛擬WIFI

看了issue,如果不設定虛擬WIFI,有些軟體即使在有網的情況也會認定沒有網路,比如QQ。因為它們只檢測WIFI和流量,這兩個在docker容器裡都是沒有的。但是我測試發現,有虛擬WIFI很多軟體會顯示沒網,沒開虛擬WIFI就正常聯網,所以建議別開,知道有這麼個東西就行了。

所以需要給容器里弄一個虛擬WIFI,需要核心支援[6]

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

切換為ip6tables-legacy後,docker需要重啟服務sudo systemctl restart docker,重啟機器都沒用,會導致容器沒網。

而安裝的這個系統核心沒有開啟這個引數,zcat /proc/config.gz | grep CONFIG_MAC80211_HWSIM

github提供的核心程式碼編譯起來很簡單,基本一步到位就能編譯,但可惜的是沒有提供修改核心引數的選項,並且當你修改了核心配置檔案時,在編譯的時候它又會改回來。

折騰了幾天,把issue裡的問題都翻遍了也沒有找到答案,無奈只能自己去看編譯指令碼,這個具體的過程放到下一篇文章來說,這裡提供編譯好的核心。

更新核心

核心deb包下載地址,系統用的Ubuntu22[7]https://www.123pan.com/s/ihEKVv-TbOx.html 提取碼: AZ3A。除了上面那個引數,我還新增的ebpf相關的引數,這個後面再說。

先用uname -a檢視下當前的核心資訊

首先把編譯好的核心檔案傳到機器上,然後執行sudo dpkg -i *.deb,一共有五個deb檔案,第一個是構建資訊,可以不安裝。

接著使用sudo reboot重啟,在看核心資訊的時間。

核心引數也是正常開啟:

坑1

更新完核心重啟後,原先建立的容器沒網了,只有後面建立的容器才能正常上網。最開始我還以為是核心有問題,還得我又把系統刷了一遍,核心重新編譯了一遍。

坑2

雖然有網,但是b站影片刷不出來,只能重新整理首頁,瀏覽器也訪問不了網頁。(注意:要先去設定裡連線虛擬WIFI才有網)

根據這個裡面的說明: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

發現有時候有網,影片能播放出來,大部分時候都很卡,要一些時間才能載入出影片來,但是重新整理首頁又很快,載入評論也很快。改dns也沒用,後面再試試其他軟體會不會也是這樣。

vpn

可以參考:https://github.com/CNflysky/redroid-rk3588/issues/5,我就不試了。看redroid的說明,啟動的時候也可以指定代理。如果全域性設定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

本文由部落格一文多發平臺 OpenWrite 釋出!

相關文章