FrameBuffer: 可以译作"帧缓冲",有时简称为 fbdrv。这是一种独立于硬件的抽象图形设备。
是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,允许上层应用程序在图形模式下直接对显示缓冲区进行 读写 操作
RGB888 在32位系统下 4个字节
RGB 565 在 16位系统下 2个字节
-------转自根号五
控制fb
对于应用层,通过操作 /dev/fb* ,通过 ioctl 来用各种命令控制fb
/usr/include/linux/fb.h 中查看
进入内核源码中看看<linux/fb.h>,里面定义了一些ioctl的命令
#define FBIOGET_VSCREENINFO 0x4600 //获取应用程序可改变的参数(如设定的分辨率)
#define FBIOPUT_VSCREENINFO 0x4601
#define FBIOGET_FSCREENINFO 0x4602 //获取固定的参数(如屏幕的分辨率,一般只是拿来看看)
#define FBIOGETCMAP 0x4604
#define FBIOPUTCMAP 0x4605
#define FBIOPAN_DISPLAY 0x4606
<linux/fb.h>中还提供了专门的结构体类型,用来存放上述两个参数,如下就是存放可变参数的结构体类型
struct fb_var_screeninfo {
__u32 xres; /* visible resolution 可视画面的x、y轴分辨率 */
__u32 yres;
__u32 xres_virtual; /* virtual resolution */
__u32 yres_virtual;
__u32 xoffset; /* offset from virtual to visible 可视画面相对于虚拟画面的x、y轴偏移量*/
__u32 yoffset; /* resolution */
__u32 bits_per_pixel; /* guess what 像素深度 */
__u32 grayscale; /* != 0 Graylevels instead of colors */
struct fb_bitfield red; /* bitfield in fb mem if true color, */
struct fb_bitfield green; /* else only length is significant */
struct fb_bitfield blue;
struct fb_bitfield transp; /* transparency */
__u32 nonstd; /* != 0 Non standard pixel format */
__u32 activate; /* see FB_ACTIVATE_* */
__u32 height; /* height of picture in mm */
__u32 width; /* width of picture in mm */
__u32 accel_flags; /* (OBSOLETE) see fb_info.flags */
#include <sys/mman.h>
void *mmap(void *addr, size_t length, int prot, int flags,
int fd, off_t offset);
功能: 内存映射
参数:
addr:欲映射内存的起始地址,NULL表示系统自动选定,映射
成功后返回该地址
length:映射内存大小
prot:映射区域的保护方式(读/写/执行/不能存取)
flags:影响区域映射的各种特性
MAP_SHARED:对映射区域写入的数据会复制回源文件内,
而且允许其他映射该文件的进程共享
MAP_PRIVATE:对映射区域的写入操作会产生一个映射文件的复制,
即对此区域的任何修改都不会写回原来的文件内
fd:要映射的目标文件
offset:文件映射的偏移量(0代表从开头开始)
返回值:
void * :返回映射欲映射内存的首地址
eg:
unsigned int* addr = mmap(NULL, 800*480*4, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, 0);
int munmap(void *addr, size_t length);
功能: 解除内存映射
参数:
addr:映射内存的地址
length:映射内存大小
#include <sys/ioctl.h>
int ioctl(int fd, int request, ...);
ioctl(fd, FBIOGET_VSCREENINFO, &vinfo); //获取屏幕信息(可变)
知识散记:
ctrl + ALt +F3 原始终端 输入linux 1
ctrl + ALt +F1 退出