概述
<LCD设备驱动>
即Framebuffer设备。主设备号是29。
1. Framebuffer,简称 fb。fb 是一种机制,将系统中所有跟显示有关的硬件以及软件集合起来,虚拟出一个 fb 设备。
当我们编写好 LCD 驱动以后会生成一个名为/dev/fbX(X=0~n)的设备,应用程序通过访问/dev/fbX 这个设备就可以访问 LCD。
NXP 官方的 Linux 内核默认已经开启了 LCD 驱动。
2. Linux 下Framebuffer 驱动的编写流程:
1). Linux 内核将所有的 Framebuffer 抽象为一个叫做 fb_info 的结构体。
fb_info 结构体包含了 Framebuffer 设备的完整属性和操作集合。
2). 每一个 Framebuffer 设备都必须有一个 fb_info。
LCD 的驱动就是构建 fb_info,并且向系统注册 fb_info的过程。
3). fb_info 结构体定义在 include/linux/fb.h 文件里面。
fb_info 结构体的成员变量很多,我们重点关注 var、fix、fbops、screen_base、screen_size和 pseudo_palette。
4). Framebuffer是一个标准的 platform 驱动,当驱动和设备匹配以后mxsfb_probe 函数就会执行。
mxsfb_probe 函数的主要工作内容为:
①申请 fb_info。
②初始化 fb_info 结构体中的各个成员变量。
③初始化 eLCDIF 控制器。
④使用 register_framebuffer 函数向 Linux 内核注册初始化好的 fb_info。
3. Linux内核已经自带了Framebuffer驱动框架,芯片厂商已经编写好LCD接口驱动程序。
因此LCD驱动部分不需要修改,只要按照所使用的LCD型号来修改设备树(如屏幕参数等)即可。
4. fb与应用程序的交互:
对于应用程序而言,它和其它的设备并没有什么区别,用户可以把fb看成是一块内存,既可以向内存中写数据,也可以读数据。
fb的显示缓冲区位于内核空间。应用程序可以把此空间映射到自己的用户空间,再进行操作。
在应用程序中,操作/dev/fbX(X=0~n)设备的一般步骤如下:
①打开/dev/fbX(X=0~n)设备文件。
②用ioctl()操作取得当前显示屏幕的参数,如屏幕的分辨率、每个像素点的比特数。根据屏幕的参数可计算屏幕缓冲区的大小。
③用mmap函数,将屏幕缓冲区映射到用户空间。
④映射后就可以直接读/写屏幕缓冲区,实现一系列绘点、绘线、绘图和图片显示等函数。
<RTC设备驱动>
RTC 设备驱动是一个标准的字符设备驱动,应用程序通过 open、release、read、write 和 ioctl等函数完成对 RTC 设备的操作。
1. Linux 内核将 RTC 设备抽象为 rtc_device 结构体,因此 RTC 设备驱动就是申请并初始化rtc_device,最后将 rtc_device 注册到 Linux 内核。
最后
以上就是活泼羽毛为你收集整理的Linux驱动开发学习笔记-LCD设备驱动的全部内容,希望文章能够帮你解决Linux驱动开发学习笔记-LCD设备驱动所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复