Android屏幕绘制基本与linux相同,都是使用Framebuffer来绘制屏幕,设备为/dev/graphic/fb0
Framebuffer存储在内存或者显存中,比如一个800 × 600的屏幕,每个像素点为16位色,那么Framebuffer的大小就为(800 × 600 × 16/8) byte
手机的LCD屏幕通过显存中当前的Framebffer和缓存的framebuffer来绘制屏幕上的每一个像素点
具体顺序为:
1 打开framebuffer设备;
2 通过ioctl取得fixed screen information;(ioctl(fd, FBIOGET_FSCREENINFO, &finfo))
3 通过ioctl取得variable screen information;(ioctl(fd, FBIOGET_VSCREENINFO, &vinfo))
4 通过mmap映射设备内存到进程空间;(记得区分内核空间和用户空间,用户空间是无法对物理内存直接读写的)
5 写framebuffer;
6 终止。(记得终止时一定要取消映射,并close掉句柄)
ioctl中request参数:
其实也可以发现,android中的很多机制都是通过ioctl来实现的,比如binder等等:)