V3S中换2.0寸LCD时MINIGUI无显示的问题的解决过程
故障現(xiàn)象:minigui無法顯示界面,消息系統(tǒng)正常。
排查過程:
1.修改V3S初始化代碼,把代碼中通過讀配置文件獲取的參數(shù)改成固定的320*240,這樣就自動會使用320-240配套的配置文件了。發(fā)現(xiàn)故障依舊。
void getScreenInfo(int *w, int *h)
{
static int swidth = 0;
static int sheight =0;
if(swidth == 0 ){
char *env = NULL;
char mode[32]={0};
db_msg(" ");
if ((env=getenv("MG_DEFAULTMODE")) != NULL) {
strncpy(mode, env, strlen(env)+1);
}
db_msg(" ");
char *pW = NULL;
char *pH = NULL;
pW = strstr(mode, "x");
*pW = '\0';
swidth = atoi(mode);
*pW = 'x';
pH = strstr(mode, "-");
*pW = '\0';
sheight = atoi(pW+1);
*pW = '-';
}
//swidth = 320;
//sheight = 240;
?
*w = swidth;?
*h = sheight;
printf("\n\n..................width:%d height:%d........................\n\n", swidth, sheight);
}
2.在1的基礎(chǔ)上,簡化程序,只讓程序中運行minigui,且顯示一個最簡單的窗口,還是不行。
3.單獨寫了幾個測試程序,直接訪問fb文件,發(fā)現(xiàn)能夠正常顯示,在pc端做實驗時,要用ctrl+alt+F1切換到字符界面才行,測試完后用+F5切換回圖形界面。
4.仔細看了調(diào)試信息,發(fā)現(xiàn)內(nèi)核驅(qū)動打印出“invallid argb format.........”的調(diào)試信息,經(jīng)過查看驅(qū)動代碼和minigui的源代碼,最后定位故障在minigui的初始化函數(shù)中,發(fā)現(xiàn)初始化函數(shù)會讀取環(huán)境變量:MG_DEFAULTMODE,這個環(huán)境變量位于文件root/init.sun8i.rc中,配置為:export MG_DEFAULTMODE "320x480-32bpp",而不是"320x240-32bpp",導致初始化異常。
5.通過手工方式修改MG_DEFAULTMODE為"320x240-32bpp",在命令下執(zhí)行:export MG_DEFAULTMODE=320x240-32bpp,顯示回復正常。
6.正式打包時,把這個文件修改為正確的參數(shù),問題徹底結(jié)局。
總結(jié):開始以為只要初始化時使用對應的配置文件就可以了,沒想到minigui底層還會調(diào)用這個環(huán)境變量。
總結(jié)
以上是生活随笔為你收集整理的V3S中换2.0寸LCD时MINIGUI无显示的问题的解决过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程还是多进程的选择及区别
- 下一篇: 解压与压缩ramdisk.img文件