由於司徒編譯的Kernel始終無法產生/proc/mi_modules/mi_panel/mi_panel0,因此,屏始終無法被正確初始化,導致顯示有問題,如下圖:
P.S. 最左邊的顯示有一部份跑到最右邊,然後最下方的顯示會有一條線一直閃爍
於是司徒開始逆向看一下mi_panel.ko驅動,發現都是透過mhal.ko驅動做設定,因此,司徒再度往mhal.ko驅動找尋東西,發現有一個副程式似乎跟Pixel Clock有關係
這個位址可以透過kallsym取得
# cat /proc/kallsyms | grep HalPnlSetClkScPixel bf82cc29 t HalPnlSetClkScPixel [mhal]
經由司徒的測試,發現如下的設定可以讓顯示變成正常
#include <linux/device.h> #include <linux/init.h> #include <linux/module.h> typedef void (*_HalPnlSetClkScPixel)(int, int); static _HalPnlSetClkScPixel HalPnlSetClkScPixel = 0xbf82cc29; int ldd_init(void) { HalPnlSetClkScPixel(1, 0x44aa200); return 0; } void ldd_exit(void) { } module_init(ldd_init); module_exit(ldd_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Steward Fu"); MODULE_DESCRIPTION("Linux Driver");
修正後,顯示終於變成正常