文件IO学习笔记第十章:Framebuffer的解读和应用
大家好,我是小智!
单词
| 英文 | 中文 | 备注 |
|---|---|---|
| get | 获取 | |
| put | 设置 | |
| virtual | 虚拟 | |
| fixed | 固定 | |
| screen | 屏幕 | |
| info | 信息 | |
| bit per pixel(bpp) | 色深 | 色深的单位是比特 |
硬件参数
在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修改。




文件控制
Linux系统提供了一个ioctl(input/output control)函数,该函数是一个专用于设备输入输出操作的系统调用,该调用传入一个跟设备有关的请求码,系统调用的功能完全取决于请求码。


请求码是通过宏定义的方式写入到硬件的驱动程序中,当驱动安装成功后,用户就可以通过头文件中的请求码向内核中的驱动程序发出请求,然后内核通过请求码去访问硬件,再把访问结果返回给用户。
练习
- 设计程序,利用ioctl函数获取LCD的硬件参数,把LCD屏幕的宽和高以及色深的位数输出到屏幕,下载程序到开发板并进行验证。
提示:必须包含该头文件 <linux/fb.h>


浙公网安备 33010602011771号