做RK3588嵌入式開(kāi)發(fā)的同學(xué),大概率都遇到過(guò)“編譯成功卻啟動(dòng)失敗”的糟心場(chǎng)景——明明按官方流程單獨(dú)編譯了boot.img,燒錄后設(shè)備卻卡在開(kāi)機(jī)logo,或者直接進(jìn)入不了系統(tǒng),查日志、換編譯器、核對(duì)指令都沒(méi)用,最后發(fā)現(xiàn)竟是一個(gè)容易被忽略的GPU配置在“搞鬼”!
今天就把這個(gè)踩坑經(jīng)歷完整分享出來(lái),幫大家少走彎路~
一、問(wèn)題復(fù)現(xiàn):看似無(wú)懈可擊的編譯流程,卻栽了跟頭
我的開(kāi)發(fā)環(huán)境是RK3588 EVB7開(kāi)發(fā)板,SDK內(nèi)核版本為Linux 5.10,按照常規(guī)單獨(dú)編譯boot.img的步驟操作:
cd$sdk/kernel/exportCROSS_COMPILE=../prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-make ARCH=arm64 rockchip_linux_defconfig rockchip_rt.configmake ARCH=arm64 rk3588-evb7-v11-linux.img -j8
編譯過(guò)程一路綠燈,沒(méi)有任何報(bào)錯(cuò),生成的rk3588-evb7-v11-linux.img(包含boot.img)也正常。用RKDevTool燒錄后,設(shè)備上電:屏幕亮了logo,隨后就一直卡住,串口日志停留在“GPU initialization failed”,系統(tǒng)無(wú)法進(jìn)入用戶空間。
一開(kāi)始懷疑是編譯器版本不匹配、defconfig配置錯(cuò)誤,或者內(nèi)核與開(kāi)發(fā)板型號(hào)不兼容,反復(fù)核對(duì)了交叉編譯器路徑、開(kāi)發(fā)板型號(hào)參數(shù),甚至重新同步了SDK,問(wèn)題依然存在。
二、排查關(guān)鍵:從“GPU初始化失敗”鎖定核心原因
既然日志明確指向“GPU初始化”,就順著這個(gè)方向深挖。RK3588集成的是Mali-G610 GPU,而Mali GPU的驅(qū)動(dòng)初始化依賴內(nèi)核配置中的關(guān)鍵選項(xiàng)。
通過(guò)make ARCH=arm64 menuconfig打開(kāi)內(nèi)核配置界面,在“Device Drivers → Graphics support → MaliBifrost seriessupport”路徑下發(fā)現(xiàn):Enable Mali CSF based GPU suppor選項(xiàng)默認(rèn)是關(guān)閉的(設(shè)為n)。
這就是問(wèn)題的根源!之前我們分析過(guò),CONFIG_MALI_CSF_SUPPORT是啟用Mali CSF(圖形計(jì)算子系統(tǒng))架構(gòu)的核心配置,而RK3588的Mali-G610 GPU原生適配CSF架構(gòu)——如果關(guān)閉這個(gè)配置,Mali驅(qū)動(dòng)無(wú)法識(shí)別GPU硬件,會(huì)導(dǎo)致GPU初始化失敗。
更關(guān)鍵的是,RK3588的系統(tǒng)啟動(dòng)流程中,GPU是核心依賴模塊:無(wú)論是Android的GUI顯示,還是Linux的桌面環(huán)境,甚至是部分底層服務(wù),都需要GPU完成圖形渲染或資源調(diào)度。GPU初始化失敗會(huì)直接阻斷啟動(dòng)流程,導(dǎo)致系統(tǒng)卡在開(kāi)機(jī)階段。
三、解決方法:只需一步,啟用CONFIG_MALI_CSF_SUPPORT
找到問(wèn)題后,解決起來(lái)就很簡(jiǎn)單了,核心就是開(kāi)啟CONFIG_MALI_CSF_SUPPORT配置:
1.進(jìn)入內(nèi)核配置界面:

