《精通linux设备驱动程序开发》 第12章视频驱动程序 学习笔记
主要内容:
- 显示框架
- Linux视频子系统
- 显示参数
- 帧缓冲API
1.显示框架
VGA(Video Graphics Array,视频图形阵列)是IBM提出的早期显示标准,现在更多体现为分辨率规范。嵌入式SoC通常有一个片上LCD控制器,在LCD控制器上输出的是TTL信号,许多手持设备和电话使用QVGA类型的内部LCD面板,他们直接接收LCD控制器输出的TTL平板视频数据。
2.Linux视频子系统
帧缓冲(frame buffer)是Linux视频系统的核心概念,它进行了一般化的抽象并规定编程接口,可以与平台无关的方式编写应用层和较高内核层的程序。
因此,内核的帧缓冲接口允许应用程序与底层图形硬件的变化无关,通用帧缓冲编程接口也使内核层与硬件无关。
3.显示参数
有时,为了让设备能播放视频,在编写驱动程序的时候,只需要配置与显示面板相关的属性即可。
4.帧缓冲API
帧缓冲核心层向用户空间输出设备结点,以便应用程序能访问每个支持的视频设备。使用帧缓冲API主要要关心的数据结构定义在内核的include/linux/fb.h文件中,而用户侧的定义在/usr/include/linux/fb.h文件中。
4.1视频卡的各个属性保存在struct fb_var_screeninfo内,该结构包含了很多字段,比如X向分辨率、一个像素的位数、pixclock、HSYNC范围、VSYNC范围和空边长度。
struct fb_var_screeninfo { __u32 xres; __u32 yres; /* ... */ __u32 bits_per_pixel; /* ... */ __u32 pixclock; __u32 left_margin; __u32 right_margin; /* ... */ __u32 hsync_len; __u32 vsync_len; /* ... */ };
4.2视频硬件的固定信息
struct fb_fix_screeninfo { char id[16]; unsigned long smem_start; __u32 smem_len; /* ... */ };
stay hungry, stay foolish