LCD屏幕硬件参数
在开发过程中,面对不同型号的LCD屏幕,使用文件IO接口时,应该根据LCD屏幕的实际的硬件参数来申请内存,这样有助于提高程序的可移植性.(在使用其他硬件设备的时候也是一样的)
硬件参数
在Linux系统下是利用Framebuffer子系统来驱动显示设备的,所以Framebuffer子系统会读取LCD屏的硬件信息并存储在内核空间中,关于LCD的硬件参数都是定义在**/usr/include/linux/fb.h**头文件中。
通过fb.h可以看到头文件中存在三个比较重要的结构体,分别是struct fb_fix_screeninfo以及struct fb_var_screeninfo以及struct fb_bitfield,除了这三个结构体之外,可以发现头文件中存在大量的宏定义,用户可以通过这些宏定义来指定读取LCD的部分信息
- struct fb_fix_screeninfo结构体
struct fb_fix_screeninfo结构体主要用于获取FrameBuffer的固定参数,用户无法在应用层修改这些参数,只能通过系统调用ioctl函数使用宏定义FBIOGET_FSCREENINFO去获取这些参数。
- struct fb_var_screeninfo结构体
struct fb_var_screeninfo结构体主要用于获取和设置FrameBuffer的可变屏幕参数,包括分辨率、像素位深、像素格式等。这些信息可以通过ioctl函数使用宏定义FBIOGET_VSCREENINFO获取,也可以通过宏定义FBIOPUT_VSCREENINFO修改。
- struct fb_bitfield结构体
struct fb_bitfield结构体用于fb缓存的RGB位域,该结构描述每一个像素显示缓冲区的组织方式
文件控制
Linux系统提供了一个ioctl(input/output control)函数,该函数是一个专用于设备输入输出操作的系统调用,该调用传入一个跟设备有关的请求码,系统调用的功能完全取决于请求码。
请求码是通过宏定义的方式写入到硬件的驱动程序中,当驱动安装成功后,用户就可以通过头文件中的请求码向内核中的驱动程序发出请求,然后内核通过请求码去访问硬件,再把访问结果返回给用户。