cd$sdk/kernel/make ARCH=arm64 menuconfig
1.導(dǎo)航到GPU配置路徑:
Device Drivers → Graphics support → MaliBifrost seriessupport→Enable Mali CSF based GPU support
2.找到“Enable Mali CSF based GPU support”,按Y鍵啟用(選項(xiàng)前會(huì)出現(xiàn)“*”),確保配置為CONFIG_MALI_CSF_SUPPORT=y。
3.保存配置并退出(按ESC鍵,選擇Save,確認(rèn)保存路徑)。
4.另一個(gè)方法就是直接在配置文件里面添加
5.重新編譯boot.img:
make ARCH=arm64 rk3588-evb7-v11-linux.img -j8
1.重新燒錄生成的鏡像文件,設(shè)備上電后順利進(jìn)入系統(tǒng),串口日志顯示“Mali CSF initialized successfully”,GPU功能正常啟用。
四、原理補(bǔ)充:為什么這個(gè)配置不能少?
可能有同學(xué)會(huì)問(wèn):我只是單獨(dú)編譯boot.img,又不做圖形開(kāi)發(fā),為什么必須啟用GPU配置?
這里再劃重點(diǎn):
1.硬件兼容性強(qiáng)制要求:RK3588的Mali-G610 GPU的硬件設(shè)計(jì)、寄存器邏輯都基于CSF架構(gòu),關(guān)閉CONFIG_MALI_CSF_SUPPORT后,驅(qū)動(dòng)無(wú)法識(shí)別GPU,會(huì)觸發(fā)初始化失敗。
2.系統(tǒng)啟動(dòng)的核心依賴:RK3588的啟動(dòng)流程中,GPU不僅負(fù)責(zé)圖形渲染,還會(huì)參與部分系統(tǒng)資源調(diào)度(如內(nèi)存訪問(wèn)、模塊協(xié)同),GPU初始化失敗會(huì)直接阻斷啟動(dòng)鏈路。
3.驅(qū)動(dòng)生態(tài)的必然要求:RK3588 SDK配套的Mali驅(qū)動(dòng)(無(wú)論是ARM閉源驅(qū)動(dòng)還是社區(qū)開(kāi)源驅(qū)動(dòng))都默認(rèn)依賴CSF架構(gòu),關(guān)閉該配置會(huì)導(dǎo)致驅(qū)動(dòng)加載失敗。
簡(jiǎn)單說(shuō):對(duì)RK3588而言,CONFIG_MALI_CSF_SUPPORT不是“可選配置”,而是“系統(tǒng)正常啟動(dòng)的必要配置”,哪怕你用不到GPU的圖形功能,也必須啟用。
五、避坑總結(jié):?jiǎn)为?dú)編譯boot.img的3個(gè)關(guān)鍵注意點(diǎn)
1.單獨(dú)編譯boot.img時(shí),不要只核對(duì)交叉編譯器和defconfig,一定要檢查GPU相關(guān)配置,尤其是CONFIG_MALI_CSF_SUPPORT必須設(shè)為y。
2.若遇到“啟動(dòng)卡logo”“初始化失敗”類問(wèn)題,優(yōu)先查看串口日志,重點(diǎn)關(guān)注GPU、DDR、CPU等核心模塊的初始化狀態(tài)。
3.編譯前建議通過(guò)make ARCH=arm64 savedefconfig備份當(dāng)前配置,避免后續(xù)修改配置后無(wú)法回滾。
嵌入式開(kāi)發(fā)就是這樣,很多看似“無(wú)關(guān)緊要”的配置,實(shí)則是系統(tǒng)正常運(yùn)行的關(guān)鍵。希望這篇踩坑實(shí)錄能幫大家避開(kāi)這個(gè)坑,讓RK3588的編譯啟動(dòng)一路順暢~
如果還有其他編譯啟動(dòng)相關(guān)的問(wèn)題,歡迎在評(píng)論區(qū)交流!
-
嵌入式
+關(guān)注
關(guān)注
5206文章
20567瀏覽量
336114 -
gpu
+關(guān)注
關(guān)注
28文章
5239瀏覽量
135933 -
編譯
+關(guān)注
關(guān)注
0文章
696瀏覽量
35244
發(fā)布評(píng)論請(qǐng)先 登錄
RK3588 EVB開(kāi)發(fā)板原理圖講解【八】 RK3588 power Tree
基于 RK3588 debian 搭建 RK3588 Kernel 編譯環(huán)境
介紹一種RK3588 Android SDK編譯方法的使用
RK3588 SDK編譯與固件燒寫步驟
RK3588 Android無(wú)法編譯Package模塊是怎么回事
RK3588單獨(dú)編譯kernel的方式
RK3588 Android 12.0 SDK編譯步驟分享
怎樣去解決RK3588編譯kernel的問(wèn)題呢
iTOP3588開(kāi)發(fā)板編譯Android內(nèi)核方法一
RK3588開(kāi)發(fā)板Linux源碼包編譯Ubuntu
【飛凌RK3588開(kāi)發(fā)板試用】源碼編譯
iTOP-RK3588開(kāi)發(fā)板單獨(dú)編譯Android固件-打包update.img
RK3588 SDK入門之編譯使用篇
調(diào)試RK3588必看!這個(gè)臨時(shí)設(shè)備樹文件,藏著你要的所有配置答案
踩坑實(shí)錄:RK3588單獨(dú)編譯boot.img無(wú)法啟動(dòng)?這個(gè)GPU配置才是關(guān)鍵!
評(píng)論