在
linux
中,
framebuffer
驱动是标准的显示设备的驱动;对于
pc
系统,
framebuffer
驱动是显卡的驱动;对于嵌入式系统的
SOC
处理器,
framebuffer
通常作为其
LCD
控制器或者其它显示设备的驱动。
Framebuffer 驱动是一个字符设备,这个驱动在文件系统中的设备节点通常是: /dev/fbX 主设备号是 29 ,次设备号递增生成 ( 由每个 Framebuffer 程序的注册顺序决定 )。 每个系统可以有多个显示设备,使用 /dev/fb0 、 /dev/fb1 等来表示。
Framebuffer 驱动在用户空间大多使用 ioctl 、 mmap 等文件系统接口进行操作, ioctl 用于获得和设置信息, mmap 可以将 Framebuffer 的内存映射到用户空间。 Framebuffer 驱动也可以直接支持 write 操作,直接用写的
方式输出显示内容。
Framebuffer 驱动的主要头文件: include/linux/fb.h
Framebuffer 驱动核心实现: drivers/video/fbmem.c
Framebuffer 驱动中核心的数据接口是 fb_info, 在 fb.h 中定义 struct fb_info { int node; int flags; struct fb_var_screeninfo var; /* 变化屏幕信息 */ struct fb_fix_screeninfo fix; /* 固定屏幕信息 */ ... struct fb_ops *fbops; ... }
struct fb_info 包含了 framebuffer 驱动的主要信息, struct fb_var_screeninfo 和 struct fb_fix_screeninfo 是两个相关的数据结构,通常对应 FBIOGET_VSCREENINFO 和 FBIOGET_FSCREENINFO 这两个 ioctl 从用户空间获得的显示信息。
fb_ops 表示 framebuffer 驱动的操作。 在具体的 Framebuffer 驱动的实现中,通常能过以下函数进行注册: int register_framebuffer(struct fb_info *fb_info); 具体的 Framebuffer 驱动需要定义一个实现 fb_info 结构、实现 fb_ops 中的各个函数指针。
从驱动程序的用户空间进行 ioctl 调用时,会转换成调用其中的函数。具体的 Framebuffer 驱动注册后,将会自动递增一个次设备号。 在配置 Linux 系统时, Framebuffer 驱动的配置选项是:“ Device Drivers” > “Graphics support”. 其配置文件为: drivers/video/Kconfig, 其中包含了文本模式和控制台、启动图标 (Bootup Logo) 等 子选项的支持,具体的 Framebuffer 驱动由每一个平台支持。
Framebuffer 驱动是 Android 中的标准设备,但路径稍有不同,为 /dev/graphic/fb0 Android 对 Framebuffer 驱动的使用方式是标准的,在 Android 的 GUI 系统中,通过调用 Framebuffer 驱动的标准接口实现显示设备的抽象。
Android 中直接使用标准的Framebuffer驱动,/dev/graphic/中的Framebuffer设备节点由init进程自动创建,被libui库调用 。
Framebuffer 驱动是一个字符设备,这个驱动在文件系统中的设备节点通常是: /dev/fbX 主设备号是 29 ,次设备号递增生成 ( 由每个 Framebuffer 程序的注册顺序决定 )。 每个系统可以有多个显示设备,使用 /dev/fb0 、 /dev/fb1 等来表示。
Framebuffer 驱动在用户空间大多使用 ioctl 、 mmap 等文件系统接口进行操作, ioctl 用于获得和设置信息, mmap 可以将 Framebuffer 的内存映射到用户空间。 Framebuffer 驱动也可以直接支持 write 操作,直接用写的
方式输出显示内容。
Framebuffer 驱动的主要头文件: include/linux/fb.h
Framebuffer 驱动核心实现: drivers/video/fbmem.c
Framebuffer 驱动中核心的数据接口是 fb_info, 在 fb.h 中定义 struct fb_info { int node; int flags; struct fb_var_screeninfo var; /* 变化屏幕信息 */ struct fb_fix_screeninfo fix; /* 固定屏幕信息 */ ... struct fb_ops *fbops; ... }
struct fb_info 包含了 framebuffer 驱动的主要信息, struct fb_var_screeninfo 和 struct fb_fix_screeninfo 是两个相关的数据结构,通常对应 FBIOGET_VSCREENINFO 和 FBIOGET_FSCREENINFO 这两个 ioctl 从用户空间获得的显示信息。
fb_ops 表示 framebuffer 驱动的操作。 在具体的 Framebuffer 驱动的实现中,通常能过以下函数进行注册: int register_framebuffer(struct fb_info *fb_info); 具体的 Framebuffer 驱动需要定义一个实现 fb_info 结构、实现 fb_ops 中的各个函数指针。
从驱动程序的用户空间进行 ioctl 调用时,会转换成调用其中的函数。具体的 Framebuffer 驱动注册后,将会自动递增一个次设备号。 在配置 Linux 系统时, Framebuffer 驱动的配置选项是:“ Device Drivers” > “Graphics support”. 其配置文件为: drivers/video/Kconfig, 其中包含了文本模式和控制台、启动图标 (Bootup Logo) 等 子选项的支持,具体的 Framebuffer 驱动由每一个平台支持。
Framebuffer 驱动是 Android 中的标准设备,但路径稍有不同,为 /dev/graphic/fb0 Android 对 Framebuffer 驱动的使用方式是标准的,在 Android 的 GUI 系统中,通过调用 Framebuffer 驱动的标准接口实现显示设备的抽象。
Android 中直接使用标准的Framebuffer驱动,/dev/graphic/中的Framebuffer设备节点由init进程自动创建,被libui库调用 。