免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1601 | 回复: 0
打印 上一主题 下一主题

关于在S3C6410 Linux使用I80 Framebuffer驱动 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-21 08:41 |只看该作者 |倒序浏览

Andrew Huang bluedrum@163.com 转载请注明作者和网址


 I80屏,也称为MCU屏。是广泛应用于中低端手机和单片机领域的低价LCD屏。价格相当低廉,往往是同尺寸RGB屏价格一半,在小屏应用领域,如工控设备,点读机,POS机和应用相当广泛。在一些嵌入式CPU中,如国产的君正,很早就加入I80屏的支持。三星的ARM CPU从S3C6410开始也加入了I80屏的支持,但是没有提供驱动。

  出于教学的考虑和我做项目咨询的公司产品需要,我在尝试修改S3CFB原有的驱动未果的情况,只能从零开始编写了I80 Frame Buffer驱动。

  因为时间关系,这一个版本只测试原始的FraemBuffer编程和SDL库的支持,对于象QT,FrameBuffer Console之类应用支持在下一步增加。虽然是这样已经可以应用在很多领域了.

 这里也打一下广告,如果你在产品中需要I80/MCU的屏,我们也可以大量提供各种尺寸产品(2.8",3.0"为主),并提供相应的技术支持.可以发邮件给我 bluedrum@163.com.

同时也提供RGB-LCD屏,包括3.5"/4.3"/7"及10"以上超大屏,也提供技术服务.

横屏效果(320x240)

竖屏效果(240x320)

1.       硬件连线

请参考S3C6410及屏厂的硬件连线要求,如果需要支持背光打开和关闭,可以将背光脚连至某一个GPIO脚上,并通知驱动作者调整相应代码.

 

原始的测试平台是 友善之臂的MINI6410. 内核版本是 2.6.28.6,

 

MINI6410上的连线测试

 

2.       内核调整:

目前I80 FrameBuffer驱动是完全从零开发出来,与S3C6410RGB屏驱动是有冲突,无法并存,因此在使用I80屏时必须移动相应驱动,(当然从理论上两者可以并存)

这一个版本的驱动将需要内核如下调整:

 

1.       保留Frame Buffer库支持。

2.       移走S3Cfb RGB-LCD驱动支持。

3.       这个版本没增加对framebuffer终端的支持,所以要从内核移走这个功能。

 

 

l         保留Frame Buffer库支持

l         移走S3Cfb RGB-LCD驱动支持

 

它在

   -> Device Drivers            

     -> Graphics support                                              

           -> Console display driver support                              

             -> Framebuffer Console support (FRAMEBUFFER_CONSOLE [=n]) 

 

修改后保存编译内核 make zImage.

并且新内核下载到板上。

 

 

3.驱动使用

 驱动是以动态模块的方式提供的,在板启动文件 /etc/init.d/rcS最开始加入如下两句

I80驱动 i80dev.ko ,i80fb.ko 拷入开发板的根文件系统 /opt

insmod /opt/i80dev.ko

insmod /opt/i80fb.ko

 

如果加载成功应该看到/dev/fb0 设备结点运行fbset 能看到如下内容

[root@FriendlyARM show]# fbset

 

mode "320x240-0"

        # D: 0.000 MHz, H: 0.000 kHz, V: 0.000 Hz

        geometry 320 240 320 240 16

        timings 0 0 0 0 0 0 0

        accel false

        rgba 5/11,6/5,5/0,0/0

endmode

4.       应用程序测试

 MCU屏和S3C6410的工作特点,需要软件在更新FrameBuffer时后执行一个硬件刷新的指令。但是在FB驱动内核始终没有合适位置来调用这个指令,最后是用一个折衷的办法,将刷新指令以ioctl命令的方法提供给应用程序来主动调用。

 

I80的横屏的参数是 320,240, BPP16.

 

4.1原始的frame Buffer测试

  在对fb0映射的mmap内存进行更新后,需要主动调用一下如下宏来进行刷新.

#define I80_CMD_START_SHOW  (301)

#define I80_START_SHOW(fd)   ioctl(fd,I80_CMD_START_SHOW,0)

具体使用方法,请参见 show_bmp.c 样例

 

4.2 SDL使用I80.

SDL库的因为有专门的更新函数,因此使用I80屏时需要对SDL库进行小的调整,主要集中在 SDL_fbvideo.c这个文件中,在相关的更新函数里加入I80_START_SHOW的调用。

 

具体修改位置参见这个文件中宏I80_FB_PATCH宏所定义的位置。

 

应用程序在调用SDL库,要注意初始化视频必须使用SDL_HWSURFACE | SDL_FULLSCREE,而非常用的SDL_SWSURFACE参数。

 

一般初始化语句要象如下编写

screen     =  SDL_SetVideoMode( 320, 240, 16,SDL_HWSURFACE | SDL_FULLSCREEN);

 

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP