- 1、本文档共61页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
11.4Linux驱动程序接口——
FrameBuffer
11.4.1FrameBuffer
在Linux2.2.xx之后内核版本中出现了一种驱动程序接口即FrameBuffer。这种接口为图像硬件设备提供了一种抽象化处理。它代表了一些视频硬件设备,允许应用软件通过定义明确的界面来访问图像硬件设备。图11-10Linux系统下FrameBuffer的主要结构11.4.2数据结构
1.?LinuxFrameBuffer的数据结构
FrameBuffer的数据结构的定义在内核源码include/linux/
fb.h文件中。
在FrameBuffer中,fb_info可以说是最重要的一个结构体,它是Linux为帧缓冲设备定义的驱动层接口。它不仅包含了底层函数,而且还有记录设备状态的数据。每个帧缓冲设备都与一个fb_info结构相对应。图11-11LinuxFrameBuffer的总体结构图2.?S3C2410中LCD的数据结构
在S3C2410的LCD设备驱动中,定义了s3c2410fb_info(内核源码driver/video/s3c2410.h)文件中来标识一个LCD设备,结构体如下:图11-12S3C2410驱动的整体结构11.5LCD驱动程序主要代码
结构以及关键代码分析
11.5.1FrameBuffer驱动的统一管理
fbmem.c实现了LinuxFrameBuffer的中间层,任何一个FrameBuffer驱动,在系统初始化时,必须向fbmem.c注册,即需要调用register_framebuffer()函数,在这个过程中,设备驱动的信息将会存入名称为registered_fb数组中,这个数组定义为:
structfb_info*registered_fb[FB_MAX];
intnum_registered_fb;11.5.2实现消息的分派
fbmem.c实现了对系统全部FrameBuffer设备的统一管理。当用户尝试使用一个特定的FrameBuffer时,fbmem.c怎么知道该调用哪个特定的设备驱动呢?
Linux是通过主设备号和次设备号对设备进行唯一标识。不同的FrameBuffer设备向fbmem.c注册时,程序分配给它们的主设备号是一样的,而次设备号是不一样的。于是就可以通过用户指明的次设备号,来具体该调用哪一个FrameBuffer驱动。图11-13LCD驱动的open()函数的调用流程图11.5.3开发板S3C2410LCD驱动的流程
1.定义了初始的LCD参数
在mach-smdk2410.c(在内核源码arch/arm/mach-s3c2410目录中)中,定义了初始的LCD参数。注意,这是个全局变量。2.?s3c2410fb_probe函数
内核初始化时候调用s3c2410fb_probe函数(内核源码driver/video/s3c2410fb.c文件中)。
首先动态分配s3c2410fb_info空间。
fbinfo=framebuffer_alloc(sizeof(structs3c2410fb_info),
pdev-dev);
把域mach_info指向mach-smdk2410.c中的smdk2410_lcd
_cfg。
info-mach_info=pdev-dev.platform_data;3.?mmap()映射内存函数
当用户调用mmap()映射内存的时候,fbmem.c把刚才设置好的显存区域映射给用户。
start=info-fix.smem_start;
len=PAGE_ALIGN((start~PAGE_MASK)+info-fix.smem_len);
io_remap_pfn_range(vma,vma-vm_start,offPAGE
_SHIFT,
vma-vm_end-vma-vm_start,vma-vm_page_prot);
…11.6LCD驱动程序开发实例
11.6.1S3C2410与LCD模块的连接电路
博创开发板S3C2410与LCD模块的连接如图11-14所示。图11-14S3C2410与LQ080V3DG01连接图图11-15S3C241O与LQ080V3DG01连接原理图11.6.2修改代码(一)——LCD显示企鹅图像
1.修改mach-smdk2410.c文件
在第8章中成功的内核源代码
文档评论(0)