調試rk3399pro 的板子,編譯好 image 燒錄ok,現象是這樣的,能連接adb , 可以 adb logcat。但是 通過 pc 控制軟件 Vysor 不能連接手機, 連接 HDMI 屏幕也沒有顯示。
打印adb logcat 分析,發現連個 異常:
1 zygote64: Incomplete boot detected. Pruning dalvik cache. 表示android 沒有啟動成功
2 從 adb log 和 串口log 都能發現這個崩潰信息
[ 4.577503] DEBUG: #00 pc 000000000001e2e0 /system/lib64/libc.so (strlen+16)
[ 4.577558] DEBUG: #01 pc 0000000000047b80 /system/lib64/libc.so (__strcpy_chk+32)
[ 4.577614] DEBUG: #02 pc 0000000000000aa8 /vendor/lib64/hw/power.rk3399pro.so (rk_power_init+392)
[ 4.577701] DEBUG: #03 pc 0000000000003298 /vendor/lib64/hw/android.hardware.power@1.0-impl.so (HIDL_FETCH_IPower+240)
目前只能順着這個代碼崩潰信息往下查下, 找到 函數 rk_power_init() 的代碼,可以看到這個函數去讀 cpu0 cpu1 gpu 的頻率信息,沒有讀到 cpu1 和 gpu的節點信息,直接拷貝,就崩潰了。
adb shell 后 進入這些路徑去看,確實沒有生成這些節點。
#define CPU_CLUST1_GOV_PATH "/sys/devices/system/cpu/cpufreq/policy4/
#define GPU_GOV_PATH "/sys/class/devfreq/ff9a0000.gpu/governor
在kernel 的代碼中找 cpufreq 的驅動,產生這些節點的文件,在 kernel log 中搜 cpu 有關的 log,發現如下 異常信息:
[ 1.040714] cpu cpu4: Failed to set regulator for cpu4: -517
[ 1.041043] cpu cpu5: Failed to set regulator for cpu5: -517
這個 cpu4 和 cpu5 正好是 上面 CPU_CLUST1 對應的 cpu。 這個 cpu 的 供電 沒有讀到,從 dts 中查找, cpu 的供電
&cpu_b0 {
cpu-supply = <&vdd_cpu_b>;
};
&cpu_b1 {
cpu-supply = <&vdd_cpu_b>;
};
vdd_cpu_b: tcs452x@1c {
compatible = "tcs,tcs452x";
}
打開原理圖,查找 cpu_b 的供電, 發現供電的芯片不是 tcs452x, 而是
vdd_cpu_b: syr837@40 {
compatible = "silergy,syr827";
}
從 rockchip 的dts 中搜有沒有 用 syr837 作為 cpu_b 的配置,果然能搜到,修改這個 cpu b 的電壓配置,編譯 kernel , 燒錄 boot.img。
串口log 中 cpu 設置電壓fail 的log 不見了, 節點也生成出來了,崩潰信息也消失了。
通過 pc 端的控制軟件,直接就可以連接手機了, 啟動成功了。