05 FrameBuffer设备
FrameBuffer设备
帧缓冲设备的应用开发通常是对
/dev/fbX
这个帧缓冲设备文件进行I/O操作,在注册帧缓存设备时,会在内核中开辟一个缓冲区,可以把它看成指向显存的指针,通过修改这个缓冲区的内存,内核会同步更改显存,进而改变帧缓冲设备实际显示的内容
个人感觉这一章介绍的对于Framebuffer设备的应用开发API过于底层,实际开发应该不会用如此底层的API来开发,而是用Qt或者LVGL那样的框架进行开发,所以==这章学习的意义不是很大==
1.基本步骤
对帧缓冲设备的应用开发主要包括以下几步:
- 1.打开
/dev/fbX
这个设备文件 - 2.通过
ioctl()
系统调用获得帧缓冲设备的一些重要信息:如屏幕的分辨率大小、像素格式,根据屏幕参数计算显示缓冲区的大小 - 3.通过存储映射 I/O 方式将屏幕的显示缓冲区映射到用户空间(
mmap
),之后就能像操作数组一样操作显存 - 4.映射成功后就可以直接读写屏幕的显示缓冲区,进行绘图或图片显示等操作了
- 5.完成显示后,调用
munmap()
取消映射、并调用close()
关闭设备文件
2.使用ioctl获取屏幕信息
众所周知,在使用ioctrl()
系统调用的时候,需要输入一些指令,以此来进行不同的IO操作,而Framebuffer子系统也向我们提供了一些指令,来让我们获取Framebuffer设备不同的信息。对 于 Framebuffer 设 备 来 说 , 常 用 的 request 包 括FBIOGET_VSCREENINFO
、FBIOPUT_VSCREENINFO
、FBIOGET_FSCREENINFO
FBIOGET_VSCREENINFO
:表示获取 FrameBuffer 设备的可变参数信息FBIOPUT_VSCREENINFO
:表示设置 FrameBuffer 设备的可变参数信息FBIOGET_FSCREENINFO
:表示获取 FrameBuffer 设备的固定参数信息
3.内存映射
常见的内存映射函数有2个,他们的使用场合有所区别:
1.ioremap()
:这个内存映射函数主要用在驱动层,可以将寄存器的物理地址转换为内核进程空间的虚拟地址
2.mmap()
:这个内存映射函数主要用在应用层,可以将内核中的虚拟地址转为当前进程的虚拟地址
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.