欢迎进入IT技术社区论坛,与200万技术人员互动交流 >>进入
2.3.4 Framebuffer设备驱动程序的设计
驱动程序主要完成的工作有以下5部分:
(1)编写初始化函数
Framebuffer驱动首先要初始化LCD控制器,通过相关寄存器来设置LCD相对应的显示模式和颜色数,然后分配显示缓冲区。通常用vmall-oc()函数分配一段连续空间,缓冲区的大小可以用“点阵行数×点阵列数×一个像素的位数/8”计算得到。
如果使用模块化加载方式,加载LCD驱动模块时,系统调用fb_init()函数。卸载LCD驱动模块时,系统首先调用unregister_framebuffer()取消注册,然后释放显示缓冲区的内存。
(2)编写成员函数
(3)读/写(read/write)
完成对帧缓冲区的读写操作。
(4)映射(map)
Linux有内核空间和用户空间,平时工作在保护模式,每个应用程序进程都有自己的虚拟地址空间,应用程序不能直接访问物理缓冲地址。但是,Linux在文件操作接口(file_operations)中提供了地址映射(mmap)操作,它可以将文件的内容映射到用户空间,这样用户就可以通过读写这段地址来访问缓冲区,并在屏幕上绘图。
(5)输入/输出控制
设备文件的ioctl()调用可以读取和设置显示设备的参数,如分辨率、支持颜色数、屏幕大小等。
3 结束语
在编写完驱动程序后,将该驱动程序以加载模块的方式进行编译,并将编译好的LCD设备驱动下载到目标板上,通过编写一个简单的测试Framebuffer设备驱动的应用程序,实现了设备的打开、关闭、内存映射和iotcl等具体操作,完成了在LCD液晶屏不同行上绘制不同颜色,通过编译此程序,在目标板上运行,即可在LCD上显示彩色条纹,这就完成了驱动程序的设计要求。
[1][2]
第一个青春是上帝给的;第二个的青春是*自己努力的