成功移植UT6410的800*480的LCD驱动

UT6410默认的android内核中是没有7寸屏的LCD驱动的,所以在昨天移植网络之后我们今天接着把LCD的驱动拿移植好。

        首先我们在纯linux内核中找到800*480的驱动源文件,根据config选项我找到了源文件的位置,它位于/drivers/video/samsung下面,一个为s3cfb_UT_LCD7A.c的文件,把这个文件拷贝到我们android kernel下面相应的位置。然后修改相应的kconfigMakefile需要注意的是在drivers/video/samsung目录下面是没有Kconfig文件的,所以我们需要在上一层目录的Kconfig中添加相关的信息,简介如下:

config FB_S3C_LTV350QV

         bool "LTV350QV"

         ---help---

         TBA

下面添加

config FB_URBETTER_UT_LCD7A

         bool "UT_LCD7A 800*480"

         ---help---

         TBA

        然后选择相关的内核编译选项我们就可以进行编译了,在编译的时候我们会发现报如下错误:

drivers/video/samsung/s3cfb_UT_LCD7A.c: In function 's3cfb_set_fimd_info':

drivers/video/samsung/s3cfb_UT_LCD7A.c:49: error: 's3cfb_fimd' undeclared (first use in this function)

drivers/video/samsung/s3cfb_UT_LCD7A.c:49: error: (Each undeclared identifier is reported only once

drivers/video/samsung/s3cfb_UT_LCD7A.c:49: error: for each function it appears in.)

make[3]: *** [drivers/video/samsung/s3cfb_UT_LCD7A.o] Error 1

make[2]: *** [drivers/video/samsung] Error 2

make[1]: *** [drivers/video] Error 2

make: *** [drivers] Error 2

仔细看一下,原来是s3cfb_fimd这个结构体名字在新的内核驱动中被改了个名字,所以我们把它改过来就可以了,也就是把所有的s3cfb_fimd改成s3c_fimd,这样编译就可以过去了,很简单吧。

        就在我以为大功告成的时候,发现在内核启动的时候挂了,报如下错误:

S3C_LCD clock got enabled :: 133.000 Mhz

LCD TYPE :: UT_LCD7A will be initialized

Window[0] - FB1: map_video_memory: clear ffc00000:00177000

            FB1: map_video_memory: dma=57a00000 cpu=ffc00000 size=00177000

Window[0] - FB2: map_video_memory: clear ffcbb800:000bb800

            FB2: map_video_memory: dma=57abb800 cpu=ffcbb800 size=000bb800

Console: switching to colour frame buffer device 100x30

fb0: s3cfb frame buffer device

Failed to allocate video RAM: -12

Trying to free already-free IRQ 62

kernel BUG at mm/slab.c:591!

Unable to handle kernel NULL pointer dereference at virtual address 00000000

pgd = c0004000

[00000000] *pgd=00000000

Internal error: Oops: 805 [#1] PREEMPT

Modules linked in:

……

然后内核就崩溃了,啊,哥好伤心啊,怎么办,只好跟源码了,我们跟踪源码后发现原来是在第二次申请dma的时候没有申请到,以前4寸屏的时候就可以申请到,现在怎么申请不到了啊,仔细一想可能是dma的申请限制太小了,还好以前遇到这样的问题,解决方法如下:

/arch/arm/include/asm/memory.h中的

#define CONSISTENT_DMA_SIZE  SZ_2M修改成

#define CONSISTENT_DMA_SIZE  (SZ_8M + SZ_4M),这样申请的大小限制就变成了12M了,没有任何问题了,LCD的显示就OK了。

结果如下:

成功移植UT6410的800*480的LCD驱动_第1张图片

 

xdyang 2011-3-22 于南京IC学院302

转http://hi.baidu.com/xdyang1986/blog/item/4c92fed0727df62d9b5027bb.html自

你可能感兴趣的:(android,function,video,buffer,makefile,linux内核)