项目平台相关:
硬件平台是在BBB方案的基础上设计的,删除了hdmi,lcd驱动改用lvds接口,使用引脚LCD_DATA[15:0]及相关辅助引脚,进入差分驱动芯片DS90C365AMT,LVDS接口单6输出。其他基本没有改动什么。PDK版本:03.02.00.05,内核版本4.4.32 uboot和kernel的移植均在里面完成,原本是采用PDK内置的toolchain ,无奈在文件系统编译时候,TI给的编译器buildroot不支持,为了整体统一编译器,内核移植和文件系统使用linaro官网下载了PDK相同版本的toolchain-5.3,底层uboot依然使用PDK自带toolchain.
驱动部分,在omap2plus_defconfig配置的基础上的 参考processors.wiki.ti.com/.../Linux_Core_LCD_Controller_User_Guide的说明,配置好了内核中LCDC DRM Display Drive的相关选项。 lcd 相关的dts如下:
panel {
compatible = "ti,tilcdc,panel";
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&lcd_pins_s0>;
panel-info {
ac-bias = <255>;
ac-bias-intrpt = <0>;
dma-burst-sz = <16>;
bpp = <32>;
fdd = <0x80>;
sync-edge = <0>;
sync-ctrl = <1>;
raster-order = <0>;
fifo-th = <0>;
};
display-timings {
1024x768p62 {
clock-frequency = <30000000>;
hactive = <1024>;
vactive = <768>;
hfront-porch = <39>;
hback-porch = <39>;
hsync-len = <47>;
vback-porch = <29>;
vfront-porch = <13>;
vsync-len = <2>;
hsync-active = <1>;
vsync-active = <1>;
};
};
};
fbset命令显示如下:
mode "1024x768-0"
# D: 0.000 MHz, H: 0.000 kHz, V: 0.000 Hz
geometry 1024 768 1024 768 32
timings 0 0 0 0 0 0 0
accel true
rgba 8/16,8/8,8/0,0/0
endmode
实验平台及现象
显示界面基于QT5.6.3(与文件系统内核相同的编译器编译)。做一个简单的界面也崩溃,时间不等。从10分钟到2小时。总是报经典的segmentation fault,或者直接内核崩溃。core dump 进行查找,故障地址多次排查均指向QT库,而不是自写的工程代码bug,很显然不是工程代码的指针类错误或者内存泄露之类的。基本都是指向QT库源代码。在内核移植之前也DDR的配置也按照Steven Liu的在论坛介绍做了详细的ddr3 software leveling. memtest基本ok(没有做过严格的长时间的压力测试,但qt程序基本无法跑,别的测试程序可以跑,我感觉与DDR稳定性应该关联不大)。
网上查下了大量QT应用崩溃的帖子,我估计两种可能性:一就是frramebuffer 驱动处理的不好,导致应用程序在写framebufer的时候内存出错。二:QT库的编译出了问题,与内核不兼容??(没有用TI的sdk供的QT库和文件系统,体积太大只能自己定制)。
希望TI工程师帮我看看,非常感谢。
若有不详细的项目信息我会马上补充。