话说:前面已经把内核linux-2.6.31成功移植到了mini2440上,可是仔细看看才发现,美中不足的是液晶屏的显示好像整体右移了一截。这个问题在移植内核前就遇到过,当时是因为烧错了内核,把NEC的那个内核zImage_N35烧了。因此,自然而然的就想到了肯定是液晶驱动的问题。

由于mini2440板子上的S3C2440是片内带液晶控制器的,因此,驱动部分用的是公共驱动,就是内核中的drivers/video/s3c2410fb.c这个了。而且从显示上来看,除了发生了位移外,没有别的问题,于是就怀疑是不是配置的问题,遂移步到arch/arm/mach-s3c2440/mach-mini2440.c,一看果然有一个结构体定义液晶的配置:

这么好的代码结构,一看就明白了。再打开友善之臂前几个版本的配置(比如2.6.29的)一看,豁然开朗:

这不,按葫芦画瓢,在配置液晶配置结构体数组mini2440_lcd_cfg[] 中添加下面这段内容:

同时,修改一下液晶屏幕初始化选项

从液晶配置这一点来看,我觉得友善没有2.6.31内核自带的配置合理。友善采用的是宏定义的方式(配置结构体),条件编译内核。所以如果要更换液晶屏,必须重新编译下载内核。但内核采用的是参数化启动的方式(配置结构体数组),这样只需要在内核启动的时候传递一个参数即可支持新的液晶屏。比如这个地方,就可以填写为0~3,自由选择代码中定义了配置的这些液晶屏,也可以自己添加或修改这些配置,然后使用即可。