摘 要 讲解Linux 2 .4.18下设备驱动程序的编写方法,说明了帧缓冲设备驱动程序的实现原理,并详细分析了帧缓冲驱动程序的几个重要的数据结构及其底层驱动函数、用户接口和系统调用关系,归纳出了LCD驱动程序的实现方法。针对具体的LCD液晶屏幕,给出了驱动程序的基本框架。
关键词 ARM;Linux;帧缓冲;LCD驱动程序
1 引言
随着嵌入式系统的性能越来越强大,嵌入式系统的应用范围已渗入到各个领域中。人们对于嵌入式产品的要求也越来越高,各种图形化的软件包也应运而生。这些图形化的界面在开发和移植过程中都需要底层LCD驱动的支持。因此,在嵌入式Linux下编写LCD驱动程序是开发图形化应用系统的关键问题。
S3c2410处理器是**公司生产的基于ARM920T 高性能32位MCU。S3c2410内置LCD控制器,可以传输显示数据和产生控制信号。用户只要设置一系列的寄存器,就可以完成显示配置和控制。配置LCD控制器最重要的一步就是设置显示缓冲区,显示的内容就是从显示缓冲区中读出来的。S3c2410的LCD控制器支持STN和TFT液晶屏幕。文中采用的LRH9J515XA STN/BW型液晶显示屏是分辨率为320*240像素,256色的STN彩色液晶屏幕。
2 Linux设备驱动程序
Linux将设备驱动程序分为3种类型[1]:字符设备、块设备和网络接口。在Linux系统里,所有的设备都是用文件的形式来表示,设备驱动程序就是为特定的硬件提供给用户程序的一组标准化接口,它隐藏了设备的工作细节。应用程序对设备的操作就是对设备文件的操作。 LCD驱动程序属于字符设备驱动,在设计驱动程序的时候和一般的字符设备驱动程序有着相似的流程,分3个步骤[2]:
(1) 定义设备的主、次设备号。主设备号对应驱动程序,次设备号对应具体设备的实例。
(2) Linux 设备操作。在Linux内核中,结构struct file_opretions中定义了对设备的各种操作,例如打开设备使用opn(),关闭设备使用close(),从设备读取数据用read(),将数据写入设备用write()。编写Linux字符设备驱动程序,主要是实现struct file_opretions中的函数。结构中没有实现的函数,结构指针定义为NULL。
(3) Linux 设备的注册和卸载。设备驱动程序在初始化的时候向系统进行注册,设备注册以后,应用程序就可以用上文提到的方法来设备进行操作。注册是通过调用register_chrdev函数来实现,卸载是通过unregister_chrdev函数来实现。
|