显示器接口方式
1. 模拟
2.LVDS
3.DVI
4.HDMI
显示单元
frame buffer 是linux视频系统的核心
用户空间
fbset
内核空间
显卡驱动(intelfb)
硬件
底层显示驱动程序
中间层帧缓冲
控制台
高层虚拟终端驱动程序
X windows 的用户模式驱动程序和配置显示参数程序
显示参数
D:dataclock ,视频硬件在显示器上绘制像素的速率 pixclock
geometry: 分辨率
H:水平扫描率
视频硬件每秒扫描的水平显示数目
V:整屏的刷新率
视频控制器在每行结束时候发一个水平同步脉冲(hsync),在每帧结束时发一个垂直同步脉冲(VSYNC).
timings行中HSYNC前的四个
1.显示器右空边(水平前沿)
2.左空边(水平后沿)
3.下空边(垂直前沿)
4.上空边(垂直后沿)
1024*768 lcd
dotclock=(X向分辨率+左空边+右空边+HSYNC长度)*(Y向分辨率+上空边+下空边+VSYNC长度)*刷新率
=(1024+168+16+136)*(768+30+2+6)*60.006=65.003MHZ
pixclock=1/dotclock=15384ps
帧缓冲API
帧缓冲核心层向用户空间输出设备节点,以便应用程序能访问每个支持的视频设备
dev/fbx
struct fb_var_screeninfo
AHB:andvanced high_performance BUS 高级性能总线
bash>fbset (fbset获得显示特性)
mode "1024x768-60“
#D:65.003 MHZ, H:48.365khz,V: 60.006HZ
geometry 1024 768 1024 768 8
timings 15384 168 16 30 2 136 6
hsync high
vsync high
rgba 8/0, 8/0,8/0,0/0
endmode
屏幕消隐
fb_blank()
bash>setterm-blank 10
从帧缓冲DMA
lcd控制器包含了一个DMA引擎,从系统内存抓取图像帧。控制器得到的图像数据发到显示板。
dma_alloc_coherent()
控制台是用于显示内核产生的printk()消息的一种设备
struct console
fbcon=roate:x
X_0 /1/2/3(0/90/180/270)
控制台驱动程序
驱动程序通过usb_uart取出printk()消息,PC主机收到消息,并通过终端显示出来。
启动Logo
在帧缓冲子系统下,有一个启动logo,为了显示这个logo,在内核配置阶段启用,config_logo选项中选一个可用的logo,也可以在drivers/video/logo目录下自定义一个logo图片。
CLUT224是常用的启动logo的图片格式,支持224中颜色
color look up table 色彩查询表,是一个224个RGB组的字符矩阵 224x3,三种颜色
数字矩阵,每个字节是CLUT表的索引,索引从32开始,一直到255 ,drivers/video/fbmem.c
数据结构
fb_info include/linux/fb.h 底层帧缓冲驱动程序使用的数据结构
fb_ops include/linux/fb.h 帧缓冲程序提供的入口地址
fb_var_screeeninfo include/linux/fb.h 视频硬件信息
fb_cmap include/linux/fb. 色彩映射
console include/linux/console.h 顶层控制台驱动程序描述
consw include/linux/console.h 底层控制台驱动描述
内核编程接口
register_framebuffer() drivers/video/fbmem.c 注册底层缓冲设备
unregister_framebuffer() drivers/video/fbmem.c 注销底层缓冲设备
fb_alloc_cmap() drivers/video/fbcmap.c 分配色彩映射
fb_dealloc_cmap() drivers/video/fbcmap.c 释放色彩映射
register_console() kernel /prtink.c 注册顶层控制台驱动程序
unregiste_console() kernel/prtink.c 注销顶层控制台驱动程序